ensure SyncEngine use an initialized instance of SyncOptions
authorMatthieu Gallien <matthieu.gallien@nextcloud.com>
Thu, 4 Aug 2022 11:45:28 +0000 (13:45 +0200)
committerallexzander <allexzander@users.noreply.github.com>
Mon, 8 Aug 2022 09:36:37 +0000 (12:36 +0300)
will prevent nextcloudcmd command line client from ignoring the settings
handled by SyncOptions

Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
src/cmd/cmd.cpp
src/gui/folder.cpp
src/gui/folder.h
src/gui/socketapi/socketuploadjob.cpp
src/libsync/syncengine.cpp
src/libsync/syncengine.h
test/syncenginetestutils.cpp

index 098f5f4124bb2a186c3ccd0aac71dae102d82325..1dd894a67ec09fa01ed34868815acf2b719e317d 100644 (file)
@@ -504,7 +504,7 @@ restart_sync:
     SyncOptions opt;
     opt.fillFromEnvironmentVariables();
     opt.verifyChunkSizes();
-    SyncEngine engine(account, options.source_dir, folder, &db);
+    SyncEngine engine(account, options.source_dir, opt, folder, &db);
     engine.setIgnoreHiddenFiles(options.ignoreHiddenFiles);
     engine.setNetworkLimits(options.uplimit, options.downlimit);
     QObject::connect(&engine, &SyncEngine::finished,
index 757ec9736aa86002236b43f84ca9f1b64fe76045..e763831507d8fbd2177cf4c4c96c34b9d2a03092 100644 (file)
@@ -79,7 +79,7 @@ Folder::Folder(const FolderDefinition &definition,
 
     _syncResult.setFolder(_definition.alias);
 
-    _engine.reset(new SyncEngine(_accountState->account(), path(), remotePath(), &_journal));
+    _engine.reset(new SyncEngine(_accountState->account(), path(), initializeSyncOptions(), remotePath(), &_journal));
     // pass the setting if hidden files are to be ignored, will be read in csync_update
     _engine->setIgnoreHiddenFiles(_definition.ignoreHiddenFiles);
 
@@ -846,7 +846,7 @@ void Folder::startSync(const QStringList &pathList)
     }
 
     setDirtyNetworkLimits();
-    setSyncOptions();
+    syncEngine().setSyncOptions(initializeSyncOptions());
 
     static std::chrono::milliseconds fullLocalDiscoveryInterval = []() {
         auto interval = ConfigFile().fullLocalDiscoveryInterval();
@@ -897,7 +897,7 @@ void Folder::correctPlaceholderFiles()
     }
 }
 
-void Folder::setSyncOptions()
+SyncOptions Folder::initializeSyncOptions() const
 {
     SyncOptions opt;
     ConfigFile cfgFile;
@@ -917,7 +917,7 @@ void Folder::setSyncOptions()
     opt.fillFromEnvironmentVariables();
     opt.verifyChunkSizes();
 
-    _engine->setSyncOptions(opt);
+    return opt;
 }
 
 void Folder::setDirtyNetworkLimits()
index e38cc091c8e63e97475ac33e2f24970b23319cd8..02134d907e92588155c780b6729ed635fa6f8fb7 100644 (file)
@@ -430,7 +430,7 @@ private:
 
     void checkLocalPath();
 
-    void setSyncOptions();
+    SyncOptions initializeSyncOptions() const;
 
     enum LogStatus {
         LogStatusRemove,
index 467a46973e307ad375f3a15cf973da38df4c3db9..b8ee787a114594a87e033d8efe320c5108bcceae 100644 (file)
@@ -51,7 +51,11 @@ SocketUploadJob::SocketUploadJob(const QSharedPointer<SocketApiJobV2> &job)
     }
 
     _db = new SyncJournalDb(_tmp.fileName(), this);
-    _engine = new SyncEngine(account->account(), _localPath.endsWith(QLatin1Char('/')) ? _localPath : _localPath + QLatin1Char('/'), _remotePath, _db);
+
+    SyncOptions opt;
+    opt.fillFromEnvironmentVariables();
+    opt.verifyChunkSizes();
+    _engine = new SyncEngine(account->account(), _localPath.endsWith(QLatin1Char('/')) ? _localPath : _localPath + QLatin1Char('/'), opt, _remotePath, _db);
     _engine->setParent(_db);
 
     connect(_engine, &OCC::SyncEngine::itemCompleted, this, [this](const OCC::SyncFileItemPtr item) {
index ac19cd40cbb559eb02b1f1d636343634c63be125..5ac4553218c800cc203c9a2c70f4a0672f6b982a 100644 (file)
@@ -81,8 +81,11 @@ static const std::chrono::milliseconds s_touchedFilesMaxAgeMs(3 * 1000);
 // doc in header
 std::chrono::milliseconds SyncEngine::minimumFileAgeForUpload(2000);
 
-SyncEngine::SyncEngine(AccountPtr account, const QString &localPath,
-    const QString &remotePath, OCC::SyncJournalDb *journal)
+SyncEngine::SyncEngine(AccountPtr account,
+                       const QString &localPath,
+                       const SyncOptions &syncOptions,
+                       const QString &remotePath,
+                       OCC::SyncJournalDb *journal)
     : _account(account)
     , _needsUpdate(false)
     , _syncRunning(false)
@@ -94,6 +97,7 @@ SyncEngine::SyncEngine(AccountPtr account, const QString &localPath,
     , _hasRemoveFile(false)
     , _uploadLimit(0)
     , _downloadLimit(0)
+    , _syncOptions(syncOptions)
     , _anotherSyncNeeded(NoFollowUpSync)
 {
     qRegisterMetaType<SyncFileItem>("SyncFileItem");
index cbdb65345e50333253674e87cf679eb9738fe247..532eee39babf60cdc13c36ee407256558e232a2f 100644 (file)
@@ -57,8 +57,12 @@ class OWNCLOUDSYNC_EXPORT SyncEngine : public QObject
 {
     Q_OBJECT
 public:
-    SyncEngine(AccountPtr account, const QString &localPath,
-        const QString &remotePath, SyncJournalDb *journal);
+    SyncEngine(AccountPtr account,
+               const QString &localPath,
+               const SyncOptions &syncOptions,
+               const QString &remotePath,
+               SyncJournalDb *journal);
+
     ~SyncEngine() override;
 
     Q_INVOKABLE void startSync();
index f01772cb2d86a4ab1b24d08aca27a4b1cff6a765..f3af23d4391dede776303b144434bea28ed6d0c0 100644 (file)
@@ -1050,7 +1050,7 @@ FakeFolder::FakeFolder(const FileInfo &fileTemplate, const OCC::Optional<FileInf
     _account->setServerVersion(QStringLiteral("10.0.0"));
 
     _journalDb = std::make_unique<OCC::SyncJournalDb>(localPath() + QStringLiteral(".sync_test.db"));
-    _syncEngine = std::make_unique<OCC::SyncEngine>(_account, localPath(), remotePath, _journalDb.get());
+    _syncEngine = std::make_unique<OCC::SyncEngine>(_account, localPath(), OCC::SyncOptions{}, remotePath, _journalDb.get());
     // Ignore temporary files from the download. (This is in the default exclude list, but we don't load it)
     _syncEngine->excludedFiles().addManualExclude(QStringLiteral("]*.~*"));