Silence sync termination errors when running EditLocallyJob.
authoralex-z <blackslayer4@gmail.com>
Fri, 9 Dec 2022 15:25:29 +0000 (16:25 +0100)
committeralex-z <blackslayer4@gmail.com>
Mon, 12 Dec 2022 16:39:48 +0000 (17:39 +0100)
Signed-off-by: alex-z <blackslayer4@gmail.com>
src/gui/editlocallyjob.cpp
src/gui/folder.cpp
src/gui/folder.h

index 69eccd62fcc0270cd8d69f8966e555e5ebd4004d..56de2cb2a38a897e06236b1c511f2cc3ce8a1475 100644 (file)
@@ -450,6 +450,7 @@ void EditLocallyJob::startEditLocally()
             _syncTerminatedConnection = {};
             startSyncBeforeOpening();
         });
+        _folderForFile->setSilenceErrorsUntilNextSync(true);
         _folderForFile->slotTerminateSync();
 
         return;
index c19212290c44d2e76421595db68035760f3470cb..3dc9b98cd89b62c1d4c2b4d56ce7a75d4d8f841a 100644 (file)
@@ -308,6 +308,10 @@ void Folder::setSyncPaused(bool paused)
 
 void Folder::setSyncState(SyncResult::Status state)
 {
+    if (_silenceErrorsUntilNextSync && state == SyncResult::Error) {
+        _syncResult.setStatus(SyncResult::Status::Success);
+        return;
+    }
     _syncResult.setStatus(state);
 }
 
@@ -832,6 +836,7 @@ bool Folder::reloadExcludes()
 void Folder::startSync(const QStringList &pathList)
 {
     Q_UNUSED(pathList);
+    setSilenceErrorsUntilNextSync(false);
     const auto singleItemDiscoveryOptions = _engine->singleItemDiscoveryOptions();
     Q_ASSERT(!singleItemDiscoveryOptions.discoveryDirItem || singleItemDiscoveryOptions.discoveryDirItem->isDirectory());
     if (singleItemDiscoveryOptions.discoveryDirItem && !singleItemDiscoveryOptions.discoveryDirItem->isDirectory()) {
@@ -962,8 +967,10 @@ void Folder::setDirtyNetworkLimits()
 
 void Folder::slotSyncError(const QString &message, ErrorCategory category)
 {
-    _syncResult.appendErrorString(message);
-    emit ProgressDispatcher::instance()->syncError(alias(), message, category);
+    if (!_silenceErrorsUntilNextSync) {
+        _syncResult.appendErrorString(message);
+        emit ProgressDispatcher::instance()->syncError(alias(), message, category);
+    }
 }
 
 void Folder::slotAddErrorToGui(SyncFileItem::Status status, const QString &errorMessage, const QString &subject)
@@ -998,6 +1005,9 @@ void Folder::slotSyncFinished(bool success)
 
     if (syncError) {
         _syncResult.setStatus(SyncResult::Error);
+        if (_silenceErrorsUntilNextSync) {
+            _syncResult.setStatus(SyncResult::Status::Success);
+        }
     } else if (_syncResult.foundFilesNotSynced()) {
         _syncResult.setStatus(SyncResult::Problem);
     } else if (_definition.paused) {
@@ -1151,6 +1161,11 @@ void Folder::slotNextSyncFullLocalDiscovery()
     _timeSinceLastFullLocalDiscovery.invalidate();
 }
 
+void Folder::setSilenceErrorsUntilNextSync(bool silenceErrors)
+{
+    _silenceErrorsUntilNextSync = silenceErrors;
+}
+
 void Folder::schedulePathForLocalDiscovery(const QString &relativePath)
 {
     _localDiscoveryTracker->addTouchedPath(relativePath.toUtf8());
index e5541460a1aaad5a79e9790ef78416a1c2dfdae2..8b0e5a8f5462db9c9daa190557dc52f9cce20daf 100644 (file)
@@ -368,6 +368,8 @@ public slots:
     /** Ensures that the next sync performs a full local discovery. */
     void slotNextSyncFullLocalDiscovery();
 
+    void setSilenceErrorsUntilNextSync(bool silenceErrors);
+
 private slots:
     void slotSyncStarted();
     void slotSyncFinished(bool);
@@ -506,6 +508,8 @@ private:
      */
     bool _hasSwitchedToVfs = false;
 
+    bool _silenceErrorsUntilNextSync = false;
+
     /**
      * Watches this folder's local directory for changes.
      *