diff --git a/libsyncthing/CMakeLists.txt b/libsyncthing/CMakeLists.txt index 6f215e6..a487757 100644 --- a/libsyncthing/CMakeLists.txt +++ b/libsyncthing/CMakeLists.txt @@ -6,7 +6,7 @@ set(META_PROJECT_TYPE library) set(META_APP_NAME "Syncthing library") set(META_APP_DESCRIPTION "Syncthing itself, built as a shared or static library") set(META_PROJECT_VARNAME_UPPER LIB_SYNCTHING) -set(META_SYNCTHING_VERSION "v1.4.2") +set(META_SYNCTHING_VERSION "v1.5.0") # add project files set(HEADER_FILES interface.h) diff --git a/libsyncthing/go/src/github.com/syncthing/syncthing b/libsyncthing/go/src/github.com/syncthing/syncthing index 59c8bec..dea7226 160000 --- a/libsyncthing/go/src/github.com/syncthing/syncthing +++ b/libsyncthing/go/src/github.com/syncthing/syncthing @@ -1 +1 @@ -Subproject commit 59c8bec1e592c23766b1f49d0e4cb005b4be70cf +Subproject commit dea7226ee5caf6e508b397571ccf04547c8f6b5b diff --git a/libsyncthing/interface.cpp b/libsyncthing/interface.cpp index 81609fd..b5963cb 100644 --- a/libsyncthing/interface.cpp +++ b/libsyncthing/interface.cpp @@ -140,8 +140,9 @@ std::int64_t runSyncthing(const RuntimeOptions &options) if (!runningState) { return -1; } - return ::libst_run_syncthing(gostr(options.configDir), gostr(options.guiAddress), gostr(options.guiApiKey), options.verbose, - options.allowNewerConfig, options.noDefaultConfig, options.ensureConfigDirectoryExists); + return ::libst_run_syncthing(gostr(options.configDir), gostr(options.dataDir), gostr(options.guiAddress), gostr(options.guiApiKey), + options.flags & RuntimeFlags::Verbose, options.flags & RuntimeFlags::AllowNewerConfig, options.flags & RuntimeFlags::NoDefaultConfig, + options.flags & RuntimeFlags::EnsureConfigDirExists, options.flags & RuntimeFlags::EnsureDataDirExists); } /*! diff --git a/libsyncthing/interface.h b/libsyncthing/interface.h index 471ee5b..d7bc243 100644 --- a/libsyncthing/interface.h +++ b/libsyncthing/interface.h @@ -6,18 +6,36 @@ #include #include #include +#include #include namespace LibSyncthing { +enum class RuntimeFlags : std::uint64_t { + None = 0, + Verbose = (1 << 0), + AllowNewerConfig = (1 << 1), + NoDefaultConfig = (1 << 2), + EnsureConfigDirExists = (1 << 3), + EnsureDataDirExists = (1 << 4), +}; + +constexpr bool operator&(RuntimeFlags lhs, RuntimeFlags rhs) +{ + return static_cast>(lhs) & static_cast>(rhs); +} + +constexpr RuntimeFlags operator|(RuntimeFlags lhs, RuntimeFlags rhs) +{ + return static_cast(static_cast>(lhs) | static_cast>(rhs)); +} + struct RuntimeOptions { std::string configDir; + std::string dataDir; std::string guiAddress; std::string guiApiKey; - bool verbose = false; - bool allowNewerConfig = true; - bool noDefaultConfig = false; - bool ensureConfigDirectoryExists = true; + RuntimeFlags flags = RuntimeFlags::AllowNewerConfig | RuntimeFlags::EnsureConfigDirExists | RuntimeFlags::EnsureDataDirExists; }; enum class LogLevel : int { diff --git a/libsyncthing/tests/interfacetests.cpp b/libsyncthing/tests/interfacetests.cpp index 3935a12..409d4f6 100644 --- a/libsyncthing/tests/interfacetests.cpp +++ b/libsyncthing/tests/interfacetests.cpp @@ -234,6 +234,7 @@ void InterfaceTests::testRunWithoutConfig() { RuntimeOptions options; options.configDir = TestApplication::instance()->workingDirectory() + "/does/not/exist"; + options.dataDir = TestApplication::instance()->workingDirectory() + "/does/also/not/exist"; filesystem::remove_all(TestApplication::instance()->workingDirectory() + "/does"); testRun(bind(static_cast(&runSyncthing), cref(options)), false); } @@ -245,6 +246,6 @@ void InterfaceTests::testRunWithoutConfig() void InterfaceTests::testRunWidthConfig() { RuntimeOptions options; - options.configDir = setupTestConfigDir(); + options.configDir = options.dataDir = setupTestConfigDir(); testRun(bind(static_cast(&runSyncthing), cref(options)), true); } diff --git a/widgets/misc/syncthinglauncher.cpp b/widgets/misc/syncthinglauncher.cpp index 180275f..00fa4fb 100644 --- a/widgets/misc/syncthinglauncher.cpp +++ b/widgets/misc/syncthinglauncher.cpp @@ -119,6 +119,7 @@ void SyncthingLauncher::launch(const Settings::Launcher &launcherSettings) if (launcherSettings.useLibSyncthing) { LibSyncthing::RuntimeOptions options; options.configDir = launcherSettings.libSyncthing.configDir.toStdString(); + options.dataDir = launcherSettings.libSyncthing.configDir.toStdString(); setLibSyncthingLogLevel(launcherSettings.libSyncthing.logLevel); launch(options); } else { diff --git a/widgets/settings/launcheroptionpage.ui b/widgets/settings/launcheroptionpage.ui index 8d5d9c1..289c400 100644 --- a/widgets/settings/launcheroptionpage.ui +++ b/widgets/settings/launcheroptionpage.ui @@ -71,14 +71,14 @@ - + Log level - + @@ -107,6 +107,16 @@ + + + + Data directory + + + + + + @@ -349,5 +359,37 @@ + + useBuiltInVersionCheckBox + toggled(bool) + dataDirLabel + setVisible(bool) + + + 273 + 68 + + + 122 + 156 + + + + + useBuiltInVersionCheckBox + toggled(bool) + dataDirPathSelection + setVisible(bool) + + + 273 + 68 + + + 171 + 156 + + + diff --git a/widgets/settings/settings.cpp b/widgets/settings/settings.cpp index 64eaa02..20e421c 100644 --- a/widgets/settings/settings.cpp +++ b/widgets/settings/settings.cpp @@ -293,6 +293,7 @@ void restore() launcher.autostartEnabled = settings.value(QStringLiteral("syncthingAutostart"), launcher.autostartEnabled).toBool(); launcher.useLibSyncthing = settings.value(QStringLiteral("useLibSyncthing"), launcher.useLibSyncthing).toBool(); launcher.libSyncthing.configDir = settings.value(QStringLiteral("libSyncthingConfigDir"), launcher.libSyncthing.configDir).toString(); + launcher.libSyncthing.dataDir = settings.value(QStringLiteral("libSyncthingDataDir"), launcher.libSyncthing.dataDir).toString(); launcher.libSyncthing.logLevel = static_cast( settings.value(QStringLiteral("libSyncthingLogLevel"), static_cast(launcher.libSyncthing.logLevel)).toInt()); launcher.syncthingPath = settings.value(QStringLiteral("syncthingPath"), launcher.syncthingPath).toString(); @@ -394,6 +395,7 @@ void save() settings.setValue(QStringLiteral("syncthingAutostart"), launcher.autostartEnabled); settings.setValue(QStringLiteral("useLibSyncthing"), launcher.useLibSyncthing); settings.setValue(QStringLiteral("libSyncthingConfigDir"), launcher.libSyncthing.configDir); + settings.setValue(QStringLiteral("libSyncthingDataDir"), launcher.libSyncthing.dataDir); settings.setValue(QStringLiteral("libSyncthingLogLevel"), static_cast(launcher.libSyncthing.logLevel)); settings.setValue(QStringLiteral("syncthingPath"), launcher.syncthingPath); settings.setValue(QStringLiteral("syncthingArgs"), launcher.syncthingArgs); diff --git a/widgets/settings/settings.h b/widgets/settings/settings.h index 22e7704..bfb234e 100644 --- a/widgets/settings/settings.h +++ b/widgets/settings/settings.h @@ -83,6 +83,7 @@ struct SYNCTHINGWIDGETS_EXPORT Launcher { struct SYNCTHINGWIDGETS_EXPORT LibSyncthing { QString configDir; + QString dataDir; ::LibSyncthing::LogLevel logLevel = ::LibSyncthing::LogLevel::Info; } libSyncthing; diff --git a/widgets/settings/settingsdialog.cpp b/widgets/settings/settingsdialog.cpp index 94193b3..e58c547 100644 --- a/widgets/settings/settingsdialog.cpp +++ b/widgets/settings/settingsdialog.cpp @@ -892,6 +892,7 @@ QWidget *LauncherOptionPage::setupWidget() connect(m_restoreArgsButton, &IconButton::clicked, this, &LauncherOptionPage::restoreDefaultArguments); ui()->argumentsLineEdit->insertCustomButton(0, m_restoreArgsButton); ui()->configDirPathSelection->provideCustomFileMode(QFileDialog::Directory); + ui()->dataDirPathSelection->provideCustomFileMode(QFileDialog::Directory); } // setup other widgets @@ -933,6 +934,7 @@ bool LauncherOptionPage::apply() settings.autostartEnabled = ui()->enabledCheckBox->isChecked(); settings.useLibSyncthing = ui()->useBuiltInVersionCheckBox->isChecked(); settings.libSyncthing.configDir = ui()->configDirPathSelection->lineEdit()->text(); + settings.libSyncthing.dataDir = ui()->dataDirPathSelection->lineEdit()->text(); settings.libSyncthing.logLevel = static_cast(ui()->logLevelComboBox->currentIndex()); settings.syncthingPath = ui()->syncthingPathSelection->lineEdit()->text(); settings.syncthingArgs = ui()->argumentsLineEdit->text(); @@ -955,6 +957,7 @@ void LauncherOptionPage::reset() ui()->useBuiltInVersionCheckBox->setChecked(settings.useLibSyncthing); ui()->useBuiltInVersionCheckBox->setVisible(settings.useLibSyncthing || SyncthingLauncher::isLibSyncthingAvailable()); ui()->configDirPathSelection->lineEdit()->setText(settings.libSyncthing.configDir); + ui()->dataDirPathSelection->lineEdit()->setText(settings.libSyncthing.dataDir); ui()->logLevelComboBox->setCurrentIndex(static_cast(settings.libSyncthing.logLevel)); ui()->syncthingPathSelection->lineEdit()->setText(settings.syncthingPath); ui()->argumentsLineEdit->setText(settings.syncthingArgs);