From 37a51872e1b82e367df529cd042248cac31aed2b Mon Sep 17 00:00:00 2001 From: Kevin Ottens Date: Mon, 7 Dec 2020 18:17:14 +0100 Subject: [PATCH] Set the encrypted flag in the database when EncryptFolderJob succeeds Signed-off-by: Kevin Ottens --- src/gui/accountsettings.cpp | 2 +- src/libsync/encryptfolderjob.cpp | 11 ++++++++++- src/libsync/encryptfolderjob.h | 4 +++- src/libsync/propagateremotemkdir.cpp | 3 ++- 4 files changed, 16 insertions(+), 4 deletions(-) diff --git a/src/gui/accountsettings.cpp b/src/gui/accountsettings.cpp index 6d8618236..0341fd661 100644 --- a/src/gui/accountsettings.cpp +++ b/src/gui/accountsettings.cpp @@ -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(); } diff --git a/src/libsync/encryptfolderjob.cpp b/src/libsync/encryptfolderjob.cpp index 8a3d5b8fb..68b446c1d 100644 --- a/src/libsync/encryptfolderjob.cpp +++ b/src/libsync/encryptfolderjob.cpp @@ -14,6 +14,7 @@ #include "encryptfolderjob.h" +#include "common/syncjournaldb.h" #include "clientsideencryptionjobs.h" #include @@ -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); diff --git a/src/libsync/encryptfolderjob.h b/src/libsync/encryptfolderjob.h index ff071f8f2..75293b81d 100644 --- a/src/libsync/encryptfolderjob.h +++ b/src/libsync/encryptfolderjob.h @@ -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; diff --git a/src/libsync/propagateremotemkdir.cpp b/src/libsync/propagateremotemkdir.cpp index 17143a21c..ca18c04c3 100644 --- a/src/libsync/propagateremotemkdir.cpp +++ b/src/libsync/propagateremotemkdir.cpp @@ -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(); }