E2EE fix upload parallelism issue.
authorallexzander <blackslayer4@gmail.com>
Wed, 13 Jan 2021 14:34:08 +0000 (16:34 +0200)
committerallexzander (Rebase PR Action) <allexzander@users.noreply.github.com>
Thu, 14 Jan 2021 06:59:05 +0000 (06:59 +0000)
Signed-off-by: allexzander <blackslayer4@gmail.com>
src/libsync/owncloudpropagator.cpp
src/libsync/owncloudpropagator.h
src/libsync/propagateremotemkdir.cpp
src/libsync/propagateupload.cpp

index c576c93dfd2e08d4f44881dda85cfc8650449cdd..90ba4ea667b96599d35e66d6d165dfe9477f61b9 100644 (file)
@@ -301,6 +301,29 @@ void PropagateItemJob::slotRestoreJobFinished(SyncFileItem::Status status)
     }
 }
 
+bool PropagateItemJob::hasEncryptedAncestor() const
+{
+    if (!propagator()->account()->capabilities().clientSideEncryptionAvailable()) {
+        return false;
+    }
+
+    const auto path = _item->_file;
+    const auto slashPosition = path.lastIndexOf('/');
+    const auto parentPath = slashPosition >= 0 ? path.left(slashPosition) : QString();
+
+    auto pathComponents = parentPath.split('/');
+    while (!pathComponents.isEmpty()) {
+        SyncJournalFileRecord rec;
+        propagator()->_journal->getFileRecord(pathComponents.join('/'), &rec);
+        if (rec.isValid() && rec._isE2eEncrypted) {
+            return true;
+        }
+        pathComponents.removeLast();
+    }
+
+    return false;
+}
+
 // ================================================================================
 
 PropagateItemJob *OwncloudPropagator::createJob(const SyncFileItemPtr &item)
index e16e27cf8df032a5a2f007dcd7d408990e67c661..ba36ce344d26ff1162cf38bc09a5e81c2af7bd64 100644 (file)
@@ -171,6 +171,8 @@ protected:
         _item->_errorString = msg;
     }
 
+    bool hasEncryptedAncestor() const;
+
 protected slots:
     void slotRestoreJobFinished(SyncFileItem::Status status);
 
index 3aeb493886241ab35d6986ba1c44a40b9c52d41e..8b7228d997c0d2a52e9be3457c9c6c84ae44aba9 100644 (file)
@@ -34,14 +34,6 @@ PropagateRemoteMkdir::PropagateRemoteMkdir(OwncloudPropagator *propagator, const
     , _uploadEncryptedHelper(nullptr)
     , _parallelism(FullParallelism)
 {
-    const auto rootPath = [=]() {
-        const auto result = propagator->remotePath();
-        if (result.startsWith('/')) {
-            return result.mid(1);
-        } else {
-            return result;
-        }
-    }();
     const auto path = _item->_file;
     const auto slashPosition = path.lastIndexOf('/');
     const auto parentPath = slashPosition >= 0 ? path.left(slashPosition) : QString();
@@ -52,11 +44,7 @@ PropagateRemoteMkdir::PropagateRemoteMkdir(OwncloudPropagator *propagator, const
         return;
     }
 
-    const auto account = propagator->account();
-
-    if (account->capabilities().clientSideEncryptionAvailable() &&
-        parentRec.isValid() &&
-        parentRec._isE2eEncrypted) {
+    if (hasEncryptedAncestor()) {
         _parallelism = WaitForFinished;
     }
 }
@@ -142,14 +130,6 @@ void PropagateRemoteMkdir::setDeleteExisting(bool enabled)
 
 void PropagateRemoteMkdir::slotMkdir()
 {
-    const auto rootPath = [=]() {
-        const auto result = propagator()->remotePath();
-        if (result.startsWith('/')) {
-            return result.mid(1);
-        } else {
-            return result;
-        }
-    }();
     const auto path = _item->_file;
     const auto slashPosition = path.lastIndexOf('/');
     const auto parentPath = slashPosition >= 0 ? path.left(slashPosition) : QString();
@@ -161,21 +141,7 @@ void PropagateRemoteMkdir::slotMkdir()
         return;
     }
 
-    const auto hasEncryptedAncestor = [=] {
-        auto pathComponents = parentPath.split('/');
-        while (!pathComponents.isEmpty()) {
-            SyncJournalFileRecord rec;
-            propagator()->_journal->getFileRecord(pathComponents.join('/'), &rec);
-            if (rec.isValid() && rec._isE2eEncrypted) {
-                return true;
-            }
-            pathComponents.removeLast();
-        }
-        return false;
-    }();
-
-    const auto account = propagator()->account();
-    if (!account->capabilities().clientSideEncryptionAvailable() || !hasEncryptedAncestor) {
+    if (!hasEncryptedAncestor()) {
         slotStartMkcolJob();
         return;
     }
index a3dcb6571949aa5cd061ffbf443895aa2ad03dc4..7a6653ea416e234a4cb53dc2f7814ad510462e76 100644 (file)
@@ -206,11 +206,7 @@ PropagateUploadFileCommon::PropagateUploadFileCommon(OwncloudPropagator *propaga
         return;
     }
 
-    const auto account = propagator->account();
-
-    if (account->capabilities().clientSideEncryptionAvailable() &&
-        parentRec.isValid() &&
-        parentRec._isE2eEncrypted) {
+    if (hasEncryptedAncestor()) {
         _parallelism = WaitForFinished;
     }
 }