diff --git a/src/apps/deskflow-gui/MainWindow.cpp b/src/apps/deskflow-gui/MainWindow.cpp index 644a02f0d..7ccebba92 100644 --- a/src/apps/deskflow-gui/MainWindow.cpp +++ b/src/apps/deskflow-gui/MainWindow.cpp @@ -56,7 +56,6 @@ using namespace deskflow::gui; -using CoreMode = CoreProcess::Mode; using CoreConnectionState = CoreProcess::ConnectionState; using CoreProcessState = CoreProcess::ProcessState; @@ -233,11 +232,13 @@ void MainWindow::setupControls() ui->serverOptions->setVisible(false); ui->clientOptions->setVisible(false); - ui->rbModeClient->setChecked(m_appConfig.clientGroupChecked()); - ui->rbModeServer->setChecked(m_appConfig.serverGroupChecked()); - if (m_appConfig.clientGroupChecked() || m_appConfig.serverGroupChecked()) - updateModeControls(m_appConfig.serverGroupChecked()); + const auto coreMode = Settings::value(Settings::Core::CoreMode).value(); + ui->rbModeClient->setChecked(coreMode == Settings::CoreMode::Client); + ui->rbModeServer->setChecked(coreMode == Settings::CoreMode::Server); + + if (coreMode != Settings::CoreMode::None) + updateModeControls(coreMode == Settings::CoreMode::Server); ui->lineEditName->setValidator(new QRegularExpressionValidator(m_nameRegEx, this)); ui->lineEditName->setVisible(false); @@ -565,10 +566,10 @@ void MainWindow::coreModeToggled() const auto mode = serverMode ? QStringLiteral("server enabled") : QStringLiteral("client enabled"); qDebug() << mode; - m_appConfig.setServerGroupChecked(serverMode); - m_appConfig.setClientGroupChecked(!serverMode); - m_configScopes.save(); + const auto coreMode = serverMode ? Settings::CoreMode::Server : Settings::CoreMode::Client; + Settings::setValue(Settings::Core::CoreMode, coreMode); + m_configScopes.save(); updateModeControls(serverMode); } @@ -579,7 +580,7 @@ void MainWindow::updateModeControls(bool serverMode) ui->lblNoMode->setVisible(false); ui->btnToggleCore->setEnabled(true); m_actionStartCore->setEnabled(true); - auto expectedCoreMode = serverMode ? CoreProcess::Mode::Server : CoreProcess::Mode::Client; + auto expectedCoreMode = serverMode ? Settings::CoreMode::Server : Settings::CoreMode::Client; if (m_coreProcess.isStarted() && m_coreProcess.mode() != expectedCoreMode) m_coreProcess.stop(); m_coreProcess.setMode(expectedCoreMode); @@ -652,7 +653,7 @@ void MainWindow::open() void MainWindow::coreProcessStarting() { if (deskflow::platform::isWayland()) { - m_waylandWarnings.showOnce(this, m_coreProcess.mode()); + m_waylandWarnings.showOnce(this); } saveSettings(); } @@ -715,17 +716,21 @@ void MainWindow::applyConfig() updateLocalFingerprint(); setIcon(); - if (!m_appConfig.serverGroupChecked() && !m_appConfig.clientGroupChecked()) + const auto coreMode = Settings::value(Settings::Core::CoreMode).value(); + + if (coreMode == Settings::CoreMode::None) return; - updateModeControls(m_appConfig.serverGroupChecked()); + updateModeControls(coreMode == Settings::CoreMode::Server); } void MainWindow::saveSettings() { - m_appConfig.setServerGroupChecked(ui->rbModeServer->isChecked()); - m_appConfig.setClientGroupChecked(ui->rbModeClient->isChecked()); + if (ui->rbModeClient->isChecked()) { + Settings::setValue(Settings::Core::CoreMode, Settings::CoreMode::Client); + } else if (ui->rbModeServer->isChecked()) { + Settings::setValue(Settings::Core::CoreMode, Settings::CoreMode::Server); + } Settings::setValue(Settings::Client::RemoteHost, ui->lineHostname->text()); - m_configScopes.save(); } diff --git a/src/apps/deskflow-gui/MainWindow.h b/src/apps/deskflow-gui/MainWindow.h index 4eebe21a8..4718ae22e 100644 --- a/src/apps/deskflow-gui/MainWindow.h +++ b/src/apps/deskflow-gui/MainWindow.h @@ -59,7 +59,7 @@ class DaemonIpcClient; class MainWindow : public QMainWindow { - using CoreMode = deskflow::gui::CoreProcess::Mode; + using CoreMode = Settings::CoreMode; using CoreProcess = deskflow::gui::CoreProcess; Q_OBJECT diff --git a/src/apps/deskflow-gui/dialogs/SettingsDialog.cpp b/src/apps/deskflow-gui/dialogs/SettingsDialog.cpp index 53f6c7e43..9563ca424 100644 --- a/src/apps/deskflow-gui/dialogs/SettingsDialog.cpp +++ b/src/apps/deskflow-gui/dialogs/SettingsDialog.cpp @@ -244,7 +244,8 @@ void SettingsDialog::updateTlsControls() void SettingsDialog::updateTlsControlsEnabled() { const auto writable = m_appConfig.isActiveScopeWritable(); - const auto clientMode = m_appConfig.clientGroupChecked(); + const auto clientMode = + Settings::value(Settings::Core::CoreMode).value() == Settings::CoreMode::Client; const auto tlsChecked = ui->groupSecurity->isChecked(); auto enabled = writable && tlsChecked && !clientMode; @@ -258,7 +259,7 @@ void SettingsDialog::updateTlsControlsEnabled() bool SettingsDialog::isClientMode() const { - return m_coreProcess.mode() == deskflow::gui::CoreProcess::Mode::Client; + return m_coreProcess.mode() == Settings::CoreMode::Client; } void SettingsDialog::updateKeyLengthOnFile(const QString &path) diff --git a/src/lib/common/Settings.h b/src/lib/common/Settings.h index 3969c5e6a..9d14225d4 100644 --- a/src/lib/common/Settings.h +++ b/src/lib/common/Settings.h @@ -39,6 +39,7 @@ public: }; struct Core { + inline static const auto CoreMode = QStringLiteral("core/coreMode"); inline static const auto ElevateMode = QStringLiteral("core/elevateMode"); inline static const auto Interface = QStringLiteral("core/interface"); inline static const auto LastVersion = QStringLiteral("core/lastVersion"); @@ -115,6 +116,14 @@ public: }; Q_ENUM(ElevateMode) + enum CoreMode + { + None, + Client, + Server + }; + Q_ENUM(CoreMode) + static Settings *instance(); static void setSettingFile(const QString &settingsFile = QString()); static void setValue(const QString &key = QString(), const QVariant &value = QVariant()); @@ -158,6 +167,7 @@ private: , Client::InvertScrollDirection , Client::LanguageSync , Client::RemoteHost + , Core::CoreMode , Core::ElevateMode , Core::Interface , Core::LastVersion diff --git a/src/lib/gui/config/AppConfig.cpp b/src/lib/gui/config/AppConfig.cpp index 5f51b40a7..ea7c6e127 100644 --- a/src/lib/gui/config/AppConfig.cpp +++ b/src/lib/gui/config/AppConfig.cpp @@ -51,11 +51,11 @@ const char *const AppConfig::m_SettingsName[] = { "", // 17 = minimizeToTray, obsolete "", // 18 = ActivateEmail, obsolete "loadFromSystemScope", - "groupServerChecked", // kServerGroupChecked - "", // 21 = use external config moved to deskflow settings - "", // 22 config file moved to dekflow settings + "", // kServerGroupChecked + "", // 21 = use external config moved to deskflow settings + "", // 22 config file moved to dekflow settings "useInternalConfig", - "groupClientChecked", + "", // Client groupchecked "", // 25 server host name moved to deskflow settings "", // 26 cert path moved to deskflow settings "", // 27 key length Moved to Deskflow settings @@ -106,9 +106,7 @@ void AppConfig::recallFromCurrentScope() { using enum Setting; - m_ServerGroupChecked = getFromCurrentScope(kServerGroupChecked, m_ServerGroupChecked).toBool(); m_UseInternalConfig = getFromCurrentScope(kUseInternalConfig, m_UseInternalConfig).toBool(); - m_ClientGroupChecked = getFromCurrentScope(kClientGroupChecked, m_ClientGroupChecked).toBool(); } void AppConfig::commit() @@ -118,8 +116,6 @@ void AppConfig::commit() qDebug("committing app config"); saveToAllScopes(kLoadSystemSettings, m_LoadFromSystemScope); - saveToAllScopes(kClientGroupChecked, m_ClientGroupChecked); - saveToAllScopes(kServerGroupChecked, m_ServerGroupChecked); if (isActiveScopeWritable()) { setInCurrentScope(kUseInternalConfig, m_UseInternalConfig); @@ -282,21 +278,11 @@ IConfigScopes &AppConfig::scopes() const return m_Scopes; } -bool AppConfig::serverGroupChecked() const -{ - return m_ServerGroupChecked; -} - bool AppConfig::useInternalConfig() const { return m_UseInternalConfig; } -bool AppConfig::clientGroupChecked() const -{ - return m_ClientGroupChecked; -} - /////////////////////////////////////////////////////////////////////////////// // End getters /////////////////////////////////////////////////////////////////////////////// @@ -305,21 +291,11 @@ bool AppConfig::clientGroupChecked() const // Begin setters /////////////////////////////////////////////////////////////////////////////// -void AppConfig::setServerGroupChecked(bool newValue) -{ - m_ServerGroupChecked = newValue; -} - void AppConfig::setUseInternalConfig(bool newValue) { m_UseInternalConfig = newValue; } -void AppConfig::setClientGroupChecked(bool newValue) -{ - m_ClientGroupChecked = newValue; -} - /////////////////////////////////////////////////////////////////////////////// // End setters /////////////////////////////////////////////////////////////////////////////// diff --git a/src/lib/gui/config/AppConfig.h b/src/lib/gui/config/AppConfig.h index cd36b7dcc..95f167e08 100644 --- a/src/lib/gui/config/AppConfig.h +++ b/src/lib/gui/config/AppConfig.h @@ -58,33 +58,33 @@ private: // 17 = minimize to tray, obsolete // 18 = activate email, obsolete kLoadSystemSettings = 19, - kServerGroupChecked = 20, - // 21 = use external config moved to deskflow settings - // 22 = k config file moved to deskflow settings + // kServerGroupChecked = 20, + // 21 = use external config moved to deskflow settings + // 22 = k config file moved to deskflow settings kUseInternalConfig = 23, - kClientGroupChecked = 24, - // 25 = serverHostName moved to deskflow settings - // 26 = kTlsCertPath moved to deskflow settings - // 27 = tlsKeyLength Moved to deskflow settings - // 28 = Prevent Sleep moved to deskflow settings - // 29 = language Sync moved to deskflow settings - // 30 = InvertScrollDirection moved to deskflow settings - // 31 = guid, obsolete - // 32 = license registry url, obsolete - // 33 = license next check, obsolete - // 34 = InvertConnection, obsolete - // 35 = client-host-mode, obsolete - // 36 = server-client-mode, obsolete - // kEnableService = 37, moved to deskflow settings - // 38, close to tray moved to deskflow settings - // 39 window size moved to deskflow settings - // 40 window position moved to deskflow settings - // 41 = show dev thanks, obsolete - // 42, close reminder moved to deskflow settings - // 43 = Enable Update Check, - // 44 = LogExpanded, Moved to deskflow settings - // 45 = Colorful Icon, Moved to deskflow settings - // kRequireClientCert = 46 Moved to deskflow settings + // kClientGroupChecked = 24, + // 25 = serverHostName moved to deskflow settings + // 26 = kTlsCertPath moved to deskflow settings + // 27 = tlsKeyLength Moved to deskflow settings + // 28 = Prevent Sleep moved to deskflow settings + // 29 = language Sync moved to deskflow settings + // 30 = InvertScrollDirection moved to deskflow settings + // 31 = guid, obsolete + // 32 = license registry url, obsolete + // 33 = license next check, obsolete + // 34 = InvertConnection, obsolete + // 35 = client-host-mode, obsolete + // 36 = server-client-mode, obsolete + // kEnableService = 37, moved to deskflow settings + // 38, close to tray moved to deskflow settings + // 39 window size moved to deskflow settings + // 40 window position moved to deskflow settings + // 41 = show dev thanks, obsolete + // 42, close reminder moved to deskflow settings + // 43 = Enable Update Check, + // 44 = LogExpanded, Moved to deskflow settings + // 45 = Colorful Icon, Moved to deskflow settings + // kRequireClientCert = 46 Moved to deskflow settings }; public: @@ -110,22 +110,18 @@ public: IConfigScopes &scopes() const override; bool isActiveScopeWritable() const override; bool isActiveScopeSystem() const override; - bool clientGroupChecked() const override; // // Getters (new methods) // - bool serverGroupChecked() const; bool useInternalConfig() const; // // Setters (new methods) // - void setServerGroupChecked(bool); void setUseInternalConfig(bool); - void setClientGroupChecked(bool); /// @brief Sets the user preference to load from SystemScope. /// @param [in] value @@ -183,9 +179,7 @@ private: /// @brief Contains the string values of the settings names that will be saved static const char *const m_SettingsName[]; - bool m_ServerGroupChecked = false; bool m_UseInternalConfig = false; - bool m_ClientGroupChecked = false; bool m_LoadFromSystemScope = false; deskflow::gui::IConfigScopes &m_Scopes; diff --git a/src/lib/gui/config/IAppConfig.h b/src/lib/gui/config/IAppConfig.h index be420e22c..7da400244 100644 --- a/src/lib/gui/config/IAppConfig.h +++ b/src/lib/gui/config/IAppConfig.h @@ -26,7 +26,6 @@ public: virtual IConfigScopes &scopes() const = 0; virtual bool isActiveScopeSystem() const = 0; virtual bool isActiveScopeWritable() const = 0; - virtual bool clientGroupChecked() const = 0; // // Setters diff --git a/src/lib/gui/core/CoreProcess.cpp b/src/lib/gui/core/CoreProcess.cpp index e1a27d464..6105370dd 100644 --- a/src/lib/gui/core/CoreProcess.cpp +++ b/src/lib/gui/core/CoreProcess.cpp @@ -380,10 +380,10 @@ void CoreProcess::start(std::optional processModeOption) QStringList args; addGenericArgs(args, processMode); - if (mode() == Mode::Server && !addServerArgs(args, app)) { + if (mode() == Settings::CoreMode::Server && !addServerArgs(args, app)) { qWarning("failed to add server args for core process, aborting start"); return; - } else if (mode() == Mode::Client && !addClientArgs(args, app)) { + } else if (mode() == Settings::CoreMode::Client && !addClientArgs(args, app)) { qWarning("failed to add client args for core process, aborting start"); return; } @@ -620,12 +620,10 @@ QString CoreProcess::persistServerConfig() const QString CoreProcess::modeString() const { - using enum Mode; - switch (m_mode) { - case Server: + case Settings::CoreMode::Server: return "server"; - case Client: + case Settings::CoreMode::Client: return "client"; default: qFatal("invalid core mode"); diff --git a/src/lib/gui/core/CoreProcess.h b/src/lib/gui/core/CoreProcess.h index e10c51e72..91ab14e7e 100644 --- a/src/lib/gui/core/CoreProcess.h +++ b/src/lib/gui/core/CoreProcess.h @@ -50,12 +50,6 @@ public: QProcessProxy m_process; }; - enum class Mode - { - None, - Client, - Server - }; enum class Error { AddressMissing, @@ -88,7 +82,7 @@ public: void clearSettings(); // getters - Mode mode() const + Settings::CoreMode mode() const { return m_mode; } @@ -114,7 +108,7 @@ public: { m_address = address.trimmed(); } - void setMode(Mode mode) + void setMode(Settings::CoreMode mode) { m_mode = mode; } @@ -163,7 +157,7 @@ private: QString m_address; ProcessState m_processState = ProcessState::Stopped; ConnectionState m_connectionState = ConnectionState::Disconnected; - Mode m_mode = Mode::None; + Settings::CoreMode m_mode = Settings::CoreMode::None; QMutex m_processMutex; QString m_secureSocketVersion = ""; std::optional m_lastProcessMode = std::nullopt; diff --git a/src/lib/gui/core/WaylandWarnings.cpp b/src/lib/gui/core/WaylandWarnings.cpp index ca2b02ca3..5ab2ae17e 100644 --- a/src/lib/gui/core/WaylandWarnings.cpp +++ b/src/lib/gui/core/WaylandWarnings.cpp @@ -6,6 +6,7 @@ #include "WaylandWarnings.h" +#include "common/Settings.h" #include "messages.h" using namespace deskflow::platform; @@ -25,12 +26,10 @@ void WaylandWarnings::Deps::showWaylandLibraryError(QWidget *parent) // WaylandWarnings // -void WaylandWarnings::showOnce( - QWidget *parent, CoreProcess::Mode mode, bool hasEi, bool hasPortal, bool hasPortalInputCapture -) +void WaylandWarnings::showOnce(QWidget *parent, bool hasEi, bool hasPortal, bool hasPortalInputCapture) { - - const auto portalIcProblem = !hasPortalInputCapture && mode == CoreProcess::Mode::Server; + const auto mode = Settings::value(Settings::Core::CoreMode).value(); + const bool portalIcProblem = !hasPortalInputCapture && mode == Settings::CoreMode::Server; if (!hasEi || !hasPortal || portalIcProblem) { if (!m_errorShown) { diff --git a/src/lib/gui/core/WaylandWarnings.h b/src/lib/gui/core/WaylandWarnings.h index c5e6894ad..0a48915f2 100644 --- a/src/lib/gui/core/WaylandWarnings.h +++ b/src/lib/gui/core/WaylandWarnings.h @@ -9,7 +9,6 @@ #include #include -#include "CoreProcess.h" #include "platform/wayland.h" namespace deskflow::gui::core { @@ -28,7 +27,7 @@ public: } void showOnce( - QWidget *parent, CoreProcess::Mode mode, bool hasEi = platform::kHasEi, bool hasPortal = platform::kHasPortal, + QWidget *parent, bool hasEi = platform::kHasEi, bool hasPortal = platform::kHasPortal, bool hasPortalInputCapture = platform::kHasPortalInputCapture ); diff --git a/src/test/shared/gui/mocks/AppConfigMock.h b/src/test/shared/gui/mocks/AppConfigMock.h index 0ba3850a9..82b6a0e02 100644 --- a/src/test/shared/gui/mocks/AppConfigMock.h +++ b/src/test/shared/gui/mocks/AppConfigMock.h @@ -25,7 +25,6 @@ public: MOCK_METHOD(deskflow::gui::IConfigScopes &, scopes, (), (const, override)); MOCK_METHOD(bool, isActiveScopeSystem, (), (const, override)); MOCK_METHOD(bool, isActiveScopeWritable, (), (const, override)); - MOCK_METHOD(bool, clientGroupChecked, (), (const, override)); // // Setters diff --git a/src/test/unittests/gui/core/CoreProcessTests.cpp b/src/test/unittests/gui/core/CoreProcessTests.cpp index 10422283d..978aaf943 100644 --- a/src/test/unittests/gui/core/CoreProcessTests.cpp +++ b/src/test/unittests/gui/core/CoreProcessTests.cpp @@ -86,7 +86,7 @@ private: TEST_F(CoreProcessTests, start_serverDesktop_callsProcessStart) { - m_coreProcess.setMode(CoreProcess::Mode::Server); + m_coreProcess.setMode(Settings::CoreMode::Server); EXPECT_CALL(m_pDeps->m_process, start(_, _)).Times(1); @@ -95,7 +95,7 @@ TEST_F(CoreProcessTests, start_serverDesktop_callsProcessStart) TEST_F(CoreProcessTests, start_clientDesktop_callsProcessStart) { - m_coreProcess.setMode(CoreProcess::Mode::Client); + m_coreProcess.setMode(Settings::CoreMode::Client); m_coreProcess.setAddress("stub address"); EXPECT_CALL(m_pDeps->m_process, start(_, _)).Times(1); @@ -105,7 +105,7 @@ TEST_F(CoreProcessTests, start_clientDesktop_callsProcessStart) TEST_F(CoreProcessTests, stop_serverDesktop_callsProcessClose) { - m_coreProcess.setMode(CoreProcess::Mode::Server); + m_coreProcess.setMode(Settings::CoreMode::Server); m_coreProcess.start(); EXPECT_CALL(m_pDeps->m_process, close()).Times(1); @@ -115,7 +115,7 @@ TEST_F(CoreProcessTests, stop_serverDesktop_callsProcessClose) TEST_F(CoreProcessTests, stop_clientDesktop_callsProcessClose) { - m_coreProcess.setMode(CoreProcess::Mode::Client); + m_coreProcess.setMode(Settings::CoreMode::Client); m_coreProcess.setAddress("stub address"); m_coreProcess.start(); @@ -127,7 +127,7 @@ TEST_F(CoreProcessTests, stop_clientDesktop_callsProcessClose) TEST_F(CoreProcessTests, restart_serverDesktop_callsProcessStart) { Settings::setValue(Settings::Core::ProcessMode, Settings::ProcessMode::Desktop); - m_coreProcess.setMode(CoreProcess::Mode::Server); + m_coreProcess.setMode(Settings::CoreMode::Server); m_coreProcess.start(); EXPECT_CALL(m_pDeps->m_process, close()).Times(1); diff --git a/src/test/unittests/gui/core/WaylandWarningsTests.cpp b/src/test/unittests/gui/core/WaylandWarningsTests.cpp index c90bde1b7..5c7961e27 100644 --- a/src/test/unittests/gui/core/WaylandWarningsTests.cpp +++ b/src/test/unittests/gui/core/WaylandWarningsTests.cpp @@ -29,10 +29,11 @@ TEST(WaylandWarningsTests, showOnce_serverNoEi_showLibraryError) const bool hasPortal = false; const bool hasPortalIC = false; WaylandWarnings waylandWarnings(deps); + Settings::setValue(Settings::Core::CoreMode, Settings::CoreMode::Server); EXPECT_CALL(*deps, showWaylandLibraryError(nullptr)).Times(1); - waylandWarnings.showOnce(nullptr, CoreProcess::Mode::Server, hasEi, hasPortal, hasPortalIC); + waylandWarnings.showOnce(nullptr, hasEi, hasPortal, hasPortalIC); } TEST(WaylandWarningsTests, showOnce_serverNoPortal_showLibraryError) @@ -42,10 +43,11 @@ TEST(WaylandWarningsTests, showOnce_serverNoPortal_showLibraryError) const bool hasPortal = false; const bool hasPortalIC = false; WaylandWarnings waylandWarnings(deps); + Settings::setValue(Settings::Core::CoreMode, Settings::CoreMode::Server); EXPECT_CALL(*deps, showWaylandLibraryError(nullptr)).Times(1); - waylandWarnings.showOnce(nullptr, CoreProcess::Mode::Server, hasEi, hasPortal, hasPortalIC); + waylandWarnings.showOnce(nullptr, hasEi, hasPortal, hasPortalIC); } TEST(WaylandWarningsTests, showOnce_serverNoPortalIc_showLibraryError) @@ -55,10 +57,11 @@ TEST(WaylandWarningsTests, showOnce_serverNoPortalIc_showLibraryError) const bool hasPortal = true; const bool hasPortalIC = false; WaylandWarnings waylandWarnings(deps); + Settings::setValue(Settings::Core::CoreMode, Settings::CoreMode::Server); EXPECT_CALL(*deps, showWaylandLibraryError(nullptr)).Times(1); - waylandWarnings.showOnce(nullptr, CoreProcess::Mode::Server, hasEi, hasPortal, hasPortalIC); + waylandWarnings.showOnce(nullptr, hasEi, hasPortal, hasPortalIC); } TEST(WaylandWarningsTests, showOnce_failureCalledTwice_messageOnlyShownOnce) @@ -68,9 +71,10 @@ TEST(WaylandWarningsTests, showOnce_failureCalledTwice_messageOnlyShownOnce) const bool hasPortal = false; const bool hasPortalIC = false; WaylandWarnings waylandWarnings(deps); + Settings::setValue(Settings::Core::CoreMode, Settings::CoreMode::Server); EXPECT_CALL(*deps, showWaylandLibraryError(nullptr)).Times(1); - waylandWarnings.showOnce(nullptr, CoreProcess::Mode::Server, hasEi, hasPortal, hasPortalIC); - waylandWarnings.showOnce(nullptr, CoreProcess::Mode::Server, hasEi, hasPortal, hasPortalIC); + waylandWarnings.showOnce(nullptr, hasEi, hasPortal, hasPortalIC); + waylandWarnings.showOnce(nullptr, hasEi, hasPortal, hasPortalIC); }