do not use bulk upload for e2ee files
authorMatthieu Gallien <matthieu.gallien@nextcloud.com>
Thu, 8 Dec 2022 14:57:04 +0000 (15:57 +0100)
committerMatthieu Gallien <matthieu_gallien@yahoo.fr>
Fri, 9 Dec 2022 07:57:31 +0000 (08:57 +0100)
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
src/libsync/owncloudpropagator.cpp

index e221ac3275dedfa62b3a8328f1d62e8d0fefe8a0..380b8e2f4f3accef6f2a16c46f152e4f5df0207c 100644 (file)
@@ -943,7 +943,29 @@ Result<Vfs::ConvertToPlaceholderResult, QString> OwncloudPropagator::staticUpdat
 
 bool OwncloudPropagator::isDelayedUploadItem(const SyncFileItemPtr &item) const
 {
-    return account()->capabilities().bulkUpload() && !_scheduleDelayedTasks && !item->_isEncrypted && _syncOptions._minChunkSize > item->_size && !isInBulkUploadBlackList(item->_file);
+    const auto checkFileShouldBeEncrypted = [this] (const SyncFileItemPtr &item) -> bool {
+        const auto path = item->_file;
+        const auto slashPosition = path.lastIndexOf('/');
+        const auto parentPath = slashPosition >= 0 ? path.left(slashPosition) : QString();
+
+        SyncJournalFileRecord parentRec;
+        bool ok = _journal->getFileRecord(parentPath, &parentRec);
+        if (!ok) {
+            return false;
+        }
+
+        const auto accountPtr = account();
+
+        if (!accountPtr->capabilities().clientSideEncryptionAvailable() ||
+            !parentRec.isValid() ||
+            !parentRec._isE2eEncrypted) {
+            return false;
+        }
+
+        return true;
+    };
+
+    return account()->capabilities().bulkUpload() && !_scheduleDelayedTasks && !item->_isEncrypted && _syncOptions._minChunkSize > item->_size && !isInBulkUploadBlackList(item->_file) && !checkFileShouldBeEncrypted(item);
 }
 
 void OwncloudPropagator::setScheduleDelayedTasks(bool active)