From c2ee366e233c9d885fcdd7da7c1a540afe0985bf Mon Sep 17 00:00:00 2001 From: sithlord48 Date: Sat, 23 Aug 2025 16:10:13 -0400 Subject: [PATCH] refactor: move preventsleep option into CoreArgs --- src/lib/deskflow/ArgParser.cpp | 2 - src/lib/deskflow/ArgsBase.h | 3 -- src/lib/deskflow/CoreArgParser.cpp | 7 ++++ src/lib/deskflow/CoreArgs.h | 9 ++++- src/lib/gui/core/CoreProcess.cpp | 11 ----- src/lib/gui/core/CoreProcess.h | 1 - src/lib/platform/EiScreen.cpp | 3 +- src/lib/platform/MSWindowsScreen.cpp | 3 +- src/lib/platform/OSXScreen.mm | 3 +- src/lib/platform/XWindowsScreen.cpp | 4 +- src/unittests/deskflow/ArgParserTests.cpp | 12 ------ src/unittests/deskflow/ArgParserTests.h | 1 - src/unittests/deskflow/CoreArgParserTests.cpp | 40 +++++++++++++++++++ src/unittests/deskflow/CoreArgParserTests.h | 4 ++ 14 files changed, 67 insertions(+), 36 deletions(-) diff --git a/src/lib/deskflow/ArgParser.cpp b/src/lib/deskflow/ArgParser.cpp index 5c15b9c2e..c3b781826 100644 --- a/src/lib/deskflow/ArgParser.cpp +++ b/src/lib/deskflow/ArgParser.cpp @@ -139,8 +139,6 @@ bool ArgParser::parseGenericArgs(int argc, const char *const *argv, int &i) cons // HACK: stop error happening when using portable (deskflowp) } else if (isArg(i, argc, argv, nullptr, "--client")) { // HACK: stop error happening when using portable (deskflowp) - } else if (isArg(i, argc, argv, nullptr, "--prevent-sleep")) { - argsBase().m_preventSleep = true; } else { // option not supported here return false; diff --git a/src/lib/deskflow/ArgsBase.h b/src/lib/deskflow/ArgsBase.h index 6e06e5bec..4d3e3f72a 100644 --- a/src/lib/deskflow/ArgsBase.h +++ b/src/lib/deskflow/ArgsBase.h @@ -50,9 +50,6 @@ public: /// @brief Will cause the application to exit with fail code when set to true bool m_shouldExitFail = false; - /// @brief Stop this computer from sleeping - bool m_preventSleep = false; - protected: /// @brief deletes pointers and sets the value to null template static inline void destroy(T *&p) diff --git a/src/lib/deskflow/CoreArgParser.cpp b/src/lib/deskflow/CoreArgParser.cpp index 4ff8d4524..cc0e82680 100644 --- a/src/lib/deskflow/CoreArgParser.cpp +++ b/src/lib/deskflow/CoreArgParser.cpp @@ -83,6 +83,13 @@ void CoreArgParser::parse() if (m_parser.isSet(CoreArgs::tlsCertOption)) { Settings::setValue(Settings::Security::Certificate, m_parser.value(CoreArgs::tlsCertOption)); } + + if (m_parser.isSet(CoreArgs::preventSleepOption)) { + bool value = + ((m_parser.value(CoreArgs::preventSleepOption).toLower() == "true") || + (m_parser.value(CoreArgs::preventSleepOption) == "1")); + Settings::setValue(Settings::Core::PreventSleep, value); + } } [[noreturn]] void CoreArgParser::showHelpText() const diff --git a/src/lib/deskflow/CoreArgs.h b/src/lib/deskflow/CoreArgs.h index 61a045c7d..317e16a3d 100644 --- a/src/lib/deskflow/CoreArgs.h +++ b/src/lib/deskflow/CoreArgs.h @@ -44,6 +44,11 @@ struct CoreArgs inline static const auto tlsCertOption = QCommandLineOption("tls-cert", "Use file in place of default TLS certificate path", "file"); - inline static const auto options = {helpOption, versionOption, configOption, interfaceOption, portOption, - nameOption, logLevelOption, logFileOption, secureOption, tlsCertOption}; + inline static const auto preventSleepOption = QCommandLineOption( + "prevent-sleep", "When true the machine will be prevented from sleeping while the program is running", "value" + ); + + inline static const auto options = {helpOption, versionOption, configOption, interfaceOption, + portOption, nameOption, logLevelOption, logFileOption, + secureOption, tlsCertOption, preventSleepOption}; }; diff --git a/src/lib/gui/core/CoreProcess.cpp b/src/lib/gui/core/CoreProcess.cpp index df72bfee3..63c7f87b6 100644 --- a/src/lib/gui/core/CoreProcess.cpp +++ b/src/lib/gui/core/CoreProcess.cpp @@ -360,8 +360,6 @@ void CoreProcess::start(std::optional processModeOption) QStringList args; - addGenericArgs(args); - if (mode() == Server) { args.prepend(QStringLiteral("server")); if (!addServerArgs(args)) @@ -454,15 +452,6 @@ void CoreProcess::cleanup() } } -bool CoreProcess::addGenericArgs(QStringList &args) const -{ - if (Settings::value(Settings::Core::PreventSleep).toBool()) { - args << "--prevent-sleep"; - } - - return true; -} - bool CoreProcess::addServerArgs(QStringList &args) { if (Settings::value(Settings::Log::ToFile).toBool()) { diff --git a/src/lib/gui/core/CoreProcess.h b/src/lib/gui/core/CoreProcess.h index daabf3447..cd5cb49d9 100644 --- a/src/lib/gui/core/CoreProcess.h +++ b/src/lib/gui/core/CoreProcess.h @@ -115,7 +115,6 @@ private: void startProcessFromDaemon(const QStringList &args); void stopForegroundProcess() const; void stopProcessFromDaemon(); - bool addGenericArgs(QStringList &args) const; bool addServerArgs(QStringList &args); bool addClientArgs(QStringList &args); QString persistServerConfig() const; diff --git a/src/lib/platform/EiScreen.cpp b/src/lib/platform/EiScreen.cpp index 6350a5545..9d205e0de 100644 --- a/src/lib/platform/EiScreen.cpp +++ b/src/lib/platform/EiScreen.cpp @@ -14,6 +14,7 @@ #include "base/Log.h" #include "base/Stopwatch.h" #include "common/Constants.h" +#include "common/Settings.h" #include "deskflow/App.h" #include "deskflow/Clipboard.h" #include "deskflow/KeyMap.h" @@ -76,7 +77,7 @@ EiScreen::EiScreen(bool isPrimary, IEventQueue *events, bool usePortal, deskflow } // disable sleep if the flag is set - if (App::instance().argsBase().m_preventSleep) { + if (Settings::value(Settings::Core::PreventSleep).toBool()) { m_powerManager.disableSleep(); } } diff --git a/src/lib/platform/MSWindowsScreen.cpp b/src/lib/platform/MSWindowsScreen.cpp index 2a9891255..6f9a3cc4c 100644 --- a/src/lib/platform/MSWindowsScreen.cpp +++ b/src/lib/platform/MSWindowsScreen.cpp @@ -16,6 +16,7 @@ #include "base/TMethodJob.h" #include "client/Client.h" #include "common/Constants.h" +#include "common/Settings.h" #include "deskflow/App.h" #include "deskflow/ArgsBase.h" #include "deskflow/ClientApp.h" @@ -117,7 +118,7 @@ MSWindowsScreen::MSWindowsScreen( LOG_DEBUG("screen shape: %d,%d %dx%d %s", m_x, m_y, m_w, m_h, m_multimon ? "(multi-monitor)" : ""); LOG_DEBUG("window is 0x%08x", m_window); - if (App::instance().argsBase().m_preventSleep) { + if (Settings::value(Settings::Core::PreventSleep).toBool()) { m_powerManager.disableSleep(); } diff --git a/src/lib/platform/OSXScreen.mm b/src/lib/platform/OSXScreen.mm index 52d4bb2e4..6a456529e 100644 --- a/src/lib/platform/OSXScreen.mm +++ b/src/lib/platform/OSXScreen.mm @@ -14,6 +14,7 @@ #include "base/Log.h" #include "base/TMethodJob.h" #include "client/Client.h" +#include "common/Settings.h" #include "deskflow/ClientApp.h" #include "deskflow/Clipboard.h" #include "deskflow/DisplayInvalidException.h" @@ -114,7 +115,7 @@ OSXScreen::OSXScreen( m_screensaver = new OSXScreenSaver(m_events, getEventTarget()); m_keyState = new OSXKeyState(m_events, AppUtil::instance().getKeyboardLayoutList(), enableLangSync); - if (App::instance().argsBase().m_preventSleep) { + if (Settings::value(Settings::Core::PreventSleep).toBool()) { m_powerManager.disableSleep(); } diff --git a/src/lib/platform/XWindowsScreen.cpp b/src/lib/platform/XWindowsScreen.cpp index 3b02a2ded..d10a4d8cc 100644 --- a/src/lib/platform/XWindowsScreen.cpp +++ b/src/lib/platform/XWindowsScreen.cpp @@ -6,6 +6,8 @@ * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception */ +#include "common/Settings.h" // must include first + #include "platform/XWindowsScreen.h" #include "arch/Arch.h" @@ -141,7 +143,7 @@ XWindowsScreen::XWindowsScreen( } // disable sleep if the flag is set - if (App::instance().argsBase().m_preventSleep) { + if (Settings::value(Settings::Core::PreventSleep).toBool()) { m_powerManager.disableSleep(); } diff --git a/src/unittests/deskflow/ArgParserTests.cpp b/src/unittests/deskflow/ArgParserTests.cpp index fdcfdb172..b25743d55 100644 --- a/src/unittests/deskflow/ArgParserTests.cpp +++ b/src/unittests/deskflow/ArgParserTests.cpp @@ -234,18 +234,6 @@ void ArgParserTests::client_setInvertScroll() QCOMPARE(clientArgs.m_clientScrollDirection, deskflow::ClientScrollDirection::Inverted); } -void ArgParserTests::client_commonArgs() -{ - deskflow::ClientArgs clientArgs; - clientArgs.m_enableLangSync = false; - const int argc = 2; - std::array kLangCmd = {"stub", "--prevent-sleep"}; - - m_parser.parseClientArgs(clientArgs, argc, kLangCmd.data()); - - QVERIFY(clientArgs.m_preventSleep); -} - void ArgParserTests::client_setAddress() { deskflow::ClientArgs clientArgs; diff --git a/src/unittests/deskflow/ArgParserTests.h b/src/unittests/deskflow/ArgParserTests.h index 6ac8d1ba1..93212d1e7 100644 --- a/src/unittests/deskflow/ArgParserTests.h +++ b/src/unittests/deskflow/ArgParserTests.h @@ -28,7 +28,6 @@ private Q_SLOTS: void client_yScroll(); void client_setLangSync(); void client_setInvertScroll(); - void client_commonArgs(); void client_setAddress(); void client_badArgs(); void deprecatedArg_crypoPass_true(); diff --git a/src/unittests/deskflow/CoreArgParserTests.cpp b/src/unittests/deskflow/CoreArgParserTests.cpp index 740a67f37..0fb5d1b79 100644 --- a/src/unittests/deskflow/CoreArgParserTests.cpp +++ b/src/unittests/deskflow/CoreArgParserTests.cpp @@ -160,4 +160,44 @@ void CoreArgParserTests::tlsCert() QCOMPARE(Settings::value(Settings::Security::Certificate).toString(), "certFile"); } +void CoreArgParserTests::preventSleep_false() +{ + QStringList args = {"stub", "client", "--prevent-sleep", "false"}; + + CoreArgParser parser(args); + parser.parse(); + + QVERIFY(!Settings::value(Settings::Core::PreventSleep).toBool()); +} + +void CoreArgParserTests::preventSleep_1() +{ + QStringList args = {"stub", "client", "--prevent-sleep", "1"}; + + CoreArgParser parser(args); + parser.parse(); + + QVERIFY(Settings::value(Settings::Core::PreventSleep).toBool()); +} + +void CoreArgParserTests::preventSleep_0() +{ + QStringList args = {"stub", "client", "--prevent-sleep", "0"}; + + CoreArgParser parser(args); + parser.parse(); + + QVERIFY(!Settings::value(Settings::Core::PreventSleep).toBool()); +} + +void CoreArgParserTests::preventSleep_true() +{ + QStringList args = {"stub", "client", "--prevent-sleep", "true"}; + + CoreArgParser parser(args); + parser.parse(); + + QVERIFY(Settings::value(Settings::Core::PreventSleep).toBool()); +} + QTEST_MAIN(CoreArgParserTests) diff --git a/src/unittests/deskflow/CoreArgParserTests.h b/src/unittests/deskflow/CoreArgParserTests.h index ead093c01..a7064b1d0 100644 --- a/src/unittests/deskflow/CoreArgParserTests.h +++ b/src/unittests/deskflow/CoreArgParserTests.h @@ -28,6 +28,10 @@ private Q_SLOTS: void secure_0(); void secure_1(); void tlsCert(); + void preventSleep_true(); + void preventSleep_false(); + void preventSleep_1(); + void preventSleep_0(); private: inline static const QString m_settingsPath = QStringLiteral("tmp/test");