Categorise file name clash sync file issues as separate FileNameClash enum treated...
authorClaudio Cambra <claudio.cambra@gmail.com>
Wed, 21 Sep 2022 17:13:54 +0000 (19:13 +0200)
committerClaudio Cambra <claudio.cambra@gmail.com>
Mon, 26 Sep 2022 10:10:38 +0000 (12:10 +0200)
Signed-off-by: Claudio Cambra <claudio.cambra@gmail.com>
src/gui/tray/activitylistmodel.cpp
src/libsync/bulkpropagatorjob.cpp
src/libsync/owncloudpropagator.cpp
src/libsync/progressdispatcher.cpp
src/libsync/propagatedownload.cpp
src/libsync/syncfileitem.h
src/libsync/syncresult.cpp

index b94d5bfd80b6f3a614d69be98a7cab879d436f0d..a840143a6833a946e84360d2f9224f3f81e33201 100644 (file)
@@ -232,7 +232,8 @@ QVariant ActivityListModel::data(const QModelIndex &index, int role) const
                 || a._status == SyncFileItem::Conflict
                 || a._status == SyncFileItem::Restoration
                 || a._status == SyncFileItem::FileLocked
-                || a._status == SyncFileItem::FileNameInvalid) {
+                || a._status == SyncFileItem::FileNameInvalid
+                || a._status == SyncFileItem::FileNameClash) {
                 colorIconPath.append("state-warning.svg");
                 return colorIconPath;
             } else if (a._status == SyncFileItem::FileIgnored) {
index 6d4074168b5c7622781b694b7a23b4baeeab2780..228180711d67a15a3ef4b5a95236b4bfb311fd4b 100644 (file)
@@ -711,6 +711,7 @@ void BulkPropagatorJob::handleJobDoneErrors(SyncFileItemPtr item,
     case SyncFileItem::FileIgnored:
     case SyncFileItem::FileLocked:
     case SyncFileItem::FileNameInvalid:
+    case SyncFileItem::FileNameClash:
     case SyncFileItem::NoStatus:
     case SyncFileItem::NormalError:
     case SyncFileItem::Restoration:
index aba3f437f300b412db3c5fb5e6eb902cffc0935d..428d82d908e4667c1e8cd6890eaaf78745f465c8 100644 (file)
@@ -273,6 +273,7 @@ void PropagateItemJob::done(SyncFileItem::Status statusArg, const QString &error
     case SyncFileItem::BlacklistedError:
     case SyncFileItem::FileLocked:
     case SyncFileItem::FileNameInvalid:
+    case SyncFileItem::FileNameClash:
         // nothing
         break;
     }
index 45c5beac4f01e81063832d121367a2f2f4d7365b..8daf74b46f0a670532f267d58794b2fb26995d69 100644 (file)
@@ -97,7 +97,8 @@ bool Progress::isWarningKind(SyncFileItem::Status kind)
         || kind == SyncFileItem::FatalError || kind == SyncFileItem::FileIgnored
         || kind == SyncFileItem::Conflict || kind == SyncFileItem::Restoration
         || kind == SyncFileItem::DetailError || kind == SyncFileItem::BlacklistedError
-        || kind == SyncFileItem::FileLocked;
+        || kind == SyncFileItem::FileLocked || kind == SyncFileItem::FileNameInvalid
+        || kind == SyncFileItem::FileNameClash;
 }
 
 bool Progress::isIgnoredKind(SyncFileItem::Status kind)
index 088ce72895625a7a5110c985aea7150ead03e18f..0bb179b8168cdf27cdd3f536a50603e73b3defdc 100644 (file)
@@ -528,14 +528,14 @@ void PropagateDownloadFile::startAfterIsEncryptedIsChecked()
     }
     if (_item->_type == ItemTypeVirtualFile) {
         if (propagator()->localFileNameClash(_item->_file)) {
-            done(SyncFileItem::NormalError, tr("File %1 cannot be downloaded because of a local file name clash!").arg(QDir::toNativeSeparators(_item->_file)));
+            done(SyncFileItem::FileNameClash, tr("File %1 cannot be downloaded because of a local file name clash!").arg(QDir::toNativeSeparators(_item->_file)));
             return;
         }
 
         qCDebug(lcPropagateDownload) << "creating virtual file" << _item->_file;
         // do a klaas' case clash check.
         if (propagator()->localFileNameClash(_item->_file)) {
-            done(SyncFileItem::NormalError, tr("File %1 can not be downloaded because of a local file name clash!").arg(QDir::toNativeSeparators(_item->_file)));
+            done(SyncFileItem::FileNameClash, tr("File %1 can not be downloaded because of a local file name clash!").arg(QDir::toNativeSeparators(_item->_file)));
             return;
         }
         auto r = vfs->createPlaceholder(*_item);
@@ -633,7 +633,7 @@ void PropagateDownloadFile::startDownload()
 
     // do a klaas' case clash check.
     if (propagator()->localFileNameClash(_item->_file)) {
-        done(SyncFileItem::NormalError, tr("File %1 cannot be downloaded because of a local file name clash!").arg(QDir::toNativeSeparators(_item->_file)));
+        done(SyncFileItem::FileNameClash, tr("File %1 cannot be downloaded because of a local file name clash!").arg(QDir::toNativeSeparators(_item->_file)));
         return;
     }
 
@@ -1126,7 +1126,7 @@ void PropagateDownloadFile::downloadFinished()
     // In case of file name clash, report an error
     // This can happen if another parallel download saved a clashing file.
     if (propagator()->localFileNameClash(_item->_file)) {
-        done(SyncFileItem::NormalError, tr("File %1 cannot be saved because of a local file name clash!").arg(QDir::toNativeSeparators(_item->_file)));
+        done(SyncFileItem::FileNameClash, tr("File %1 cannot be saved because of a local file name clash!").arg(QDir::toNativeSeparators(_item->_file)));
         return;
     }
 
index 9dc6fa4f522d06991c57acc89ae39413d4f6efe6..9668e3ff6e4cf952325dc9825f7dcd460eff1f20 100644 (file)
@@ -71,6 +71,12 @@ public:
          */
         FileNameInvalid,
 
+        /**
+         * There is a file name clash (e.g. attempting to download test.txt when TEST.TXT already exists
+         * on a platform where the filesystem is case-insensitive
+         */
+        FileNameClash,
+
         /** For errors that should only appear in the error view.
          *
          * Some errors also produce a summary message. Usually displaying that message is
index e7aa3ab548a9eb65fcd518d37806edef54f82377..3dede8661363170543a7351f5b18fb13ecd087d3 100644 (file)
@@ -141,7 +141,7 @@ void SyncResult::processCompletedItem(const SyncFileItemPtr &item)
         if (!_firstItemError) {
             _firstItemError = item;
         }
-    } else if (item->_status == SyncFileItem::Conflict || item->_status == SyncFileItem::FileNameInvalid) {
+    } else if (item->_status == SyncFileItem::Conflict || item->_status == SyncFileItem::FileNameInvalid || item->_status == SyncFileItem::FileNameClash) {
         if (item->_instruction == CSYNC_INSTRUCTION_CONFLICT) {
             _numNewConflictItems++;
             if (!_firstNewConflictItem) {