refactor: move ProcessMode to Settings

newKey core/processMode
remove processmode from app config
This commit is contained in:
sithlord48
2025-03-08 23:14:26 -05:00
committed by Nick Bolton
parent d01c07cab8
commit 5fa70d0d0a
9 changed files with 61 additions and 54 deletions

View File

@ -112,6 +112,9 @@ QVariant Settings::defaultValue(const QString &key)
if (key == Core::Port)
return 24800;
if (key == Core::ProcessMode)
return defaultProcessMode;
return QVariant();
}

View File

@ -42,6 +42,7 @@ public:
inline static const auto LastVersion = QStringLiteral("core/lastVersion");
inline static const auto Port = QStringLiteral("core/port");
inline static const auto PreventSleep = QStringLiteral("core/preventSleep");
inline static const auto ProcessMode = QStringLiteral("core/processMode");
inline static const auto Scope = QStringLiteral("core/loadFromSystemScope");
inline static const auto ScreenName = QStringLiteral("core/screenName");
inline static const auto StartedBefore = QStringLiteral("core/startedBefore");
@ -76,6 +77,20 @@ public:
inline static const auto ExternalConfigFile = QStringLiteral("server/externalConfigFile");
};
// Enums types used in settings
// The use of enum classes is not use for these
// enum classes are more specific when used with QVariant
// This leads longer function calls in code
// and longer more cryptic output in the settings file
// The using of standard enum will just write ints
// and we can read / write them as if they were ints
enum ProcessMode
{
Service,
Desktop
};
Q_ENUM(ProcessMode)
static Settings *instance();
static void setSettingFile(const QString &settingsFile = QString());
static void setValue(const QString &key = QString(), const QVariant &value = QVariant());
@ -105,6 +120,7 @@ private:
QSettings *m_settings = nullptr;
QString m_portableSettingsFile = QStringLiteral("%1.conf").arg(kAppName);
// clang-format off
inline static const QStringList m_logLevels = {
QStringLiteral("INFO")
@ -122,6 +138,7 @@ private:
, Core::LastVersion
, Core::Port
, Core::PreventSleep
, Core::ProcessMode
, Core::Scope
, Core::ScreenName
, Core::StartedBefore
@ -144,4 +161,10 @@ private:
, Server::ExternalConfigFile
};
// clang-format on
#ifdef Q_OS_WIN
inline static const auto defaultProcessMode = Settings::ProcessMode::Service;
#else
inline static const auto defaultProcessMode = Settings::ProcessMode::Desktop;
#endif
};

View File

