Set the encrypted flag in the database when EncryptFolderJob succeeds

Signed-off-by: Kevin Ottens <kevin.ottens@nextcloud.com>
This commit is contained in:
Kevin Ottens 2020-12-07 18:17:14 +01:00
parent b667bdda14
commit 37a51872e1
No known key found for this signature in database
GPG key ID: 074BBBCB8DECC9E2
4 changed files with 16 additions and 4 deletions

View file

@ -307,7 +307,7 @@ void AccountSettings::slotMarkSubfolderEncrypted(const FolderStatusModel::SubFol
// But EncryptFolderJob expects directory path Foo/Bar convention // But EncryptFolderJob expects directory path Foo/Bar convention
const auto path = folderInfo->_path.chopped(1); 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); connect(job, &OCC::EncryptFolderJob::finished, this, &AccountSettings::slotEncryptFolderFinished);
job->start(); job->start();
} }

View file

@ -14,6 +14,7 @@
#include "encryptfolderjob.h" #include "encryptfolderjob.h"
#include "common/syncjournaldb.h"
#include "clientsideencryptionjobs.h" #include "clientsideencryptionjobs.h"
#include <QLoggingCategory> #include <QLoggingCategory>
@ -22,9 +23,10 @@ namespace OCC {
Q_LOGGING_CATEGORY(lcEncryptFolderJob, "nextcloud.sync.propagator.encryptfolder", QtInfoMsg) 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) : QObject(parent)
, _account(account) , _account(account)
, _journal(journal)
, _path(path) , _path(path)
, _fileId(fileId) , _fileId(fileId)
{ {
@ -47,6 +49,13 @@ void EncryptFolderJob::slotEncryptionFlagSuccess(const QByteArray &fileId)
{ {
_account->e2e()->setFolderEncryptedStatus(_path + '/', true); _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); auto lockJob = new LockEncryptFolderApiJob(_account, fileId, this);
connect(lockJob, &LockEncryptFolderApiJob::success, connect(lockJob, &LockEncryptFolderApiJob::success,
this, &EncryptFolderJob::slotLockForEncryptionSuccess); this, &EncryptFolderJob::slotLockForEncryptionSuccess);

View file

@ -18,6 +18,7 @@
#include "account.h" #include "account.h"
namespace OCC { namespace OCC {
class SyncJournalDb;
class OWNCLOUDSYNC_EXPORT EncryptFolderJob : public QObject class OWNCLOUDSYNC_EXPORT EncryptFolderJob : public QObject
{ {
@ -29,7 +30,7 @@ public:
}; };
Q_ENUM(Status) 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(); void start();
QString errorString() const; QString errorString() const;
@ -49,6 +50,7 @@ private slots:
private: private:
AccountPtr _account; AccountPtr _account;
SyncJournalDb *_journal;
QString _path; QString _path;
QByteArray _fileId; QByteArray _fileId;
QByteArray _folderToken; QByteArray _folderToken;

View file

@ -242,7 +242,7 @@ void PropagateRemoteMkdir::slotMkcolJobFinished()
// But encryption job expect it in Foo/Bar/ convention // But encryption job expect it in Foo/Bar/ convention
const auto path = _job->path().mid(1); 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); connect(job, &OCC::EncryptFolderJob::finished, this, &PropagateRemoteMkdir::slotEncryptFolderFinished);
job->start(); job->start();
} }
@ -252,6 +252,7 @@ void PropagateRemoteMkdir::slotEncryptFolderFinished()
{ {
qCDebug(lcPropagateRemoteMkdir) << "Success making the new folder encrypted"; qCDebug(lcPropagateRemoteMkdir) << "Success making the new folder encrypted";
propagator()->_activeJobList.removeOne(this); propagator()->_activeJobList.removeOne(this);
_item->_isEncrypted = true;
success(); success();
} }