Bugfix. Folder invalid char conflict. Do not update parent folder record if it conta...
authoralex-z <blackslayer4@gmail.com>
Sun, 21 Apr 2024 18:06:28 +0000 (20:06 +0200)
committerbackportbot[bot] <backportbot[bot]@users.noreply.github.com>
Tue, 23 Apr 2024 10:18:39 +0000 (10:18 +0000)
Signed-off-by: alex-z <blackslayer4@gmail.com>
src/libsync/discovery.cpp
src/libsync/owncloudpropagator.cpp
src/libsync/owncloudpropagator.h
src/libsync/syncfileitem.h

index ef0644ca1426072630598177e85bfeae348277d3..6f99d0d385a88b5ac1e0d0db53251f7204024b35 100644 (file)
@@ -404,6 +404,11 @@ bool ProcessDirectoryJob::handleExcluded(const QString &path, const Entries &ent
         }
     }
 
+    if (item->_status == SyncFileItem::FileNameInvalid && !item->isDirectory()) {
+        _dirItem->_isAnyInvalidCharChild = true;
+    }
+
+
     _childIgnored = true;
     emit _discoveryData->itemDiscovered(item);
     return true;
index 7016c8d18521f508b50f43788ee3f85adf0d907a..0a65913f17bb269533a6491a7ff86295e5c6f90e 100644 (file)
@@ -1291,11 +1291,15 @@ void PropagatorCompositeJob::slotSubJobFinished(SyncFileItem::Status status)
     auto *subJob = dynamic_cast<PropagatorJob *>(sender());
     ASSERT(subJob);
 
-    if (!_isAnyCaseClashSubFolder) {
+    if (!_isAnyChildInConflict) {
         if (const auto propagateDirectoryjob = qobject_cast<PropagateDirectory *>(subJob)) {
-            _isAnyCaseClashSubFolder = propagateDirectoryjob->_item && propagateDirectoryjob->_item->_isCaseClashFolder;
+            _isAnyChildInConflict = propagateDirectoryjob->_item && propagateDirectoryjob->_item->_status == SyncFileItem::FileNameClash;
+        } else if (const auto propagateIgnoreJob = qobject_cast<PropagateIgnoreJob *>(subJob)) {
+            _isAnyChildInConflict =
+                propagateIgnoreJob->_item && propagateIgnoreJob->_item->_status == SyncFileItem::FileNameInvalid;
         }
     }
+
     // Delete the job and remove it from our list of jobs.
     subJob->deleteLater();
     int i = _runningJobs.indexOf(subJob);
@@ -1501,7 +1505,7 @@ void PropagateDirectory::slotSubJobsFinished(SyncFileItem::Status status)
                 }
             }
 #endif
-            if (!_subJobs._isAnyCaseClashSubFolder) {
+            if (!_subJobs._isAnyChildInConflict) {
                 const auto result = propagator()->updateMetadata(*_item);
                 if (!result) {
                     status = _item->_status = SyncFileItem::FatalError;
index 5c5efa5cfbc4a8e379d8d4152cdbe2cae1e82b23..dc0de8c4c389b9c1dae909c32831afff9e74e6e6 100644 (file)
@@ -246,7 +246,7 @@ public:
     QVector<PropagatorJob *> _runningJobs;
     SyncFileItem::Status _hasError = SyncFileItem::NoStatus; // NoStatus,  or NormalError / SoftError if there was an error
     quint64 _abortsCount = 0;
-    bool _isAnyCaseClashSubFolder = false;
+    bool _isAnyChildInConflict = false;
 
     explicit PropagatorCompositeJob(OwncloudPropagator *propagator)
         : PropagatorJob(propagator)
index de01c1c4d9b4459876bdf3ee471d347d5271e5d5..74cfe70bbc0516be09c2a2b4f03177f8f26f76c0 100644 (file)
@@ -337,6 +337,8 @@ public:
     bool _isEncryptedMetadataNeedUpdate = false;
 
     bool _isCaseClashFolder = false;
+
+    bool _isAnyInvalidCharChild = false;
 };
 
 inline bool operator<(const SyncFileItemPtr &item1, const SyncFileItemPtr &item2)