Update libsyncthing to v1.5.0, support setting data directory

This commit is contained in:
Martchus 2020-05-05 19:01:05 +02:00
parent 65b3261320
commit 28a8391f2b
10 changed files with 80 additions and 11 deletions

View File

@ -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)

@ -1 +1 @@
Subproject commit 59c8bec1e592c23766b1f49d0e4cb005b4be70cf
Subproject commit dea7226ee5caf6e508b397571ccf04547c8f6b5b

View File

@ -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);
}
/*!

View File

@ -6,18 +6,36 @@
#include <cstdint>
#include <functional>
#include <string>
#include <type_traits>
#include <vector>
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<std::underlying_type_t<RuntimeFlags>>(lhs) & static_cast<std::underlying_type_t<RuntimeFlags>>(rhs);
}
constexpr RuntimeFlags operator|(RuntimeFlags lhs, RuntimeFlags rhs)
{
return static_cast<RuntimeFlags>(static_cast<std::underlying_type_t<RuntimeFlags>>(lhs) | static_cast<std::underlying_type_t<RuntimeFlags>>(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 {

View File

@ -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<std::int64_t (*)(const RuntimeOptions &)>(&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<std::int64_t (*)(const RuntimeOptions &)>(&runSyncthing), cref(options)), true);
}

View File

@ -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 {

View File

@ -71,14 +71,14 @@
<item row="3" column="1">
<widget class="QtUtilities::PathSelection" name="configDirPathSelection" native="true"/>
</item>
<item row="4" column="0">
<item row="5" column="0">
<widget class="QLabel" name="logLevelLabel">
<property name="text">
<string>Log level</string>
</property>
</widget>
</item>
<item row="4" column="1">
<item row="5" column="1">
<widget class="QComboBox" name="logLevelComboBox">
<item>
<property name="text">
@ -107,6 +107,16 @@
</item>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="dataDirLabel">
<property name="text">
<string>Data directory</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="QtUtilities::PathSelection" name="dataDirPathSelection" native="true"/>
</item>
</layout>
</widget>
</item>
@ -349,5 +359,37 @@
</hint>
</hints>
</connection>
<connection>
<sender>useBuiltInVersionCheckBox</sender>
<signal>toggled(bool)</signal>
<receiver>dataDirLabel</receiver>
<slot>setVisible(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>273</x>
<y>68</y>
</hint>
<hint type="destinationlabel">
<x>122</x>
<y>156</y>
</hint>
</hints>
</connection>
<connection>
<sender>useBuiltInVersionCheckBox</sender>
<signal>toggled(bool)</signal>
<receiver>dataDirPathSelection</receiver>
<slot>setVisible(bool)</slot>
<hints>
<hint type="sourcelabel">
<x>273</x>
<y>68</y>
</hint>
<hint type="destinationlabel">
<x>171</x>
<y>156</y>
</hint>
</hints>
</connection>
</connections>
</ui>

View File

@ -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<LibSyncthing::LogLevel>(
settings.value(QStringLiteral("libSyncthingLogLevel"), static_cast<int>(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<int>(launcher.libSyncthing.logLevel));
settings.setValue(QStringLiteral("syncthingPath"), launcher.syncthingPath);
settings.setValue(QStringLiteral("syncthingArgs"), launcher.syncthingArgs);

View File

@ -83,6 +83,7 @@ struct SYNCTHINGWIDGETS_EXPORT Launcher {
struct SYNCTHINGWIDGETS_EXPORT LibSyncthing {
QString configDir;
QString dataDir;
::LibSyncthing::LogLevel logLevel = ::LibSyncthing::LogLevel::Info;
} libSyncthing;

View File

@ -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<LibSyncthing::LogLevel>(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<int>(settings.libSyncthing.logLevel));
ui()->syncthingPathSelection->lineEdit()->setText(settings.syncthingPath);
ui()->argumentsLineEdit->setText(settings.syncthingArgs);