From 05f377e21b59ad9cb0e32de0bcb23da1c677ab38 Mon Sep 17 00:00:00 2001 From: sithlord48 Date: Fri, 22 Aug 2025 23:42:56 -0400 Subject: [PATCH] refactor: Handle Name option in CoreArgParser --- src/lib/deskflow/App.h | 3 --- src/lib/deskflow/ArgParser.cpp | 4 ---- src/lib/deskflow/ArgsBase.h | 3 --- src/lib/deskflow/ClientApp.cpp | 5 ++++- src/lib/deskflow/CoreArgParser.cpp | 7 ++++++- src/lib/deskflow/CoreArgs.h | 5 ++++- src/lib/deskflow/ServerApp.cpp | 9 +++++---- src/lib/deskflow/ServerApp.h | 1 + src/lib/gui/core/CoreProcess.cpp | 2 -- src/unittests/deskflow/ArgParserTests.cpp | 16 --------------- src/unittests/deskflow/ArgParserTests.h | 1 - src/unittests/deskflow/CoreArgParserTests.cpp | 20 +++++++++++++++++++ src/unittests/deskflow/CoreArgParserTests.h | 2 ++ 13 files changed, 42 insertions(+), 36 deletions(-) diff --git a/src/lib/deskflow/App.h b/src/lib/deskflow/App.h index b45bfbdf4..f9766abac 100644 --- a/src/lib/deskflow/App.h +++ b/src/lib/deskflow/App.h @@ -132,8 +132,6 @@ constexpr static auto s_helpGeneralArgs = // " -d, --debug filter out log messages with priority below level.\n" " level may be: FATAL, ERROR, WARNING, NOTE, INFO,\n" " DEBUG, DEBUG1, DEBUG2.\n" - " -n, --name use screen-name instead the hostname to identify\n" - " this screen in the configuration.\n" " -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" @@ -144,7 +142,6 @@ constexpr static auto s_helpVersionArgs = // " -h, --help display this help and exit.\n"; constexpr static auto s_helpCommonArgs = // - " [--name ]" " [--restart|--no-restart]" " [--debug ]"; diff --git a/src/lib/deskflow/ArgParser.cpp b/src/lib/deskflow/ArgParser.cpp index 73aa69b30..77ef83583 100644 --- a/src/lib/deskflow/ArgParser.cpp +++ b/src/lib/deskflow/ArgParser.cpp @@ -127,9 +127,6 @@ bool ArgParser::parseGenericArgs(int argc, const char *const *argv, int &i) cons argsBase().m_logFilter = argv[++i]; } else if (isArg(i, argc, argv, "-l", "--log", 1)) { argsBase().m_logFile = argv[++i]; - } else if (isArg(i, argc, argv, "-n", "--name", 1)) { - // save screen name - argsBase().m_name = argv[++i]; } else if (isArg(i, argc, argv, "-1", "--no-restart")) { // don't try to restart argsBase().m_restartable = false; @@ -320,7 +317,6 @@ std::string ArgParser::assembleCommand( void ArgParser::updateCommonArgs(const char *const *argv) const { - argsBase().m_name = QSysInfo::machineHostName().toStdString(); argsBase().m_pname = QFileInfo(argv[0]).fileName().toLocal8Bit().constData(); } diff --git a/src/lib/deskflow/ArgsBase.h b/src/lib/deskflow/ArgsBase.h index 9e4e5da32..52d872f2a 100644 --- a/src/lib/deskflow/ArgsBase.h +++ b/src/lib/deskflow/ArgsBase.h @@ -50,9 +50,6 @@ public: /// @brief Contains the X-Server display to use const char *m_display = nullptr; - /// @brief The name of the current computer - std::string m_name; - /// @brief Will cause the application to exit with OK code when set to true bool m_shouldExitOk = false; diff --git a/src/lib/deskflow/ClientApp.cpp b/src/lib/deskflow/ClientApp.cpp index f38278ca6..e01b5d76f 100644 --- a/src/lib/deskflow/ClientApp.cpp +++ b/src/lib/deskflow/ClientApp.cpp @@ -15,6 +15,7 @@ #include "client/Client.h" #include "common/Constants.h" #include "common/ExitCodes.h" +#include "common/Settings.h" #include "deskflow/ArgParser.h" #include "deskflow/ClientArgs.h" #include "deskflow/ProtocolTypes.h" @@ -319,7 +320,9 @@ bool ClientApp::startClient() try { if (m_clientScreen == nullptr) { clientScreen = openClientScreen(); - m_client = openClient(args().m_name, *m_serverAddress, clientScreen); + m_client = openClient( + Settings::value(Settings::Core::ScreenName).toString().toStdString(), *m_serverAddress, clientScreen + ); m_clientScreen = clientScreen; LOG_NOTE("started client"); } diff --git a/src/lib/deskflow/CoreArgParser.cpp b/src/lib/deskflow/CoreArgParser.cpp index b37df4cef..30b0887cd 100644 --- a/src/lib/deskflow/CoreArgParser.cpp +++ b/src/lib/deskflow/CoreArgParser.cpp @@ -17,12 +17,13 @@ const QString CoreArgParser::s_headerText = QStringLiteral("%1: %2\n").arg(s_app CoreArgParser::CoreArgParser(const QStringList &args) { + m_parser.setApplicationDescription(kAppDescription); m_parser.addPositionalArgument("coremode", "The mode to start in either: server or client", "coremode"); m_parser.addOptions(CoreArgs::options); m_parser.setSingleDashWordOptionMode(QCommandLineParser::ParseAsLongOptions); + m_parser.setOptionsAfterPositionalArgumentsMode(QCommandLineParser::ParseAsOptions); m_parser.parse(args); - m_parser.setApplicationDescription(kAppDescription); m_helpText = m_parser.helpText().replace("", s_appName); m_helpText.replace("[options] coremode", "coremode [options]"); @@ -56,6 +57,10 @@ void CoreArgParser::parse() if (m_parser.isSet(CoreArgs::portOption)) { Settings::setValue(Settings::Core::Port, m_parser.value(CoreArgs::portOption)); } + + if (m_parser.isSet(CoreArgs::nameOption)) { + Settings::setValue(Settings::Core::ScreenName, m_parser.value(CoreArgs::nameOption)); + } } [[noreturn]] void CoreArgParser::showHelpText() const diff --git a/src/lib/deskflow/CoreArgs.h b/src/lib/deskflow/CoreArgs.h index 8e1d96e01..741bf3f2b 100644 --- a/src/lib/deskflow/CoreArgs.h +++ b/src/lib/deskflow/CoreArgs.h @@ -26,5 +26,8 @@ struct CoreArgs ); inline static const auto portOption = QCommandLineOption({"p", "port"}, "Port to use in place of default port", "port"); - inline static const auto options = {helpOption, versionOption, configOption, interfaceOption, portOption}; + inline static const auto nameOption = + QCommandLineOption({"n", "name"}, "use screen-name instead the hostname to identify this screen", "screen-name"); + + inline static const auto options = {helpOption, versionOption, configOption, interfaceOption, portOption, nameOption}; }; diff --git a/src/lib/deskflow/ServerApp.cpp b/src/lib/deskflow/ServerApp.cpp index fef66f96c..0bb26cc09 100644 --- a/src/lib/deskflow/ServerApp.cpp +++ b/src/lib/deskflow/ServerApp.cpp @@ -71,6 +71,7 @@ using namespace deskflow::server; ServerApp::ServerApp(IEventQueue *events) : App(events, new deskflow::ServerArgs()) { + m_name = Settings::value(Settings::Core::ScreenName).toString().toStdString(); // do nothing } @@ -351,7 +352,7 @@ bool ServerApp::initServer() deskflow::Screen *serverScreen = nullptr; PrimaryClient *primaryClient = nullptr; try { - std::string name = args().m_config->getCanonicalName(args().m_name); + std::string name = args().m_config->getCanonicalName(m_name); serverScreen = openServerScreen(); primaryClient = openPrimaryClient(name, serverScreen); m_serverScreen = serverScreen; @@ -570,7 +571,7 @@ int ServerApp::mainLoop() // if configuration has no screens then add this system // as the default if (args().m_config->begin() == args().m_config->end()) { - args().m_config->addScreen(args().m_name); + args().m_config->addScreen(m_name); } // set the contact address, if provided, in the config. @@ -583,8 +584,8 @@ int ServerApp::mainLoop() } // canonicalize the primary screen name - if (std::string primaryName = args().m_config->getCanonicalName(args().m_name); primaryName.empty()) { - LOG_CRIT("unknown screen name `%s'", args().m_name.c_str()); + if (std::string primaryName = args().m_config->getCanonicalName(m_name); primaryName.empty()) { + LOG_CRIT("unknown screen name `%s'", m_name.c_str()); return s_exitFailed; } diff --git a/src/lib/deskflow/ServerApp.h b/src/lib/deskflow/ServerApp.h index f994150a3..31308bfa5 100644 --- a/src/lib/deskflow/ServerApp.h +++ b/src/lib/deskflow/ServerApp.h @@ -133,4 +133,5 @@ private: ClientListener *m_listener = nullptr; EventQueueTimer *m_timer = nullptr; NetworkAddress *m_deskflowAddress = nullptr; + std::string m_name; }; diff --git a/src/lib/gui/core/CoreProcess.cpp b/src/lib/gui/core/CoreProcess.cpp index 50f0d3682..63154644e 100644 --- a/src/lib/gui/core/CoreProcess.cpp +++ b/src/lib/gui/core/CoreProcess.cpp @@ -458,8 +458,6 @@ bool CoreProcess::addGenericArgs(QStringList &args) const { args << "--debug" << Settings::logLevelText(); - args << "--name" << Settings::value(Settings::Core::ScreenName).toString(); - if (Settings::value(Settings::Security::TlsEnabled).toBool()) { args << "--enable-crypto"; } diff --git a/src/unittests/deskflow/ArgParserTests.cpp b/src/unittests/deskflow/ArgParserTests.cpp index 1f2a5c060..fdf6ace6a 100644 --- a/src/unittests/deskflow/ArgParserTests.cpp +++ b/src/unittests/deskflow/ArgParserTests.cpp @@ -326,22 +326,6 @@ void ArgParserTests::generic_logFileWithSpace() QCOMPARE(i, 2); } -void ArgParserTests::generic_name() -{ - int i = 1; - const int argc = 3; - const char *kNameCmd[argc] = {"stub", "--name", "mock"}; - // Somehow cause a dump if not made here. - ArgParser parser(nullptr); - static deskflow::ArgsBase base; - - parser.setArgsBase(base); - parser.parseGenericArgs(argc, kNameCmd, i); - - QCOMPARE(base.m_name, "mock"); - 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 eddf3f550..5eace698b 100644 --- a/src/unittests/deskflow/ArgParserTests.h +++ b/src/unittests/deskflow/ArgParserTests.h @@ -36,7 +36,6 @@ private Q_SLOTS: void generic_logLevel(); void generic_logFile(); void generic_logFileWithSpace(); - void generic_name(); void generic_noRestart(); void generic_restart(); void generic_unknown(); diff --git a/src/unittests/deskflow/CoreArgParserTests.cpp b/src/unittests/deskflow/CoreArgParserTests.cpp index bdf9fe356..e1cad5db8 100644 --- a/src/unittests/deskflow/CoreArgParserTests.cpp +++ b/src/unittests/deskflow/CoreArgParserTests.cpp @@ -60,4 +60,24 @@ void CoreArgParserTests::portShort() QCOMPARE(Settings::value(Settings::Core::Port).toInt(), 18768); } +void CoreArgParserTests::nameLong() +{ + QStringList args = {"stub", "client", "--name", "FancyName"}; + + CoreArgParser parser(args); + parser.parse(); + + QCOMPARE(Settings::value(Settings::Core::ScreenName).toString(), "FancyName"); +} + +void CoreArgParserTests::nameShort() +{ + QStringList args = {"stub", "client", "-n", "ShortName"}; + + CoreArgParser parser(args); + parser.parse(); + + QCOMPARE(Settings::value(Settings::Core::ScreenName).toString(), "ShortName"); +} + QTEST_MAIN(CoreArgParserTests) diff --git a/src/unittests/deskflow/CoreArgParserTests.h b/src/unittests/deskflow/CoreArgParserTests.h index 071316a06..ca1b94f67 100644 --- a/src/unittests/deskflow/CoreArgParserTests.h +++ b/src/unittests/deskflow/CoreArgParserTests.h @@ -18,6 +18,8 @@ private Q_SLOTS: void interfaceShort(); void portLong(); void portShort(); + void nameLong(); + void nameShort(); private: inline static const QString m_settingsPath = QStringLiteral("tmp/test");