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
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();
}

View 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);

View 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;

View 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();
}