From 53b36801e1adb0311cda26f3988d2160c9c8bde3 Mon Sep 17 00:00:00 2001 From: sithlord48 Date: Sat, 23 Aug 2025 15:15:51 -0400 Subject: [PATCH] refactor: move Log option to coreArgs --- src/lib/deskflow/App.cpp | 19 ++++++++------- src/lib/deskflow/App.h | 1 - src/lib/deskflow/ArgParser.cpp | 9 +++---- src/lib/deskflow/ArgsBase.h | 3 --- src/lib/deskflow/CoreArgParser.cpp | 7 ++++++ src/lib/deskflow/CoreArgs.h | 6 +++-- src/unittests/deskflow/ArgParserTests.cpp | 24 ------------------- src/unittests/deskflow/ArgParserTests.h | 2 -- src/unittests/deskflow/CoreArgParserTests.cpp | 20 ++++++++++++++++ src/unittests/deskflow/CoreArgParserTests.h | 2 ++ 10 files changed, 47 insertions(+), 46 deletions(-) diff --git a/src/lib/deskflow/App.cpp b/src/lib/deskflow/App.cpp index 97cd58036..54a779cfc 100644 --- a/src/lib/deskflow/App.cpp +++ b/src/lib/deskflow/App.cpp @@ -123,19 +123,22 @@ int App::daemonMainLoop(int, const char **) void App::setupFileLogging() { - if (argsBase().m_logFile != nullptr) { - m_fileLog = new FileLogOutputter(argsBase().m_logFile); // NOSONAR - Adopted by `Log` - CLOG->insert(m_fileLog); - LOG_DEBUG1("logging to file (%s) enabled", argsBase().m_logFile); + if (Settings::value(Settings::Log::ToFile).toBool()) { + if (const auto file = Settings::value(Settings::Log::File).toString(); !file.isEmpty()) { + const auto logFile = qPrintable(file); + m_fileLog = new FileLogOutputter(logFile); // NOSONAR - Adopted by `Log` + CLOG->insert(m_fileLog); + LOG_DEBUG1("logging to file (%s) enabled", logFile); + } } } void App::loggingFilterWarning() const { - if ((CLOG->getFilter() > CLOG->getConsoleMaxLevel()) && (argsBase().m_logFile == nullptr)) { - LOG( - (CLOG_WARN "log messages above %s are NOT sent to console (use file logging)", - CLOG->getFilterName(CLOG->getConsoleMaxLevel())) + if ((CLOG->getFilter() > CLOG->getConsoleMaxLevel()) && (Settings::value(Settings::Log::ToFile).toBool())) { + LOG_WARN( + "log messages above %s are NOT sent to console (use file logging)", + CLOG->getFilterName(CLOG->getConsoleMaxLevel()) ); } } diff --git a/src/lib/deskflow/App.h b/src/lib/deskflow/App.h index 448542487..8a45dc7dd 100644 --- a/src/lib/deskflow/App.h +++ b/src/lib/deskflow/App.h @@ -131,7 +131,6 @@ private: constexpr static auto s_helpGeneralArgs = // " -1, --no-restart do not try to restart on failure.\n" "* --restart restart the server automatically if it fails.\n" - " -l --log write log messages to file.\n" " --enable-crypto enable TLS encryption.\n" " --tls-cert specify the path to the TLS certificate file.\n"; diff --git a/src/lib/deskflow/ArgParser.cpp b/src/lib/deskflow/ArgParser.cpp index c7568e696..65df9eaff 100644 --- a/src/lib/deskflow/ArgParser.cpp +++ b/src/lib/deskflow/ArgParser.cpp @@ -122,9 +122,7 @@ bool ArgParser::parsePlatformArgs(deskflow::ArgsBase &argsBase, const int &argc, bool ArgParser::parseGenericArgs(int argc, const char *const *argv, int &i) const { - if (isArg(i, argc, argv, "-l", "--log", 1)) { - argsBase().m_logFile = argv[++i]; - } else if (isArg(i, argc, argv, "-1", "--no-restart")) { + if (isArg(i, argc, argv, "-1", "--no-restart")) { // don't try to restart argsBase().m_restartable = false; } else if (isArg(i, argc, argv, nullptr, "--restart")) { @@ -157,9 +155,8 @@ bool ArgParser::parseGenericArgs(int argc, const char *const *argv, int &i) cons bool ArgParser::parseDeprecatedArgs(int argc, const char *const *argv, int &i) const { - static const std::vector deprecatedArgs = { - "--crypto-pass", "--res-w", "--res-h", "--prm-wc", "--prm-hc" - }; + static const std::vector deprecatedArgs = {"--crypto-pass", "--res-w", "--res-h", + "--prm-wc", "--prm-hc", "--log"}; for (auto &arg : deprecatedArgs) { if (isArg(i, argc, argv, nullptr, arg)) { diff --git a/src/lib/deskflow/ArgsBase.h b/src/lib/deskflow/ArgsBase.h index 1ee3763e0..70c2e4dba 100644 --- a/src/lib/deskflow/ArgsBase.h +++ b/src/lib/deskflow/ArgsBase.h @@ -41,9 +41,6 @@ public: /// @brief The filename of the running process const char *m_pname = nullptr; - /// @brief The full path to the logfile - const char *m_logFile = nullptr; - /// @brief Contains the X-Server display to use const char *m_display = nullptr; diff --git a/src/lib/deskflow/CoreArgParser.cpp b/src/lib/deskflow/CoreArgParser.cpp index ca23215eb..4fbc52d7f 100644 --- a/src/lib/deskflow/CoreArgParser.cpp +++ b/src/lib/deskflow/CoreArgParser.cpp @@ -65,6 +65,13 @@ void CoreArgParser::parse() if (m_parser.isSet(CoreArgs::logLevelOption)) { Settings::setValue(Settings::Log::Level, Settings::logLevelToInt(m_parser.value(CoreArgs::logLevelOption))); } + + if (m_parser.isSet(CoreArgs::logFileOption)) { + Settings::setValue(Settings::Log::File, m_parser.value(CoreArgs::logFileOption)); + Settings::setValue(Settings::Log::ToFile, true); + } else { + Settings::setValue(Settings::Log::ToFile, false); + } } [[noreturn]] void CoreArgParser::showHelpText() const diff --git a/src/lib/deskflow/CoreArgs.h b/src/lib/deskflow/CoreArgs.h index d037bf302..306e76a00 100644 --- a/src/lib/deskflow/CoreArgs.h +++ b/src/lib/deskflow/CoreArgs.h @@ -36,6 +36,8 @@ struct CoreArgs "level" ); - inline static const auto options = {helpOption, versionOption, configOption, interfaceOption, - portOption, nameOption, logLevelOption}; + inline static const auto logFileOption = QCommandLineOption({"l", "log"}, "Write messages to file", "file"); + + inline static const auto options = {helpOption, versionOption, configOption, interfaceOption, + portOption, nameOption, logLevelOption, logFileOption}; }; diff --git a/src/unittests/deskflow/ArgParserTests.cpp b/src/unittests/deskflow/ArgParserTests.cpp index 96c8bce46..cd455967f 100644 --- a/src/unittests/deskflow/ArgParserTests.cpp +++ b/src/unittests/deskflow/ArgParserTests.cpp @@ -290,30 +290,6 @@ void ArgParserTests::deprecatedArg_crypoPass_false() QCOMPARE(i, 1); } -void ArgParserTests::generic_logFile() -{ - int i = 1; - const int argc = 3; - const char *kLogFileCmd[argc] = {"stub", "--log", "mock_filename"}; - - m_parser.parseGenericArgs(argc, kLogFileCmd, i); - - QCOMPARE(m_parser.argsBase().m_logFile, "mock_filename"); - QCOMPARE(i, 2); -} - -void ArgParserTests::generic_logFileWithSpace() -{ - int i = 1; - const int argc = 3; - const char *kLogFileCmdWithSpace[argc] = {"stub", "--log", "mo ck_filename"}; - - m_parser.parseGenericArgs(argc, kLogFileCmdWithSpace, i); - - QCOMPARE(m_parser.argsBase().m_logFile, "mo ck_filename"); - QCOMPARE(i, 2); -} - void ArgParserTests::generic_noRestart() { int i = 1; diff --git a/src/unittests/deskflow/ArgParserTests.h b/src/unittests/deskflow/ArgParserTests.h index 310513ba6..6ac8d1ba1 100644 --- a/src/unittests/deskflow/ArgParserTests.h +++ b/src/unittests/deskflow/ArgParserTests.h @@ -33,8 +33,6 @@ private Q_SLOTS: void client_badArgs(); void deprecatedArg_crypoPass_true(); void deprecatedArg_crypoPass_false(); - void generic_logFile(); - void generic_logFileWithSpace(); void generic_noRestart(); void generic_restart(); void generic_unknown(); diff --git a/src/unittests/deskflow/CoreArgParserTests.cpp b/src/unittests/deskflow/CoreArgParserTests.cpp index 69772d337..31936f822 100644 --- a/src/unittests/deskflow/CoreArgParserTests.cpp +++ b/src/unittests/deskflow/CoreArgParserTests.cpp @@ -90,4 +90,24 @@ void CoreArgParserTests::logLevel() QCOMPARE(Settings::value(Settings::Log::Level).toInt(), 6); } +void CoreArgParserTests::logFile() +{ + QStringList args = {"stub", "client", "--log", "mock_filename"}; + + CoreArgParser parser(args); + parser.parse(); + + QCOMPARE(Settings::value(Settings::Log::File).toString(), "mock_filename"); +} + +void CoreArgParserTests::logFileWithSpace() +{ + QStringList args = {"stub", "client", "--log", "mock filename"}; + + CoreArgParser parser(args); + parser.parse(); + + QCOMPARE(Settings::value(Settings::Log::File).toString(), "mock filename"); +} + QTEST_MAIN(CoreArgParserTests) diff --git a/src/unittests/deskflow/CoreArgParserTests.h b/src/unittests/deskflow/CoreArgParserTests.h index dbd4f6200..421ce5b68 100644 --- a/src/unittests/deskflow/CoreArgParserTests.h +++ b/src/unittests/deskflow/CoreArgParserTests.h @@ -21,6 +21,8 @@ private Q_SLOTS: void nameLong(); void nameShort(); void logLevel(); + void logFile(); + void logFileWithSpace(); private: inline static const QString m_settingsPath = QStringLiteral("tmp/test");