From 287ec5542b9dadecf3c655f2481de394e79be1df Mon Sep 17 00:00:00 2001 From: Martchus Date: Mon, 20 Jan 2020 22:30:42 +0100 Subject: [PATCH] Allow setting log level when using libsyncthing --- .../go/src/github.com/syncthing/syncthing | 2 +- widgets/misc/syncthinglauncher.cpp | 4 +- widgets/misc/syncthinglauncher.h | 15 ++++ widgets/settings/launcheroptionpage.ui | 68 +++++++++++++++++++ widgets/settings/settings.cpp | 2 + widgets/settings/settings.h | 2 + widgets/settings/settingsdialog.cpp | 18 +++-- widgets/settings/settingsdialog.h | 1 + 8 files changed, 105 insertions(+), 7 deletions(-) diff --git a/libsyncthing/go/src/github.com/syncthing/syncthing b/libsyncthing/go/src/github.com/syncthing/syncthing index e4c68a8..16566e4 160000 --- a/libsyncthing/go/src/github.com/syncthing/syncthing +++ b/libsyncthing/go/src/github.com/syncthing/syncthing @@ -1 +1 @@ -Subproject commit e4c68a80109060a64fe149a108de1a5f18728738 +Subproject commit 16566e444297261f99359ea1107471ae70c628a7 diff --git a/widgets/misc/syncthinglauncher.cpp b/widgets/misc/syncthinglauncher.cpp index 48aa30e..180275f 100644 --- a/widgets/misc/syncthinglauncher.cpp +++ b/widgets/misc/syncthinglauncher.cpp @@ -29,6 +29,7 @@ SyncthingLauncher *SyncthingLauncher::s_mainInstance = nullptr; */ SyncthingLauncher::SyncthingLauncher(QObject *parent) : QObject(parent) + , m_libsyncthingLogLevel(LibSyncthing::LogLevel::Info) , m_manuallyStopped(true) , m_emittingOutput(false) { @@ -118,6 +119,7 @@ void SyncthingLauncher::launch(const Settings::Launcher &launcherSettings) if (launcherSettings.useLibSyncthing) { LibSyncthing::RuntimeOptions options; options.configDir = launcherSettings.libSyncthing.configDir.toStdString(); + setLibSyncthingLogLevel(launcherSettings.libSyncthing.logLevel); launch(options); } else { launch(launcherSettings.syncthingPath, SyncthingProcess::splitArguments(launcherSettings.syncthingArgs)); @@ -204,7 +206,7 @@ static const char *const logLevelStrings[] = { void SyncthingLauncher::handleLoggingCallback(LibSyncthing::LogLevel level, const char *message, size_t messageSize) { #ifdef SYNCTHINGWIDGETS_USE_LIBSYNCTHING - if (level < LibSyncthing::LogLevel::Info) { + if (level < m_libsyncthingLogLevel) { return; } QByteArray messageData; diff --git a/widgets/misc/syncthinglauncher.h b/widgets/misc/syncthinglauncher.h index d9425d3..ce541cc 100644 --- a/widgets/misc/syncthinglauncher.h +++ b/widgets/misc/syncthinglauncher.h @@ -35,6 +35,8 @@ public: bool isManuallyStopped() const; bool isEmittingOutput() const; void setEmittingOutput(bool emittingOutput); + LibSyncthing::LogLevel libSyncthingLogLevel() const; + void setLibSyncthingLogLevel(LibSyncthing::LogLevel logLevel); static bool isLibSyncthingAvailable(); static SyncthingLauncher *mainInstance(); static void setMainInstance(SyncthingLauncher *mainInstance); @@ -70,6 +72,7 @@ private: QFuture m_future; QByteArray m_outputBuffer; CppUtilities::DateTime m_futureStarted; + LibSyncthing::LogLevel m_libsyncthingLogLevel; bool m_manuallyStopped; bool m_emittingOutput; bool m_useLibSyncthing; @@ -114,6 +117,18 @@ inline bool SyncthingLauncher::isEmittingOutput() const return m_emittingOutput; } +/// \brief Returns the log level used for libsyncthing. +inline LibSyncthing::LogLevel SyncthingLauncher::libSyncthingLogLevel() const +{ + return m_libsyncthingLogLevel; +} + +/// \brief Sets the log level used for libsyncthing. +inline void SyncthingLauncher::setLibSyncthingLogLevel(LibSyncthing::LogLevel logLevel) +{ + m_libsyncthingLogLevel = logLevel; +} + /// \brief Returns the SyncthingLauncher instance previously assigned via SyncthingLauncher::setMainInstance(). inline SyncthingLauncher *SyncthingLauncher::mainInstance() { diff --git a/widgets/settings/launcheroptionpage.ui b/widgets/settings/launcheroptionpage.ui index 854916a..8d5d9c1 100644 --- a/widgets/settings/launcheroptionpage.ui +++ b/widgets/settings/launcheroptionpage.ui @@ -71,6 +71,42 @@ + + + + Log level + + + + + + + + Debug + + + + + Verbose + + + + + Info + + + + + Warning + + + + + Fatal + + + + @@ -281,5 +317,37 @@ + + useBuiltInVersionCheckBox + toggled(bool) + logLevelLabel + setVisible(bool) + + + 227 + 61 + + + 116 + 143 + + + + + useBuiltInVersionCheckBox + toggled(bool) + logLevelComboBox + setVisible(bool) + + + 227 + 61 + + + 180 + 145 + + + diff --git a/widgets/settings/settings.cpp b/widgets/settings/settings.cpp index 195ebf2..595cf5d 100644 --- a/widgets/settings/settings.cpp +++ b/widgets/settings/settings.cpp @@ -274,6 +274,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.logLevel = static_cast(settings.value(QStringLiteral("libSyncthingLogLevel"), static_cast(launcher.libSyncthing.logLevel)).toInt()); launcher.syncthingPath = settings.value(QStringLiteral("syncthingPath"), launcher.syncthingPath).toString(); launcher.syncthingArgs = settings.value(QStringLiteral("syncthingArgs"), launcher.syncthingArgs).toString(); launcher.considerForReconnect = settings.value(QStringLiteral("considerLauncherForReconnect"), launcher.considerForReconnect).toBool(); @@ -372,6 +373,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("libSyncthingLogLevel"), static_cast(launcher.libSyncthing.logLevel)); settings.setValue(QStringLiteral("syncthingPath"), launcher.syncthingPath); settings.setValue(QStringLiteral("syncthingArgs"), launcher.syncthingArgs); settings.setValue(QStringLiteral("considerLauncherForReconnect"), launcher.considerForReconnect); diff --git a/widgets/settings/settings.h b/widgets/settings/settings.h index a346fea..a423c8f 100644 --- a/widgets/settings/settings.h +++ b/widgets/settings/settings.h @@ -3,6 +3,7 @@ #include "../../connector/syncthingconnectionsettings.h" #include "../../model/syncthingicons.h" +#include "../../libsyncthing/interface.h" #include "../global.h" #include @@ -82,6 +83,7 @@ struct SYNCTHINGWIDGETS_EXPORT Launcher { struct SYNCTHINGWIDGETS_EXPORT LibSyncthing { QString configDir; + ::LibSyncthing::LogLevel logLevel = ::LibSyncthing::LogLevel::Info; } libSyncthing; static Data::SyncthingProcess &toolProcess(const QString &tool); diff --git a/widgets/settings/settingsdialog.cpp b/widgets/settings/settingsdialog.cpp index 96125f8..d30bb3b 100644 --- a/widgets/settings/settingsdialog.cpp +++ b/widgets/settings/settingsdialog.cpp @@ -908,6 +908,7 @@ QWidget *LauncherOptionPage::setupWidget() connect(m_launcher, &SyncthingLauncher::outputAvailable, this, &LauncherOptionPage::handleSyncthingOutputAvailable, Qt::QueuedConnection); connect(m_launcher, &SyncthingLauncher::exited, this, &LauncherOptionPage::handleSyncthingExited, Qt::QueuedConnection); connect(m_launcher, &SyncthingLauncher::errorOccurred, this, &LauncherOptionPage::handleSyncthingError, Qt::QueuedConnection); + connect(ui()->logLevelComboBox, static_cast(&QComboBox::currentIndexChanged), this, &LauncherOptionPage::updateLibSyncthingLogLevel); m_launcher->setEmittingOutput(true); } connect(ui()->launchNowPushButton, &QPushButton::clicked, this, &LauncherOptionPage::launch); @@ -923,6 +924,7 @@ bool LauncherOptionPage::apply() settings.autostartEnabled = ui()->enabledCheckBox->isChecked(); settings.useLibSyncthing = ui()->useBuiltInVersionCheckBox->isChecked(); settings.libSyncthing.configDir = ui()->configDirPathSelection->lineEdit()->text(); + settings.libSyncthing.logLevel = static_cast(ui()->logLevelComboBox->currentIndex()); settings.syncthingPath = ui()->syncthingPathSelection->lineEdit()->text(); settings.syncthingArgs = ui()->argumentsLineEdit->text(); settings.considerForReconnect = ui()->considerForReconnectCheckBox->isChecked(); @@ -944,6 +946,7 @@ void LauncherOptionPage::reset() ui()->useBuiltInVersionCheckBox->setChecked(settings.useLibSyncthing); ui()->useBuiltInVersionCheckBox->setVisible(settings.useLibSyncthing || SyncthingLauncher::isLibSyncthingAvailable()); ui()->configDirPathSelection->lineEdit()->setText(settings.libSyncthing.configDir); + ui()->logLevelComboBox->setCurrentIndex(static_cast(settings.libSyncthing.logLevel)); ui()->syncthingPathSelection->lineEdit()->setText(settings.syncthingPath); ui()->argumentsLineEdit->setText(settings.syncthingArgs); ui()->considerForReconnectCheckBox->setChecked(settings.considerForReconnect); @@ -1070,14 +1073,19 @@ void LauncherOptionPage::launch() if (isRunning()) { return; } - const auto launcherSettings(values().launcher); + const auto &launcherSettings(values().launcher); if (m_tool.isEmpty()) { m_launcher->launch(launcherSettings); - } else { - const auto toolParams(launcherSettings.tools.value(m_tool)); - m_process->startSyncthing(toolParams.path, SyncthingProcess::splitArguments(toolParams.args)); - handleSyncthingLaunched(true); + return; } + const auto toolParams(launcherSettings.tools.value(m_tool)); + m_process->startSyncthing(toolParams.path, SyncthingProcess::splitArguments(toolParams.args)); + handleSyncthingLaunched(true); +} + +void LauncherOptionPage::updateLibSyncthingLogLevel() +{ + m_launcher->setLibSyncthingLogLevel(static_cast(ui()->logLevelComboBox->currentIndex())); } void LauncherOptionPage::stop() diff --git a/widgets/settings/settingsdialog.h b/widgets/settings/settingsdialog.h index 409882e..0efaf14 100644 --- a/widgets/settings/settingsdialog.h +++ b/widgets/settings/settingsdialog.h @@ -117,6 +117,7 @@ private slots: void handleSyncthingError(QProcess::ProcessError error); bool isRunning() const; void launch(); + void updateLibSyncthingLogLevel(); void stop(); void restoreDefaultArguments();