From: Kevin Ottens Date: Wed, 8 Jul 2020 14:48:06 +0000 (+0200) Subject: Unlock the folder only after we actually deleted the file X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~222^2^2~84 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=1be869fdc7e10c247e71ab05b1d67cf7bdec4761;p=nextcloud-desktop.git Unlock the folder only after we actually deleted the file Signed-off-by: Kevin Ottens --- diff --git a/src/libsync/propagateremotedelete.cpp b/src/libsync/propagateremotedelete.cpp index 8d4460be1..bc50f2579 100644 --- a/src/libsync/propagateremotedelete.cpp +++ b/src/libsync/propagateremotedelete.cpp @@ -80,12 +80,12 @@ void PropagateRemoteDelete::start() return; if (!_item->_encryptedFileName.isEmpty()) { - auto job = new PropagateRemoteDeleteEncrypted(propagator(), _item, this); - connect(job, &PropagateRemoteDeleteEncrypted::finished, this, [this] (bool success) { + _deleteEncryptedHelper = new PropagateRemoteDeleteEncrypted(propagator(), _item, this); + connect(_deleteEncryptedHelper, &PropagateRemoteDeleteEncrypted::finished, this, [this] (bool success) { Q_UNUSED(success) // Should we skip file deletion in case of failure? createDeleteJob(_item->_encryptedFileName); }); - job->start(); + _deleteEncryptedHelper->start(); } else { createDeleteJob(_item->_file); } @@ -98,6 +98,9 @@ void PropagateRemoteDelete::createDeleteJob(const QString &filename) _job = new DeleteJob(propagator()->account(), propagator()->_remoteFolder + filename, this); + if (_deleteEncryptedHelper && !_deleteEncryptedHelper->folderToken().isEmpty()) { + _job->setFolderToken(_deleteEncryptedHelper->folderToken()); + } connect(_job.data(), &DeleteJob::finishedSignal, this, &PropagateRemoteDelete::slotDeleteJobFinished); propagator()->_activeJobList.append(this); _job->start(); @@ -149,6 +152,17 @@ void PropagateRemoteDelete::slotDeleteJobFinished() propagator()->_journal->deleteFileRecord(_item->_originalFile, _item->isDirectory()); propagator()->_journal->commit("Remote Remove"); - done(SyncFileItem::Success); + + if (_deleteEncryptedHelper && !_job->folderToken().isEmpty()) { + propagator()->_activeJobList.append(this); + connect(_deleteEncryptedHelper, &PropagateRemoteDeleteEncrypted::folderUnlocked, + this, [this] { + propagator()->_activeJobList.removeOne(this); + done(SyncFileItem::Success); + }); + _deleteEncryptedHelper->unlockFolder(); + } else { + done(SyncFileItem::Success); + } } } diff --git a/src/libsync/propagateremotedelete.h b/src/libsync/propagateremotedelete.h index 83eca33ef..096e18698 100644 --- a/src/libsync/propagateremotedelete.h +++ b/src/libsync/propagateremotedelete.h @@ -18,6 +18,8 @@ namespace OCC { +class PropagateRemoteDeleteEncrypted; + /** * @brief The DeleteJob class * @ingroup libsync @@ -51,6 +53,7 @@ class PropagateRemoteDelete : public PropagateItemJob { Q_OBJECT QPointer _job; + PropagateRemoteDeleteEncrypted *_deleteEncryptedHelper = nullptr; public: PropagateRemoteDelete(OwncloudPropagator *propagator, const SyncFileItemPtr &item)