From: alex-z Date: Sun, 21 Apr 2024 18:06:28 +0000 (+0200) Subject: Bugfix. Folder invalid char conflict. Do not update parent folder record if it conta... X-Git-Tag: archive/raspbian/3.16.7-1_deb13u1+rpi1~1^2~12^2~7^2~43^2~4 X-Git-Url: https://dgit.raspbian.org/?a=commitdiff_plain;h=6f93fb552bcf42a4ea969cd41f362e0261315ebc;p=nextcloud-desktop.git Bugfix. Folder invalid char conflict. Do not update parent folder record if it contains conflicted subfolders. Signed-off-by: alex-z --- diff --git a/src/libsync/discovery.cpp b/src/libsync/discovery.cpp index ef0644ca1..6f99d0d38 100644 --- a/src/libsync/discovery.cpp +++ b/src/libsync/discovery.cpp @@ -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; diff --git a/src/libsync/owncloudpropagator.cpp b/src/libsync/owncloudpropagator.cpp index 7016c8d18..0a65913f1 100644 --- a/src/libsync/owncloudpropagator.cpp +++ b/src/libsync/owncloudpropagator.cpp @@ -1291,11 +1291,15 @@ void PropagatorCompositeJob::slotSubJobFinished(SyncFileItem::Status status) auto *subJob = dynamic_cast(sender()); ASSERT(subJob); - if (!_isAnyCaseClashSubFolder) { + if (!_isAnyChildInConflict) { if (const auto propagateDirectoryjob = qobject_cast(subJob)) { - _isAnyCaseClashSubFolder = propagateDirectoryjob->_item && propagateDirectoryjob->_item->_isCaseClashFolder; + _isAnyChildInConflict = propagateDirectoryjob->_item && propagateDirectoryjob->_item->_status == SyncFileItem::FileNameClash; + } else if (const auto propagateIgnoreJob = qobject_cast(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; diff --git a/src/libsync/owncloudpropagator.h b/src/libsync/owncloudpropagator.h index 5c5efa5cf..dc0de8c4c 100644 --- a/src/libsync/owncloudpropagator.h +++ b/src/libsync/owncloudpropagator.h @@ -246,7 +246,7 @@ public: QVector _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) diff --git a/src/libsync/syncfileitem.h b/src/libsync/syncfileitem.h index de01c1c4d..74cfe70bb 100644 --- a/src/libsync/syncfileitem.h +++ b/src/libsync/syncfileitem.h @@ -337,6 +337,8 @@ public: bool _isEncryptedMetadataNeedUpdate = false; bool _isCaseClashFolder = false; + + bool _isAnyInvalidCharChild = false; }; inline bool operator<(const SyncFileItemPtr &item1, const SyncFileItemPtr &item2)