Deskflow 1.26.0.0
Keyboard and mouse sharing utility
Loading...
Searching...
No Matches
Settings.h
Go to the documentation of this file.
1/*
2 * Deskflow -- mouse and keyboard sharing utility
3 * SPDX-FileCopyrightText: (C) 2025 - 2026 Chris Rizzitello <sithlord48@gmail.com>
4 * SPDX-FileCopyrightText: (C) 2016 - 2025 Symless Ltd.
5 * SPDX-License-Identifier: GPL-2.0-only WITH LicenseRef-OpenSSL-Exception
6 */
7
8#pragma once
9
10#include <QSettings>
11
12#include <QDir>
13
14#include "common/Constants.h"
16
17class Settings : public QObject
18{
19 Q_OBJECT
20public:
21#if defined(Q_OS_WIN)
22 inline const static auto UserDir = QStringLiteral("%1/AppData/Roaming/%2").arg(QDir::homePath(), kAppName);
23 inline const static auto SystemDir = QStringLiteral("%1ProgramData/%2").arg(QDir::rootPath(), kAppName);
24#elif defined(Q_OS_MACOS)
25 inline const static auto UserDir = QStringLiteral("%1/Library/%2").arg(QDir::homePath(), kAppName);
26 inline const static auto SystemDir = QStringLiteral("/Library/%1").arg(kAppName);
27#else
28 inline const static auto UserDir = QStringLiteral("%1/.config/%2").arg(QDir::homePath(), kAppName);
29 inline const static auto SystemDir = QStringLiteral("/etc/%1").arg(kAppName);
30#endif
31
32 inline const static auto UserSettingFile = QStringLiteral("%1/%2.conf").arg(UserDir, kAppName);
33 inline const static auto SystemSettingFile = QStringLiteral("%1/%2.conf").arg(SystemDir, kAppName);
34
35 struct Client
36 {
37 inline static const auto InvertYScroll = QStringLiteral("client/invertYScroll");
38 inline static const auto InvertXScroll = QStringLiteral("client/invertXScroll");
39 inline static const auto YScrollScale = QStringLiteral("client/yScrollScale");
40 inline static const auto XScrollScale = QStringLiteral("client/xScrollScale");
41 inline static const auto LanguageSync = QStringLiteral("client/languageSync");
42 inline static const auto RemoteHost = QStringLiteral("client/remoteHost");
43 inline static const auto XdpRestoreToken = QStringLiteral("client/xdpRestoreToken");
44 };
45 struct Core
46 {
47 inline static const auto CoreMode = QStringLiteral("core/coreMode");
48 inline static const auto Interface = QStringLiteral("core/interface");
49 inline static const auto LastVersion = QStringLiteral("core/lastVersion");
50 inline static const auto Port = QStringLiteral("core/port");
51 inline static const auto PreventSleep = QStringLiteral("core/preventSleep");
52 inline static const auto ProcessMode = QStringLiteral("core/processMode");
53 inline static const auto ComputerName = QStringLiteral("core/computerName");
54 inline static const auto Display = QStringLiteral("core/display");
55 inline static const auto UseHooks = QStringLiteral("core/useHooks");
56 inline static const auto Language = QStringLiteral("core/language");
57 inline static const auto UseWlClipboard = QStringLiteral("core/wlClipboard");
58
59 // TODO: REMOVE In 2.0
60 inline static const auto ScreenName = QStringLiteral("core/screenName"); // Replaced By ComputerName
61 };
62 struct Daemon
63 {
64 inline static const auto Command = QStringLiteral("daemon/command");
65 inline static const auto Elevate = QStringLiteral("daemon/elevate");
66 inline static const auto LogFile = QStringLiteral("daemon/logFile");
67 inline static const auto LogLevel = QStringLiteral("daemon/logLevel");
68 };
69 struct Gui
70 {
71 inline static const auto Autohide = QStringLiteral("gui/autoHide");
72 inline static const auto AutoStartCore = QStringLiteral("gui/startCoreWithGui");
73 inline static const auto AutoUpdateCheck = QStringLiteral("gui/enableUpdateCheck");
74 inline static const auto UpdateCheckUrl = QStringLiteral("gui/updateCheckUrl");
75 inline static const auto CloseReminder = QStringLiteral("gui/closeReminder");
76 inline static const auto CloseToTray = QStringLiteral("gui/closeToTray");
77 inline static const auto LogExpanded = QStringLiteral("gui/logExpanded");
78 inline static const auto SymbolicTrayIcon = QStringLiteral("gui/symbolicTrayIcon");
79 inline static const auto WindowGeometry = QStringLiteral("gui/windowGeometry");
80 inline static const auto ShowGenericClientFailureDialog = QStringLiteral("gui/showGenericClientFailureDialog");
81 inline static const auto ShownFirstConnectedMessage = QStringLiteral("gui/shownFirstConnectedMessage");
82 inline static const auto ShownServerFirstStartMessage = QStringLiteral("gui/shownServerFirstStartMessage");
83 inline static const auto ShowVersionInTitle = QStringLiteral("gui/showVersionInTitle");
84 };
85 struct Log
86 {
87 inline static const auto File = QStringLiteral("log/file");
88 inline static const auto Level = QStringLiteral("log/level");
89 inline static const auto ToFile = QStringLiteral("log/toFile");
90 inline static const auto GuiDebug = QStringLiteral("log/guiDebug");
91 };
92 struct Security
93 {
94 inline static const auto CheckPeers = QStringLiteral("security/checkPeerFingerprints");
95 inline static const auto Certificate = QStringLiteral("security/certificate");
96 inline static const auto KeySize = QStringLiteral("security/keySize");
97 inline static const auto TlsEnabled = QStringLiteral("security/tlsEnabled");
98 };
99 struct Server
100 {
101 inline static const auto ExternalConfig = QStringLiteral("server/externalConfig");
102 inline static const auto ExternalConfigFile = QStringLiteral("server/externalConfigFile");
103 };
104
105 // Enums types used in settings
106 // The use of enum classes is not use for these
107 // enum classes are more specific when used with QVariant
108 // This leads longer function calls in code
109 // and longer more cryptic output in the settings file
110 // The using of standard enum will just write ints
111 // and we can read / write them as if they were ints
117 Q_ENUM(ProcessMode)
118
125 Q_ENUM(CoreMode)
126
127 static Settings *instance();
128 static void setSettingsFile(const QString &settingsFile = QString());
129 static void setStateFile(const QString &stateFile = QString());
130 static void setValue(const QString &key = QString(), const QVariant &value = QVariant());
131 static QVariant value(const QString &key = QString());
132 static void restoreDefaultSettings();
133 static QVariant defaultValue(const QString &key);
134 static bool isWritable();
135 static bool isPortableMode();
136 static QString settingsFile();
137 static QString settingsPath();
138 static QString tlsDir();
139 static QString tlsTrustedServersDb();
140 static QString tlsTrustedClientsDb();
141 static QString logLevelText();
142 static QSettingsProxy &proxy();
143 static void save(bool emitSaving = true);
144 static QStringList validKeys();
145 static int logLevelToInt(const QString &level);
146 static QString portableSettingsFile();
147
148Q_SIGNALS:
149 void settingsChanged(const QString key);
151
152private:
153 explicit Settings(QObject *parent = nullptr);
154 Settings *operator=(Settings &other) = delete;
155 Settings(const Settings &other) = delete;
156 ~Settings() override = default;
157
163 void upgradeSettings();
164 void cleanSettings();
165 void cleanStateSettings();
166
170 void setupComputerName();
171
177 static QString cleanComputerName(const QString &name);
178
179 QSettings *m_settings = nullptr;
180 QSettings *m_stateSettings = nullptr;
181 std::shared_ptr<QSettingsProxy> m_settingsProxy;
182
183 // clang-format off
184 inline static const QStringList m_logLevels = {
185 QStringLiteral("FATAL")
186 , QStringLiteral("ERROR")
187 , QStringLiteral("WARNING")
188 , QStringLiteral("NOTE")
189 , QStringLiteral("INFO")
190 , QStringLiteral("DEBUG")
191 , QStringLiteral("DEBUG1")
192 , QStringLiteral("DEBUG2")
193 };
194
195 inline static const QStringList m_validKeys = {
241 };
242
243 // When checking the default values this list contains the ones that default to false.
244 inline static const QStringList m_defaultFalseValues = {
257 };
258
259 // When checking the default values this list contains the ones that default to true.
260 inline static const QStringList m_defaultTrueValues = {
270 };
271
272 // Settings saved in our State file
273 inline static const QStringList m_stateKeys = { Settings::Gui::WindowGeometry };
274
275 // Contains settings keys to be upgraded.
276 inline static const QMap<QString, QString> m_upgradedMap = {
277 /* OLD KEY NEW KEY */
278 {QStringLiteral("core/screenName"), Settings::Core::ComputerName}
279 };
280 // clang-format on
281};
static const struct sockaddr FAR * name
Definition ArchNetworkWinsock.cpp:28
static int level
Definition ArchNetworkWinsock.cpp:31
int key
Definition KeySequence.cpp:15
Definition QSettingsProxy.h:14
Definition Settings.h:18
static bool isPortableMode()
Definition Settings.cpp:241
static const auto SystemSettingFile
Definition Settings.h:33
static int logLevelToInt(const QString &level)
Definition Settings.cpp:157
static const auto UserDir
Definition Settings.h:28
static const auto UserSettingFile
Definition Settings.h:32
static void setValue(const QString &key=QString(), const QVariant &value=QVariant())
Definition Settings.cpp:277
static void setSettingsFile(const QString &settingsFile=QString())
Definition Settings.cpp:23
static QVariant value(const QString &key=QString())
Definition Settings.cpp:298
static QVariant defaultValue(const QString &key)
Definition Settings.cpp:164
static QString tlsTrustedClientsDb()
Definition Settings.cpp:272
static QString tlsDir()
Definition Settings.cpp:262
static QString portableSettingsFile()
Definition Settings.cpp:312
static void setStateFile(const QString &stateFile=QString())
Definition Settings.cpp:43
static QSettingsProxy & proxy()
Definition Settings.cpp:218
static QString tlsTrustedServersDb()
Definition Settings.cpp:267
static QStringList validKeys()
Definition Settings.cpp:231
static QString settingsFile()
Definition Settings.cpp:247
CoreMode
Definition Settings.h:120
@ None
Definition Settings.h:121
static void restoreDefaultSettings()
Definition Settings.cpp:305
ProcessMode
Definition Settings.h:113
@ Service
Definition Settings.h:114
@ Desktop
Definition Settings.h:115
void serverSettingsChanged()
static bool isWritable()
Definition Settings.cpp:236
static const auto SystemDir
Definition Settings.h:29
static Settings * instance()
Definition Settings.cpp:17
static void save(bool emitSaving=true)
Definition Settings.cpp:223
static QString settingsPath()
Definition Settings.cpp:252
static QString logLevelText()
Definition Settings.cpp:213
void settingsChanged(const QString key)
Definition Settings.h:36
static const auto InvertXScroll
Definition Settings.h:38
static const auto XScrollScale
Definition Settings.h:40
static const auto LanguageSync
Definition Settings.h:41
static const auto YScrollScale
Definition Settings.h:39
static const auto RemoteHost
Definition Settings.h:42
static const auto XdpRestoreToken
Definition Settings.h:43
static const auto InvertYScroll
Definition Settings.h:37
Definition Settings.h:46
static const auto ComputerName
Definition Settings.h:53
static const auto LastVersion
Definition Settings.h:49
static const auto Display
Definition Settings.h:54
static const auto Interface
Definition Settings.h:48
static const auto PreventSleep
Definition Settings.h:51
static const auto UseHooks
Definition Settings.h:55
static const auto Language
Definition Settings.h:56
static const auto CoreMode
Definition Settings.h:47
static const auto Port
Definition Settings.h:50
static const auto UseWlClipboard
Definition Settings.h:57
static const auto ProcessMode
Definition Settings.h:52
static const auto ScreenName
Definition Settings.h:60
Definition Settings.h:63
static const auto Elevate
Definition Settings.h:65
static const auto LogFile
Definition Settings.h:66
static const auto Command
Definition Settings.h:64
static const auto LogLevel
Definition Settings.h:67
Definition Settings.h:70
static const auto Autohide
Definition Settings.h:71
static const auto SymbolicTrayIcon
Definition Settings.h:78
static const auto WindowGeometry
Definition Settings.h:79
static const auto AutoUpdateCheck
Definition Settings.h:73
static const auto ShowGenericClientFailureDialog
Definition Settings.h:80
static const auto CloseReminder
Definition Settings.h:75
static const auto ShownFirstConnectedMessage
Definition Settings.h:81
static const auto AutoStartCore
Definition Settings.h:72
static const auto UpdateCheckUrl
Definition Settings.h:74
static const auto ShowVersionInTitle
Definition Settings.h:83
static const auto CloseToTray
Definition Settings.h:76
static const auto ShownServerFirstStartMessage
Definition Settings.h:82
static const auto LogExpanded
Definition Settings.h:77
Definition Settings.h:86
static const auto ToFile
Definition Settings.h:89
static const auto GuiDebug
Definition Settings.h:90
static const auto File
Definition Settings.h:87
static const auto Level
Definition Settings.h:88
Definition Settings.h:93
static const auto CheckPeers
Definition Settings.h:94
static const auto Certificate
Definition Settings.h:95
static const auto KeySize
Definition Settings.h:96
static const auto TlsEnabled
Definition Settings.h:97
Definition Settings.h:100
static const auto ExternalConfigFile
Definition Settings.h:102
static const auto ExternalConfig
Definition Settings.h:101