SyncEngine: Don't whipe the white list if the sync was aborted
authorOlivier Goffart <ogoffart@woboq.com>
Thu, 29 Oct 2015 15:43:30 +0000 (16:43 +0100)
committerOlivier Goffart <ogoffart@woboq.com>
Thu, 29 Oct 2015 15:47:39 +0000 (16:47 +0100)
Issue #4018

src/cmd/cmd.cpp
src/gui/folder.cpp
src/gui/folder.h
src/libsync/syncengine.cpp
src/libsync/syncengine.h

index 98a816534ee9bda25b8d60ac259fd0449c3aee36..0ac513809e00ca893069326208ee06a6c4ecc71b 100644 (file)
@@ -447,7 +447,7 @@ restart_sync:
     }
 
     SyncEngine engine(account, _csync_ctx, options.source_dir, QUrl(options.target_url).path(), folder, &db);
-    QObject::connect(&engine, SIGNAL(finished()), &app, SLOT(quit()));
+    QObject::connect(&engine, SIGNAL(finished(bool)), &app, SLOT(quit()));
     QObject::connect(&engine, SIGNAL(transmissionProgress(ProgressInfo)), &cmd, SLOT(transmissionProgressSlot()));
 
     // Have to be done async, else, an error before exec() does not terminate the event loop.
index 75d635f57d39487c065cf00c68750b053c97a6fc..72ab2ea1c1c01e4069d604d4faa205b16a9533ff 100644 (file)
@@ -887,7 +887,7 @@ void Folder::startSync(const QStringList &pathList)
               this, SLOT(slotAboutToPropagate(SyncFileItemVector&)));
 
     connect(_engine.data(), SIGNAL(started()),  SLOT(slotSyncStarted()), Qt::QueuedConnection);
-    connect(_engine.data(), SIGNAL(finished()), SLOT(slotSyncFinished()), Qt::QueuedConnection);
+    connect(_engine.data(), SIGNAL(finished(bool)), SLOT(slotSyncFinished(bool)), Qt::QueuedConnection);
     connect(_engine.data(), SIGNAL(csyncError(QString)), SLOT(slotSyncError(QString)), Qt::QueuedConnection);
     connect(_engine.data(), SIGNAL(csyncUnavailable()), SLOT(slotCsyncUnavailable()), Qt::QueuedConnection);
 
@@ -959,7 +959,7 @@ void Folder::slotCsyncUnavailable()
     _csyncUnavail = true;
 }
 
-void Folder::slotSyncFinished()
+void Folder::slotSyncFinished(bool success)
 {
     qDebug() << " - client version" << qPrintable(Theme::instance()->version())
              <<  " Qt" << qVersion()
@@ -1017,7 +1017,7 @@ void Folder::slotSyncFinished()
         qDebug() << "the last" << _consecutiveFailingSyncs << "syncs failed";
     }
 
-    if (_syncResult.status() == SyncResult::Success) {
+    if (_syncResult.status() == SyncResult::Success && success) {
         // Clear the white list as all the folders that should be on that list are sync-ed
         journalDb()->setSelectiveSyncList(SyncJournalDb::SelectiveSyncWhiteList, QStringList());
     }
index 2734603ba74e1440846352ce99577b5fbba0b5c4..edc27d3fd8a3a74b287d54acad9281b9eebf5677 100644 (file)
@@ -251,7 +251,7 @@ private slots:
     void slotSyncStarted();
     void slotSyncError(const QString& );
     void slotCsyncUnavailable();
-    void slotSyncFinished();
+    void slotSyncFinished(bool);
 
     void slotFolderDiscovered(bool local, QString folderName);
     void slotTransmissionProgress(const ProgressInfo& pi);
index 2a56173565d3baf3ec459b4a88a1542367cdb201..9bdf2cf3798ccc66b7d8b8ab6fc262d83dcf8d93 100644 (file)
@@ -572,7 +572,7 @@ void SyncEngine::handleSyncError(CSYNC *ctx, const char *state) {
     } else {
         emit csyncError(errStr);
     }
-    finalize();
+    finalize(false);
 }
 
 void SyncEngine::startSync()
@@ -598,7 +598,7 @@ void SyncEngine::startSync()
     if (!QDir(_localPath).exists()) {
         // No _tr, it should only occur in non-mirall
         emit csyncError("Unable to find local sync folder.");
-        finalize();
+        finalize(false);
         return;
     }
 
@@ -612,7 +612,7 @@ void SyncEngine::startSync()
             emit csyncError(tr("Only %1 are available, need at least %2 to start").arg(
                                 Utility::octetsToString(freeBytes),
                                 Utility::octetsToString(minFree)));
-            finalize();
+            finalize(false);
             return;
         }
     } else {
@@ -643,7 +643,7 @@ void SyncEngine::startSync()
     if( fileRecordCount == -1 ) {
         qDebug() << "No way to create a sync journal!";
         emit csyncError(tr("Unable to initialize a sync journal."));
-        finalize();
+        finalize(false);
         return;
         // database creation error!
     }
@@ -721,7 +721,7 @@ void SyncEngine::slotDiscoveryJobFinished(int discoveryResult)
     if (!_journal->isConnected()) {
         qDebug() << "Bailing out, DB failure";
         emit csyncError(tr("Cannot open the sync journal"));
-        finalize();
+        finalize(false);
         return;
     } else {
         // Commits a possibly existing (should not though) transaction and starts a new one for the propagate phase
@@ -785,7 +785,7 @@ void SyncEngine::slotDiscoveryJobFinished(int discoveryResult)
         emit aboutToRemoveAllFiles(_syncedItems.first()->_direction, &cancel);
         if (cancel) {
             qDebug() << Q_FUNC_INFO << "Abort sync";
-            finalize();
+            finalize(false);
             return;
         }
     }
@@ -833,7 +833,7 @@ void SyncEngine::slotDiscoveryJobFinished(int discoveryResult)
 void SyncEngine::slotCleanPollsJobAborted(const QString &error)
 {
     csyncError(error);
-    finalize();
+    finalize(false);
 }
 
 void SyncEngine::setNetworkLimits(int upload, int download)
@@ -888,10 +888,10 @@ void SyncEngine::slotFinished()
 
     _journal->commit("All Finished.", false);
     emit treeWalkResult(_syncedItems);
-    finalize();
+    finalize(true); // FIXME: should it be true if there was errors?
 }
 
-void SyncEngine::finalize()
+void SyncEngine::finalize(bool success)
 {
     _thread.quit();
     _thread.wait();
@@ -902,7 +902,7 @@ void SyncEngine::finalize()
     _stopWatch.stop();
 
     _syncRunning = false;
-    emit finished();
+    emit finished(success);
 
     // Delete the propagator only after emitting the signal.
     _propagator.clear();
index 5ba371b2b3b9acd3f673a74ccae4d707f8395db6..e0f40b57f9d370766acdc2f767a2577b8a195b36 100644 (file)
@@ -109,7 +109,7 @@ signals:
 
     void transmissionProgress( const ProgressInfo& progress );
 
-    void finished();
+    void finished(bool success);
     void started();
 
     void aboutToRemoveAllFiles(SyncFileItem::Direction direction, bool *cancel);
@@ -144,7 +144,7 @@ private:
     void deleteStaleErrorBlacklistEntries();
 
     // cleanup and emit the finished signal
-    void finalize();
+    void finalize(bool success);
 
     static bool _syncRunning; //true when one sync is running somewhere (for debugging)