From 8551a14c48bbfac15785a4cc00ab19aa9fc46f3e Mon Sep 17 00:00:00 2001 From: Matthieu Gallien Date: Thu, 4 Aug 2022 13:45:28 +0200 Subject: [PATCH] ensure SyncEngine use an initialized instance of SyncOptions will prevent nextcloudcmd command line client from ignoring the settings handled by SyncOptions Signed-off-by: Matthieu Gallien --- src/cmd/cmd.cpp | 2 +- src/gui/folder.cpp | 8 ++++---- src/gui/folder.h | 2 +- src/gui/socketapi/socketuploadjob.cpp | 6 +++++- src/libsync/syncengine.cpp | 8 ++++++-- src/libsync/syncengine.h | 8 ++++++-- test/syncenginetestutils.cpp | 2 +- 7 files changed, 24 insertions(+), 12 deletions(-) diff --git a/src/cmd/cmd.cpp b/src/cmd/cmd.cpp index 098f5f412..1dd894a67 100644 --- a/src/cmd/cmd.cpp +++ b/src/cmd/cmd.cpp @@ -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, diff --git a/src/gui/folder.cpp b/src/gui/folder.cpp index 757ec9736..e76383150 100644 --- a/src/gui/folder.cpp +++ b/src/gui/folder.cpp @@ -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() diff --git a/src/gui/folder.h b/src/gui/folder.h index e38cc091c..02134d907 100644 --- a/src/gui/folder.h +++ b/src/gui/folder.h @@ -430,7 +430,7 @@ private: void checkLocalPath(); - void setSyncOptions(); + SyncOptions initializeSyncOptions() const; enum LogStatus { LogStatusRemove, diff --git a/src/gui/socketapi/socketuploadjob.cpp b/src/gui/socketapi/socketuploadjob.cpp index 467a46973..b8ee787a1 100644 --- a/src/gui/socketapi/socketuploadjob.cpp +++ b/src/gui/socketapi/socketuploadjob.cpp @@ -51,7 +51,11 @@ SocketUploadJob::SocketUploadJob(const QSharedPointer &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) { diff --git a/src/libsync/syncengine.cpp b/src/libsync/syncengine.cpp index ac19cd40c..5ac455321 100644 --- a/src/libsync/syncengine.cpp +++ b/src/libsync/syncengine.cpp @@ -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"); diff --git a/src/libsync/syncengine.h b/src/libsync/syncengine.h index cbdb65345..532eee39b 100644 --- a/src/libsync/syncengine.h +++ b/src/libsync/syncengine.h @@ -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(); diff --git a/test/syncenginetestutils.cpp b/test/syncenginetestutils.cpp index f01772cb2..f3af23d43 100644 --- a/test/syncenginetestutils.cpp +++ b/test/syncenginetestutils.cpp @@ -1050,7 +1050,7 @@ FakeFolder::FakeFolder(const FileInfo &fileTemplate, const OCC::OptionalsetServerVersion(QStringLiteral("10.0.0")); _journalDb = std::make_unique(localPath() + QStringLiteral(".sync_test.db")); - _syncEngine = std::make_unique(_account, localPath(), remotePath, _journalDb.get()); + _syncEngine = std::make_unique(_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("]*.~*"));