Discovery: Ensure selective sync lists are sorted #6958
authorChristian Kamm <mail@ckamm.de>
Thu, 10 Jan 2019 09:19:27 +0000 (10:19 +0100)
committerKevin Ottens <kevin.ottens@nextcloud.com>
Tue, 15 Dec 2020 09:58:34 +0000 (10:58 +0100)
src/libsync/discoveryphase.cpp
src/libsync/discoveryphase.h
src/libsync/syncengine.cpp

index e97af0e7e079862aa2a83a8d2bd95232297c6c4c..157a8d8444937dbd3b36527cf782f3a7c392414c 100644 (file)
@@ -186,6 +186,18 @@ void DiscoveryPhase::startJob(ProcessDirectoryJob *job)
     job->start();
 }
 
+void DiscoveryPhase::setSelectiveSyncBlackList(const QStringList &list)
+{
+    _selectiveSyncBlackList = list;
+    std::sort(_selectiveSyncBlackList.begin(), _selectiveSyncBlackList.end());
+}
+
+void DiscoveryPhase::setSelectiveSyncWhiteList(const QStringList &list)
+{
+    _selectiveSyncWhiteList = list;
+    std::sort(_selectiveSyncWhiteList.begin(), _selectiveSyncWhiteList.end());
+}
+
 void DiscoveryPhase::scheduleMoreJobs()
 {
     auto limit = qMax(1, _syncOptions._parallelNetworkJobs);
index 738c2d2122b38eb58925fa5163dc10f0ac13c350..31dc9abeac39b002363782544b81f5b6db87a152 100644 (file)
@@ -135,6 +135,10 @@ class DiscoveryPhase : public QObject
     QMap<QString, QString> _renamedItems; // map source -> destinations
     int _currentlyActiveJobs = 0;
 
+    // both must contain a sorted list
+    QStringList _selectiveSyncBlackList;
+    QStringList _selectiveSyncWhiteList;
+
     void scheduleMoreJobs();
 
     bool isInSelectiveSyncBlackList(const QString &path) const;
@@ -166,8 +170,6 @@ public:
     SyncJournalDb *_statedb;
     AccountPtr _account;
     SyncOptions _syncOptions;
-    QStringList _selectiveSyncBlackList;
-    QStringList _selectiveSyncWhiteList;
     ExcludedFiles *_excludes;
     QRegExp _invalidFilenameRx; // FIXME: maybe move in ExcludedFiles
     QStringList _serverBlacklistedFiles; // The blacklist from the capabilities
@@ -176,6 +178,9 @@ public:
 
     void startJob(ProcessDirectoryJob *);
 
+    void setSelectiveSyncBlackList(const QStringList &list);
+    void setSelectiveSyncWhiteList(const QStringList &list);
+
     // output
     QByteArray _dataFingerprint;
 
index ba1d0d6bae0e2901c50ba8ccc4e376139798b61b..b02e951c9e2f0c728fc12c3edffcec989806cb99 100644 (file)
@@ -586,8 +586,8 @@ void SyncEngine::slotStartDiscovery()
         _discoveryPhase->_remoteFolder+='/';
     _discoveryPhase->_syncOptions = _syncOptions;
     _discoveryPhase->_shouldDiscoverLocaly = [this](const QString &s) { return shouldDiscoverLocally(s); };
-    _discoveryPhase->_selectiveSyncBlackList = selectiveSyncBlackList;
-    _discoveryPhase->_selectiveSyncWhiteList = _journal->getSelectiveSyncList(SyncJournalDb::SelectiveSyncWhiteList, &ok);
+    _discoveryPhase->setSelectiveSyncBlackList(selectiveSyncBlackList);
+    _discoveryPhase->setSelectiveSyncWhiteList(_journal->getSelectiveSyncList(SyncJournalDb::SelectiveSyncWhiteList, &ok));
     if (!ok) {
         qCWarning(lcEngine) << "Unable to read selective sync list, aborting.";
         syncError(tr("Unable to read from the sync journal."));