Start sync immediately after modifying the selective sync settings.
authoralex-z <blackslayer4@gmail.com>
Tue, 6 Sep 2022 15:03:31 +0000 (18:03 +0300)
committerallexzander <blackslayer4@gmail.com>
Wed, 7 Sep 2022 10:38:09 +0000 (13:38 +0300)
Signed-off-by: alex-z <blackslayer4@gmail.com>
src/gui/folderman.cpp
src/gui/folderman.h
src/gui/folderstatusmodel.cpp
src/gui/selectivesyncdialog.cpp
src/libsync/syncengine.cpp

index 2191037d011ec839938785addf744e256bfddd2e..beac2f093e498580527aae8356bbd48037e309e4 100644 (file)
@@ -643,6 +643,12 @@ void FolderMan::scheduleFolder(Folder *f)
     startScheduledSyncSoon();
 }
 
+void FolderMan::scheduleFolderForImmediateSync(Folder *f)
+{
+    _nextSyncShouldStartImmediately = true;
+    scheduleFolder(f);
+}
+
 void FolderMan::scheduleFolderNext(Folder *f)
 {
     auto alias = f->alias();
@@ -792,6 +798,12 @@ void FolderMan::startScheduledSyncSoon()
     // Time since the last sync run counts against the delay
     msDelay = qMax(1ll, msDelay - msSinceLastSync);
 
+    if (_nextSyncShouldStartImmediately) {
+        _nextSyncShouldStartImmediately = false;
+        qCInfo(lcFolderMan) << "Next sync is marked to start immediately, so setting the delay to '0'";
+        msDelay = 0;
+    }
+
     qCInfo(lcFolderMan) << "Starting the next scheduled sync in" << (msDelay / 1000) << "seconds";
     _startScheduledSyncTimer.start(msDelay);
 }
index 3677073c34cb88f4eb3e5ff1a2f239ae19c21827..689d102d15370aa4f16efbb6d770cf2857c35ebe 100644 (file)
@@ -193,6 +193,9 @@ public:
     /** Queues a folder for syncing. */
     void scheduleFolder(Folder *);
 
+    /** Queues a folder for syncing that starts immediately. */
+    void scheduleFolderForImmediateSync(Folder *);
+
     /** Puts a folder in the very front of the queue. */
     void scheduleFolderNext(Folder *);
 
@@ -357,6 +360,8 @@ private:
     /// Picks the next scheduled folder and starts the sync
     QTimer _startScheduledSyncTimer;
 
+    bool _nextSyncShouldStartImmediately = false;
+
     QScopedPointer<SocketApi> _socketApi;
     NavigationPaneHelper _navigationPaneHelper;
 
index 80080acc5dbac2a433f4bdd91a8dbd68cfb67e8b..6969fa29c3b371dc559f10782022af053ccf360f 100644 (file)
@@ -931,7 +931,7 @@ void FolderStatusModel::slotApplySelectiveSync()
                 folder->journalDb()->schedulePathForRemoteDiscovery(it);
                 folder->schedulePathForLocalDiscovery(it);
             }
-            FolderMan::instance()->scheduleFolder(folder);
+            FolderMan::instance()->scheduleFolderForImmediateSync(folder);
         }
     }
 
index 06efaf90b2cc75b99259c8393bf4a76527ab46ae..3b8a3361216281d8464f806cbf8210b1537d7df6 100644 (file)
@@ -544,7 +544,7 @@ void SelectiveSyncDialog::accept()
             _folder->schedulePathForLocalDiscovery(it);
         }
 
-        folderMan->scheduleFolder(_folder);
+        folderMan->scheduleFolderForImmediateSync(_folder);
     }
     QDialog::accept();
 }
index 5ac4553218c800cc203c9a2c70f4a0672f6b982a..8c34ea7a21eabe6cfa77444e8e0657e58dddadad 100644 (file)
@@ -1056,11 +1056,9 @@ void SyncEngine::switchToVirtualFiles(const QString &localPath, SyncJournalDb &j
 
 void SyncEngine::abort()
 {
-    if (_propagator)
-        qCInfo(lcEngine) << "Aborting sync";
-
     if (_propagator) {
         // If we're already in the propagation phase, aborting that is sufficient
+        qCInfo(lcEngine) << "Aborting sync in propagator...";
         _propagator->abort();
     } else if (_discoveryPhase) {
         // Delete the discovery and all child jobs after ensuring
@@ -1068,7 +1066,8 @@ void SyncEngine::abort()
         disconnect(_discoveryPhase.data(), nullptr, this, nullptr);
         _discoveryPhase.take()->deleteLater();
 
-        Q_EMIT syncError(tr("Synchronization will resume shortly."));
+        Q_EMIT addErrorToGui(SyncFileItem::SoftError, tr("Synchronization has been aborted."), tr("It will resume shortly."));
+        qCInfo(lcEngine) << "Aborting sync in discovery...";
         finalize(false);
     }
 }