Merge pull request #4816 from nextcloud/bugfix/ensureSyncOptionsAreInitialized

ensure SyncEngine use an initialized instance of SyncOptions
This commit is contained in:
allexzander 2022-08-08 15:02:53 +03:00 committed by GitHub
commit dab1a19656
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
7 changed files with 24 additions and 12 deletions

View file

@ -504,7 +504,7 @@ restart_sync:
SyncOptions opt; SyncOptions opt;
opt.fillFromEnvironmentVariables(); opt.fillFromEnvironmentVariables();
opt.verifyChunkSizes(); opt.verifyChunkSizes();
SyncEngine engine(account, options.source_dir, folder, &db); SyncEngine engine(account, options.source_dir, opt, folder, &db);
engine.setIgnoreHiddenFiles(options.ignoreHiddenFiles); engine.setIgnoreHiddenFiles(options.ignoreHiddenFiles);
engine.setNetworkLimits(options.uplimit, options.downlimit); engine.setNetworkLimits(options.uplimit, options.downlimit);
QObject::connect(&engine, &SyncEngine::finished, QObject::connect(&engine, &SyncEngine::finished,

View file

@ -79,7 +79,7 @@ Folder::Folder(const FolderDefinition &definition,
_syncResult.setFolder(_definition.alias); _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 // pass the setting if hidden files are to be ignored, will be read in csync_update
_engine->setIgnoreHiddenFiles(_definition.ignoreHiddenFiles); _engine->setIgnoreHiddenFiles(_definition.ignoreHiddenFiles);
@ -846,7 +846,7 @@ void Folder::startSync(const QStringList &pathList)
} }
setDirtyNetworkLimits(); setDirtyNetworkLimits();
setSyncOptions(); syncEngine().setSyncOptions(initializeSyncOptions());
static std::chrono::milliseconds fullLocalDiscoveryInterval = []() { static std::chrono::milliseconds fullLocalDiscoveryInterval = []() {
auto interval = ConfigFile().fullLocalDiscoveryInterval(); auto interval = ConfigFile().fullLocalDiscoveryInterval();
@ -897,7 +897,7 @@ void Folder::correctPlaceholderFiles()
} }
} }
void Folder::setSyncOptions() SyncOptions Folder::initializeSyncOptions() const
{ {
SyncOptions opt; SyncOptions opt;
ConfigFile cfgFile; ConfigFile cfgFile;
@ -917,7 +917,7 @@ void Folder::setSyncOptions()
opt.fillFromEnvironmentVariables(); opt.fillFromEnvironmentVariables();
opt.verifyChunkSizes(); opt.verifyChunkSizes();
_engine->setSyncOptions(opt); return opt;
} }
void Folder::setDirtyNetworkLimits() void Folder::setDirtyNetworkLimits()

View file

@ -430,7 +430,7 @@ private:
void checkLocalPath(); void checkLocalPath();
void setSyncOptions(); SyncOptions initializeSyncOptions() const;
enum LogStatus { enum LogStatus {
LogStatusRemove, LogStatusRemove,

View file

@ -51,7 +51,11 @@ SocketUploadJob::SocketUploadJob(const QSharedPointer<SocketApiJobV2> &job)
} }
_db = new SyncJournalDb(_tmp.fileName(), this); _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); _engine->setParent(_db);
connect(_engine, &OCC::SyncEngine::itemCompleted, this, [this](const OCC::SyncFileItemPtr item) { connect(_engine, &OCC::SyncEngine::itemCompleted, this, [this](const OCC::SyncFileItemPtr item) {

View file

@ -81,8 +81,11 @@ static const std::chrono::milliseconds s_touchedFilesMaxAgeMs(3 * 1000);
// doc in header // doc in header
std::chrono::milliseconds SyncEngine::minimumFileAgeForUpload(2000); std::chrono::milliseconds SyncEngine::minimumFileAgeForUpload(2000);
SyncEngine::SyncEngine(AccountPtr account, const QString &localPath, SyncEngine::SyncEngine(AccountPtr account,
const QString &remotePath, OCC::SyncJournalDb *journal) const QString &localPath,
const SyncOptions &syncOptions,
const QString &remotePath,
OCC::SyncJournalDb *journal)
: _account(account) : _account(account)
, _needsUpdate(false) , _needsUpdate(false)
, _syncRunning(false) , _syncRunning(false)
@ -94,6 +97,7 @@ SyncEngine::SyncEngine(AccountPtr account, const QString &localPath,
, _hasRemoveFile(false) , _hasRemoveFile(false)
, _uploadLimit(0) , _uploadLimit(0)
, _downloadLimit(0) , _downloadLimit(0)
, _syncOptions(syncOptions)
, _anotherSyncNeeded(NoFollowUpSync) , _anotherSyncNeeded(NoFollowUpSync)
{ {
qRegisterMetaType<SyncFileItem>("SyncFileItem"); qRegisterMetaType<SyncFileItem>("SyncFileItem");

View file

@ -57,8 +57,12 @@ class OWNCLOUDSYNC_EXPORT SyncEngine : public QObject
{ {
Q_OBJECT Q_OBJECT
public: public:
SyncEngine(AccountPtr account, const QString &localPath, SyncEngine(AccountPtr account,
const QString &remotePath, SyncJournalDb *journal); const QString &localPath,
const SyncOptions &syncOptions,
const QString &remotePath,
SyncJournalDb *journal);
~SyncEngine() override; ~SyncEngine() override;
Q_INVOKABLE void startSync(); Q_INVOKABLE void startSync();

View file

@ -1050,7 +1050,7 @@ FakeFolder::FakeFolder(const FileInfo &fileTemplate, const OCC::Optional<FileInf
_account->setServerVersion(QStringLiteral("10.0.0")); _account->setServerVersion(QStringLiteral("10.0.0"));
_journalDb = std::make_unique<OCC::SyncJournalDb>(localPath() + QStringLiteral(".sync_test.db")); _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) // Ignore temporary files from the download. (This is in the default exclude list, but we don't load it)
_syncEngine->excludedFiles().addManualExclude(QStringLiteral("]*.~*")); _syncEngine->excludedFiles().addManualExclude(QStringLiteral("]*.~*"));