From: Kevin Ottens Date: Wed, 8 Jul 2020 14:18:08 +0000 (+0200) Subject: Stop unlocking from within PropagateRemoteDeleteEncrypted X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~222^2^2~86 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=0575d0e793f209f65b87d543bdc8c589e17ed635;p=nextcloud-desktop.git Stop unlocking from within PropagateRemoteDeleteEncrypted We need to finish deleting the file before we can actually unlock. Also the token will be necessary for the delete to succeed. Signed-off-by: Kevin Ottens --- diff --git a/src/libsync/propagateremotedeleteencrypted.cpp b/src/libsync/propagateremotedeleteencrypted.cpp index f9048067a..1f4dd80f7 100644 --- a/src/libsync/propagateremotedeleteencrypted.cpp +++ b/src/libsync/propagateremotedeleteencrypted.cpp @@ -20,6 +20,11 @@ PropagateRemoteDeleteEncrypted::PropagateRemoteDeleteEncrypted(OwncloudPropagato } +QByteArray PropagateRemoteDeleteEncrypted::folderToken() +{ + return _folderToken; +} + void PropagateRemoteDeleteEncrypted::start() { Q_ASSERT(!_item->_encryptedFileName.isEmpty()); @@ -65,7 +70,7 @@ void PropagateRemoteDeleteEncrypted::slotFolderEncryptedMetadataReceived(const Q { if (statusCode == 404) { qCDebug(PROPAGATE_REMOVE_ENCRYPTED) << "Metadata not found, ignoring."; - unlockFolder(); + emit finished(true); return; } @@ -90,7 +95,8 @@ void PropagateRemoteDeleteEncrypted::slotFolderEncryptedMetadataReceived(const Q if (!found) { // The removed file was not in the JSON so nothing else to do - unlockFolder(); + emit finished(true); + return; } qCDebug(PROPAGATE_REMOVE_ENCRYPTED) << "Metadata updated, sending to the server."; @@ -100,13 +106,18 @@ void PropagateRemoteDeleteEncrypted::slotFolderEncryptedMetadataReceived(const Q metadata.encryptedMetadata(), _folderToken); - connect(job, &UpdateMetadataApiJob::success, this, &PropagateRemoteDeleteEncrypted::unlockFolder); + connect(job, &UpdateMetadataApiJob::success, this, [this] { emit finished(true); }); connect(job, &UpdateMetadataApiJob::error, this, &PropagateRemoteDeleteEncrypted::taskFailed); job->start(); } void PropagateRemoteDeleteEncrypted::unlockFolder() { + if (!_folderLocked) { + emit folderUnlocked(); + return; + } + qCDebug(PROPAGATE_REMOVE_ENCRYPTED) << "Unlocking folder" << _folderId; auto unlockJob = new UnlockEncryptFolderApiJob(_propagator->account(), _folderId, _folderToken, this); @@ -114,7 +125,7 @@ void PropagateRemoteDeleteEncrypted::unlockFolder() connect(unlockJob, &UnlockEncryptFolderApiJob::success, [this] { qCDebug(PROPAGATE_REMOVE_ENCRYPTED) << "Folder successfully unlocked" << _folderId; _folderLocked = false; - emit finished(true); + emit folderUnlocked(); }); connect(unlockJob, &UnlockEncryptFolderApiJob::error, this, &PropagateRemoteDeleteEncrypted::taskFailed); unlockJob->start(); @@ -124,6 +135,7 @@ void PropagateRemoteDeleteEncrypted::taskFailed() { qCDebug(PROPAGATE_REMOVE_ENCRYPTED) << "Task failed of job" << sender(); if (_folderLocked) { + connect(this, &PropagateRemoteDeleteEncrypted::folderUnlocked, this, [this] { emit finished(false); }); unlockFolder(); } else { emit finished(false); diff --git a/src/libsync/propagateremotedeleteencrypted.h b/src/libsync/propagateremotedeleteencrypted.h index 8e0d44f90..25ef3738b 100644 --- a/src/libsync/propagateremotedeleteencrypted.h +++ b/src/libsync/propagateremotedeleteencrypted.h @@ -15,17 +15,20 @@ class PropagateRemoteDeleteEncrypted : public QObject public: PropagateRemoteDeleteEncrypted(OwncloudPropagator *_propagator, SyncFileItemPtr item, QObject *parent); + QByteArray folderToken(); + void unlockFolder(); + void start(); signals: void finished(bool success); + void folderUnlocked(); private: void slotFolderEncryptedIdReceived(const QStringList &list); void slotTryLock(const QByteArray &folderId); void slotFolderLockedSuccessfully(const QByteArray &fileId, const QByteArray &token); void slotFolderEncryptedMetadataReceived(const QJsonDocument &json, int statusCode); - void unlockFolder(); void taskFailed(); OwncloudPropagator *_propagator;