Unlock the folder only after we actually deleted the file
authorKevin Ottens <kevin.ottens@nextcloud.com>
Wed, 8 Jul 2020 14:48:06 +0000 (16:48 +0200)
committerCamila <smayres@gmail.com>
Thu, 9 Jul 2020 14:22:54 +0000 (16:22 +0200)
Signed-off-by: Kevin Ottens <kevin.ottens@nextcloud.com>
src/libsync/propagateremotedelete.cpp
src/libsync/propagateremotedelete.h

index 8d4460be1658966370b62d0c5dc68273945d8d72..bc50f2579237e7bb0cb85e5220196ac49c75c003 100644 (file)
@@ -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);
+    }
 }
 }
index 83eca33ef85cbb53ea23c4497a89dcfb67e9cd95..096e186982d8439fe0fe6b1e7db1d1a4fa47b82c 100644 (file)
@@ -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<DeleteJob> _job;
+    PropagateRemoteDeleteEncrypted *_deleteEncryptedHelper = nullptr;
 
 public:
     PropagateRemoteDelete(OwncloudPropagator *propagator, const SyncFileItemPtr &item)