refactor: move ProcessMode to Settings
newKey core/processMode remove processmode from app config
This commit is contained in:
@ -112,6 +112,9 @@ QVariant Settings::defaultValue(const QString &key)
|
||||
if (key == Core::Port)
|
||||
return 24800;
|
||||
|
||||
if (key == Core::ProcessMode)
|
||||
return defaultProcessMode;
|
||||
|
||||
return QVariant();
|
||||
}
|
||||
|
||||
|
||||
@ -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
|
||||
};
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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;
|
||||
|
||||
@ -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");
|
||||
}
|
||||
|
||||
|
||||
@ -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;
|
||||
|
||||
|
||||
@ -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));
|
||||
|
||||
@ -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();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user