@ -306,11 +306,6 @@ IConfigScopes &AppConfig::scopes() const
return m_Scopes;
}
ProcessMode AppConfig::processMode() const
{
return m_EnableService ? ProcessMode::kService : ProcessMode::kDesktop;
}
ElevateMode AppConfig::elevateMode() const
{
return m_ElevateMode;

View File

@ -26,12 +26,6 @@ namespace deskflow::gui {
const ElevateMode kDefaultElevateMode = ElevateMode::kAutomatic;
#if defined(Q_OS_WIN)
const ProcessMode kDefaultProcessMode = ProcessMode::kService;
#else
const ProcessMode kDefaultProcessMode = ProcessMode::kDesktop;
#endif // Q_OS_WIN
} // namespace deskflow::gui
/**
@ -44,7 +38,6 @@ const ProcessMode kDefaultProcessMode = ProcessMode::kDesktop;
*/
class AppConfig : public QObject, public deskflow::gui::IAppConfig
{
using ProcessMode = deskflow::gui::ProcessMode;
using IConfigScopes = deskflow::gui::IConfigScopes;
Q_OBJECT
@ -122,7 +115,6 @@ public:
//
IConfigScopes &scopes() const override;
ProcessMode processMode() const override;
ElevateMode elevateMode() const override;
bool isActiveScopeWritable() const override;
bool isActiveScopeSystem() const override;
@ -212,7 +204,7 @@ private:
bool m_ServerGroupChecked = false;
bool m_UseInternalConfig = false;
bool m_ClientGroupChecked = false;
bool m_EnableService = deskflow::gui::kDefaultProcessMode == ProcessMode::kService;
bool m_EnableService = false;
bool m_LoadFromSystemScope = false;
deskflow::gui::IConfigScopes &m_Scopes;

View File

@ -14,12 +14,6 @@
namespace deskflow::gui {
enum class ProcessMode
{
kService,
kDesktop
};
class IAppConfig
{
using IConfigScopes = deskflow::gui::IConfigScopes;
@ -32,7 +26,6 @@ public:
//
virtual IConfigScopes &scopes() const = 0;
virtual ProcessMode processMode() const = 0;
virtual ElevateMode elevateMode() const = 0;
virtual bool enableService() const = 0;
virtual bool isActiveScopeSystem() const = 0;

View File

@ -36,14 +36,12 @@ const auto kLineSplitRegex = QRegularExpression("\r|\n|\r\n");
// free functions
//
QString processModeToString(ProcessMode mode)
QString processModeToString(Settings::ProcessMode mode)
{
using enum ProcessMode;
switch (mode) {
case kDesktop:
case Settings::ProcessMode::Desktop:
return "desktop";
case kService:
case Settings::ProcessMode::Service:
return "service";
default:
qFatal("invalid process mode");
@ -239,7 +237,8 @@ void CoreProcess::onProcessFinished(int exitCode, QProcess::ExitStatus)
void CoreProcess::applyLogLevel()
{
if (m_appConfig.processMode() == ProcessMode::kService) {
const auto processMode = Settings::value(Settings::Core::ProcessMode).value<Settings::ProcessMode>();
if (processMode == ProcessMode::Service) {
qDebug() << "setting daemon log level:" << Settings::logLevelText();
if (!m_daemonIpcClient->sendLogLevel(Settings::logLevelText())) {
qCritical() << "failed to set daemon ipc log level";
@ -349,9 +348,11 @@ void CoreProcess::start(std::optional<ProcessMode> processModeOption)
{
QMutexLocker locker(&m_processMutex);
const auto processMode = processModeOption.value_or(m_appConfig.processMode());
const auto currentMode = Settings::value(Settings::Core::ProcessMode).value<ProcessMode>();
const auto processMode = processModeOption.value_or(currentMode);
qInfo("starting core %s process (%s mode)", qPrintable(modeString()), qPrintable(processModeToString(processMode)));
qInfo().noquote(
) << QString("starting core %1 process (%2 mode)").arg(modeString(), processModeToString(processMode));
if (m_processState == ProcessState::Started) {
qCritical("core process already started");
@ -372,7 +373,7 @@ void CoreProcess::start(std::optional<ProcessMode> processModeOption)
setConnectionState(ConnectionState::Connecting);
if (processMode == ProcessMode::kDesktop) {
if (processMode == ProcessMode::Desktop) {
m_pDeps->process().create();
}
@ -393,9 +394,9 @@ void CoreProcess::start(std::optional<ProcessMode> processModeOption)
if (Settings::value(Settings::Log::ToFile).toBool())
qInfo().noquote() << "log file:" << Settings::value(Settings::Log::File).toString();
if (processMode == ProcessMode::kDesktop) {
if (processMode == ProcessMode::Desktop) {
startForegroundProcess(app, args);
} else if (processMode == ProcessMode::kService) {
} else if (processMode == ProcessMode::Service) {
startProcessFromDaemon(app, args);
}
@ -406,7 +407,8 @@ void CoreProcess::stop(std::optional<ProcessMode> processModeOption)
{
QMutexLocker locker(&m_processMutex);
const auto processMode = processModeOption.value_or(m_appConfig.processMode());
const auto currentMode = Settings::value(Settings::Core::ProcessMode).value<ProcessMode>();
const auto processMode = processModeOption.value_or(currentMode);
qInfo("stopping core process (%s mode)", qPrintable(processModeToString(processMode)));
@ -416,9 +418,9 @@ void CoreProcess::stop(std::optional<ProcessMode> processModeOption)
} else if (m_processState != ProcessState::Stopped) {
setProcessState(ProcessState::Stopping);
if (processMode == ProcessMode::kService) {
if (processMode == ProcessMode::Service) {
stopProcessFromDaemon();
} else if (processMode == ProcessMode::kDesktop) {
} else if (processMode == ProcessMode::Desktop) {
stopForegroundProcess();
}
@ -431,19 +433,17 @@ void CoreProcess::stop(std::optional<ProcessMode> processModeOption)
void CoreProcess::restart()
{
using enum ProcessMode;
qDebug("restarting core process");
const auto processMode = m_appConfig.processMode();
const auto processMode = Settings::value(Settings::Core::ProcessMode).value<ProcessMode>();
if (m_lastProcessMode != processMode) {
if (processMode == kDesktop) {
if (processMode == ProcessMode::Desktop) {
qDebug("process mode changed to desktop, stopping service process");
stop(kService);
} else if (processMode == kService) {
stop(ProcessMode::Service);
} else if (processMode == ProcessMode::Service) {
qDebug("process mode changed to service, stopping desktop process");
stop(kDesktop);
stop(ProcessMode::Desktop);
} else {
qFatal("invalid process mode");
}
@ -461,7 +461,7 @@ void CoreProcess::cleanup()
{
qInfo("cleaning up core process");
const auto isDesktop = m_appConfig.processMode() == ProcessMode::kDesktop;
const auto isDesktop = Settings::value(Settings::Core::ProcessMode).value<ProcessMode>() == ProcessMode::Desktop;
const auto isRunning = m_processState == ProcessState::Started;
if (isDesktop && isRunning) {
stop();
@ -475,7 +475,7 @@ bool CoreProcess::addGenericArgs(QStringList &args, const ProcessMode processMod
args << "--name" << Settings::value(Settings::Core::ScreenName).toString();
if (processMode != ProcessMode::kDesktop) {
if (processMode != ProcessMode::Desktop) {
#if defined(Q_OS_WIN)
// tell the client/server to shut down when a ms windows desk
// is switched; this is because we may need to elevate or not
@ -753,12 +753,13 @@ void CoreProcess::persistLogDir()
void CoreProcess::clearSettings()
{
if (m_appConfig.processMode() == ProcessMode::kDesktop) {
const auto processMode = Settings::value(Settings::Core::ProcessMode).value<ProcessMode>();
if (processMode == ProcessMode::Desktop) {
qDebug("no core settings to clear in desktop mode");
return;
}
if (m_appConfig.processMode() != ProcessMode::kService) {
if (processMode != ProcessMode::Service) {
qFatal("invalid process mode");
}

View File

@ -6,6 +6,7 @@
#pragma once
#include "common/Settings.h"
#include "gui/FileTail.h"
#include "gui/config/IAppConfig.h"
#include "gui/config/IServerConfig.h"
@ -28,6 +29,7 @@ class DaemonIpcClient;
class CoreProcess : public QObject
{
using ProcessMode = Settings::ProcessMode;
using IServerConfig = deskflow::gui::IServerConfig;
using QProcessProxy = deskflow::gui::proxy::QProcessProxy;

View File

@ -14,7 +14,6 @@
class AppConfigMock : public deskflow::gui::IAppConfig
{
using ProcessMode = deskflow::gui::ProcessMode;
public:
AppConfigMock()
@ -26,7 +25,6 @@ public:
//
MOCK_METHOD(deskflow::gui::IConfigScopes &, scopes, (), (const, override));
MOCK_METHOD(ProcessMode, processMode, (), (const, override));
MOCK_METHOD(ElevateMode, elevateMode, (), (const, override));
MOCK_METHOD(bool, enableService, (), (const, override));
MOCK_METHOD(bool, isActiveScopeSystem, (), (const, override));

View File

@ -71,7 +71,7 @@ public:
{
Settings::setValue(Settings::Server::ExternalConfig, true);
Settings::setValue(Settings::Server::ExternalConfigFile, m_configFile);
ON_CALL(m_appConfig, processMode()).WillByDefault(Return(ProcessMode::kDesktop));
Settings::setValue(Settings::Core::ProcessMode, Settings::ProcessMode::Desktop);
}
NiceMock<AppConfigMock> m_appConfig;
@ -91,7 +91,7 @@ TEST_F(CoreProcessTests, start_serverDesktop_callsProcessStart)
EXPECT_CALL(m_pDeps->m_process, start(_, _)).Times(1);
m_coreProcess.start(ProcessMode::kDesktop);
m_coreProcess.start(Settings::ProcessMode::Desktop);
}
TEST_F(CoreProcessTests, start_clientDesktop_callsProcessStart)
@ -101,7 +101,7 @@ TEST_F(CoreProcessTests, start_clientDesktop_callsProcessStart)
EXPECT_CALL(m_pDeps->m_process, start(_, _)).Times(1);
m_coreProcess.start(ProcessMode::kDesktop);
m_coreProcess.start(Settings::ProcessMode::Desktop);
}
TEST_F(CoreProcessTests, stop_serverDesktop_callsProcessClose)
@ -111,7 +111,7 @@ TEST_F(CoreProcessTests, stop_serverDesktop_callsProcessClose)
EXPECT_CALL(m_pDeps->m_process, close()).Times(1);
m_coreProcess.stop(ProcessMode::kDesktop);
m_coreProcess.stop(Settings::ProcessMode::Desktop);
}
TEST_F(CoreProcessTests, stop_clientDesktop_callsProcessClose)
@ -122,12 +122,12 @@ TEST_F(CoreProcessTests, stop_clientDesktop_callsProcessClose)
EXPECT_CALL(m_pDeps->m_process, close()).Times(1);
m_coreProcess.stop(ProcessMode::kDesktop);
m_coreProcess.stop(Settings::ProcessMode::Desktop);
}
TEST_F(CoreProcessTests, restart_serverDesktop_callsProcessStart)
{
ON_CALL(m_appConfig, processMode()).WillByDefault(Return(ProcessMode::kDesktop));
Settings::setValue(Settings::Core::ProcessMode, Settings::ProcessMode::Desktop);
m_coreProcess.setMode(CoreProcess::Mode::Server);
m_coreProcess.start();