Set the encrypted flag in the database when EncryptFolderJob succeeds
authorKevin Ottens <kevin.ottens@nextcloud.com>
Mon, 7 Dec 2020 17:17:14 +0000 (18:17 +0100)
committerKevin Ottens <kevin.ottens@nextcloud.com>
Tue, 15 Dec 2020 09:59:22 +0000 (10:59 +0100)
Signed-off-by: Kevin Ottens <kevin.ottens@nextcloud.com>
src/gui/accountsettings.cpp
src/libsync/encryptfolderjob.cpp
src/libsync/encryptfolderjob.h
src/libsync/propagateremotemkdir.cpp

index 6d86182366ab4d3ee6e8969f8c1c19e5794568ba..0341fd6619f7ec8f84a4ee59aabf04a42c97ca09 100644 (file)
@@ -307,7 +307,7 @@ void AccountSettings::slotMarkSubfolderEncrypted(const FolderStatusModel::SubFol
     // But EncryptFolderJob expects directory path Foo/Bar convention
     const auto path = folderInfo->_path.chopped(1);
 
-    auto job = new OCC::EncryptFolderJob(accountsState()->account(), path, folderInfo->_fileId, this);
+    auto job = new OCC::EncryptFolderJob(accountsState()->account(), folderInfo->_folder->journalDb(), path, folderInfo->_fileId, this);
     connect(job, &OCC::EncryptFolderJob::finished, this, &AccountSettings::slotEncryptFolderFinished);
     job->start();
 }
index 8a3d5b8fbb414cf6b16acb5ce7f5c0b368a98aa7..68b446c1d2a7f97bb402dc09a2a3dd9d3dcc85a6 100644 (file)
@@ -14,6 +14,7 @@
 
 #include "encryptfolderjob.h"
 
+#include "common/syncjournaldb.h"
 #include "clientsideencryptionjobs.h"
 
 #include <QLoggingCategory>
@@ -22,9 +23,10 @@ namespace OCC {
 
 Q_LOGGING_CATEGORY(lcEncryptFolderJob, "nextcloud.sync.propagator.encryptfolder", QtInfoMsg)
 
-EncryptFolderJob::EncryptFolderJob(const AccountPtr &account, const QString &path, const QByteArray &fileId, QObject *parent)
+EncryptFolderJob::EncryptFolderJob(const AccountPtr &account, SyncJournalDb *journal, const QString &path, const QByteArray &fileId, QObject *parent)
     : QObject(parent)
     , _account(account)
+    , _journal(journal)
     , _path(path)
     , _fileId(fileId)
 {
@@ -47,6 +49,13 @@ void EncryptFolderJob::slotEncryptionFlagSuccess(const QByteArray &fileId)
 {
     _account->e2e()->setFolderEncryptedStatus(_path + '/', true);
 
+    SyncJournalFileRecord rec;
+    _journal->getFileRecord(_path, &rec);
+    if (rec.isValid()) {
+        rec._isE2eEncrypted = true;
+        _journal->setFileRecord(rec);
+    }
+
     auto lockJob = new LockEncryptFolderApiJob(_account, fileId, this);
     connect(lockJob, &LockEncryptFolderApiJob::success,
             this, &EncryptFolderJob::slotLockForEncryptionSuccess);
index ff071f8f22e872f9837025353ae9e6a0d6849de0..75293b81d5a6ee979e9e340a7c2c5f555b856796 100644 (file)
@@ -18,6 +18,7 @@
 #include "account.h"
 
 namespace OCC {
+class SyncJournalDb;
 
 class OWNCLOUDSYNC_EXPORT EncryptFolderJob : public QObject
 {
@@ -29,7 +30,7 @@ public:
     };
     Q_ENUM(Status)
 
-    explicit EncryptFolderJob(const AccountPtr &account, const QString &path, const QByteArray &fileId, QObject *parent = nullptr);
+    explicit EncryptFolderJob(const AccountPtr &account, SyncJournalDb *journal, const QString &path, const QByteArray &fileId, QObject *parent = nullptr);
     void start();
 
     QString errorString() const;
@@ -49,6 +50,7 @@ private slots:
 
 private:
     AccountPtr _account;
+    SyncJournalDb *_journal;
     QString _path;
     QByteArray _fileId;
     QByteArray _folderToken;
index 17143a21c1da6a251266c73dcccd54522c06f17a..ca18c04c32ab1246f4c198e1092d6a271e123c2d 100644 (file)
@@ -242,7 +242,7 @@ void PropagateRemoteMkdir::slotMkcolJobFinished()
         // But encryption job expect it in Foo/Bar/ convention
         const auto path = _job->path().mid(1);
 
-        auto job = new OCC::EncryptFolderJob(propagator()->account(), path, _item->_fileId, this);
+        auto job = new OCC::EncryptFolderJob(propagator()->account(), propagator()->_journal, path, _item->_fileId, this);
         connect(job, &OCC::EncryptFolderJob::finished, this, &PropagateRemoteMkdir::slotEncryptFolderFinished);
         job->start();
     }
@@ -252,6 +252,7 @@ void PropagateRemoteMkdir::slotEncryptFolderFinished()
 {
     qCDebug(lcPropagateRemoteMkdir) << "Success making the new folder encrypted";
     propagator()->_activeJobList.removeOne(this);
+    _item->_isEncrypted = true;
     success();
 }