14#include "common/Constants.h"
18class QFileSystemWatcher;
19class Settings :
public QObject
24 inline const static auto UserDir = QStringLiteral(
"%1/AppData/Roaming/%2").arg(QDir::homePath(), kAppName);
25 inline const static auto SystemDir = QStringLiteral(
"%1ProgramData/%2").arg(QDir::rootPath(), kAppName);
26#elif defined(Q_OS_MACOS)
27 inline const static auto UserDir = QStringLiteral(
"%1/Library/%2").arg(QDir::homePath(), kAppName);
28 inline const static auto SystemDir = QStringLiteral(
"/Library/%1").arg(kAppName);
30 inline const static auto UserDir = QStringLiteral(
"%1/.config/%2").arg(QDir::homePath(), kAppName);
31 inline const static auto SystemDir = QStringLiteral(
"/etc/%1").arg(kAppName);
40 inline static const auto InvertYScroll = QStringLiteral(
"client/invertYScroll");
41 inline static const auto InvertXScroll = QStringLiteral(
"client/invertXScroll");
42 inline static const auto YScrollScale = QStringLiteral(
"client/yScrollScale");
43 inline static const auto XScrollScale = QStringLiteral(
"client/xScrollScale");
44 inline static const auto LanguageSync = QStringLiteral(
"client/languageSync");
45 inline static const auto RemoteHost = QStringLiteral(
"client/remoteHost");
46 inline static const auto XdpRestoreToken = QStringLiteral(
"client/xdpRestoreToken");
50 inline static const auto CoreMode = QStringLiteral(
"core/coreMode");
51 inline static const auto Interface = QStringLiteral(
"core/interface");
52 inline static const auto LastVersion = QStringLiteral(
"core/lastVersion");
53 inline static const auto Port = QStringLiteral(
"core/port");
54 inline static const auto PreventSleep = QStringLiteral(
"core/preventSleep");
55 inline static const auto ProcessMode = QStringLiteral(
"core/processMode");
56 inline static const auto ComputerName = QStringLiteral(
"core/computerName");
57 inline static const auto Display = QStringLiteral(
"core/display");
58 inline static const auto UseHooks = QStringLiteral(
"core/useHooks");
59 inline static const auto Language = QStringLiteral(
"core/language");
66 inline static const auto ScreenName = QStringLiteral(
"core/screenName");
70 inline static const auto ConfigFile = QStringLiteral(
"daemon/configFile");
71 inline static const auto Elevate = QStringLiteral(
"daemon/elevate");
72 inline static const auto LogFile = QStringLiteral(
"daemon/logFile");
73 inline static const auto LogLevel = QStringLiteral(
"daemon/logLevel");
77 inline static const auto Autohide = QStringLiteral(
"gui/autoHide");
78 inline static const auto AutoStartCore = QStringLiteral(
"gui/startCoreWithGui");
79 inline static const auto AutoUpdateCheck = QStringLiteral(
"gui/enableUpdateCheck");
80 inline static const auto UpdateCheckUrl = QStringLiteral(
"gui/updateCheckUrl");
81 inline static const auto CloseReminder = QStringLiteral(
"gui/closeReminder");
82 inline static const auto CloseToTray = QStringLiteral(
"gui/closeToTray");
83 inline static const auto LogExpanded = QStringLiteral(
"gui/logExpanded");
85 inline static const auto WindowGeometry = QStringLiteral(
"gui/windowGeometry");
93 inline static const auto File = QStringLiteral(
"log/file");
94 inline static const auto Level = QStringLiteral(
"log/level");
95 inline static const auto ToFile = QStringLiteral(
"log/toFile");
96 inline static const auto GuiDebug = QStringLiteral(
"log/guiDebug");
100 inline static const auto CheckPeers = QStringLiteral(
"security/checkPeerFingerprints");
101 inline static const auto Certificate = QStringLiteral(
"security/certificate");
102 inline static const auto KeySize = QStringLiteral(
"security/keySize");
103 inline static const auto TlsEnabled = QStringLiteral(
"security/tlsEnabled");
107 inline static const auto ClipboardSize = QStringLiteral(
"server/clipboardSize");
111 inline static const auto EnableHeatbeat = QStringLiteral(
"server/enableHeatbeat");
114 inline static const auto ExternalConfig = QStringLiteral(
"server/externalConfig");
116 inline static const auto GridHeight = QStringLiteral(
"server/gridHeight");
117 inline static const auto GridWidth = QStringLiteral(
"server/gridWidth");
118 inline static const auto Heartbeat = QStringLiteral(
"server/heartbeat");
119 inline static const auto Protocol = QStringLiteral(
"server/protocol");
121 inline static const auto SwitchDelay = QStringLiteral(
"server/switchDelay");
129 inline static const auto Aliases = QStringLiteral(
"screen_%1/aliases");
136 inline static const auto NumRows = QStringLiteral(
"internalConfig/numRows");
137 inline static const auto NumColumns = QStringLiteral(
"internalConfig/numColumns");
138 inline static const auto ClipboardSharing = QStringLiteral(
"internalConfig/clipboardSharing");
139 inline static const auto Heatbeat = QStringLiteral(
"internalConfig/heartbeat");
140 inline static const auto SwitchDelay = QStringLiteral(
"internalConfig/switchDelay");
141 inline static const auto HasHeartbeat = QStringLiteral(
"internalConfig/hasHeartbeat");
142 inline static const auto HasSwitchDelay = QStringLiteral(
"internalConfig/hasSwitchDelay");
149 inline static const auto Protocol = QStringLiteral(
"internalConfig/protocol");
177 static void setStateFile(
const QString &stateFile = QString());
178 static void setValue(
const QString &key = QString(),
const QVariant &
value = QVariant());
179 static QVariant
value(
const QString &key = QString());
194 static void save(
bool emitSaving =
true);
206 explicit Settings(QObject *parent =
nullptr);
207 Settings *operator=(Settings &other) =
delete;
208 Settings(
const Settings &other) =
delete;
209 ~Settings()
override =
default;
216 void upgradeSettings();
217 void cleanSettings();
218 void cleanStateSettings();
223 void setupComputerName();
230 static QString cleanComputerName(
const QString &
name);
236 void checkIfSettingsWritableChange();
238 QSettings *m_settings =
nullptr;
239 QSettings *m_stateSettings =
nullptr;
240 bool m_settingsWritable;
241 QFileSystemWatcher *m_settingsWatcher =
nullptr;
242 std::shared_ptr<QSettingsProxy> m_settingsProxy;
245 inline static const QStringList m_validGroup = {
246 QStringLiteral(
"client")
247 , QStringLiteral(
"core")
248 , QStringLiteral(
"daemon")
249 , QStringLiteral(
"gui")
250 , QStringLiteral(
"log")
251 , QStringLiteral(
"security")
252 , QStringLiteral(
"server")
253 , QStringLiteral(
"internalConfig")
256 inline static const QStringList m_validKeys = {
323 inline static const QStringList m_defaultFalseValues = {
348 inline static const QStringList m_defaultTrueValues = {
362 inline static const QStringList m_stateKeys = {
369 inline static const QMap<QString, QString> m_upgradedMap = {
390 inline static const QStringList m_oldServerConfigKeys = {
406 , QStringLiteral(
"internalConfig/switchCorner")
static const struct sockaddr FAR * name
Definition ArchNetworkWinsock.cpp:29
NetworkProtocol
Definition NetworkProtocol.h:15
Definition QSettingsProxy.h:14
static bool isPortableMode()
Definition Settings.cpp:299
static const auto SystemSettingFile
Definition Settings.h:35
static NetworkProtocol networkProtocol()
Definition Settings.cpp:262
static void removeUnknownScreens(const QStringList &knownScreens)
Definition Settings.cpp:382
static QStringList validGroups()
static const auto UserDir
Definition Settings.h:30
static const auto UserSettingFile
Definition Settings.h:34
static void setValue(const QString &key=QString(), const QVariant &value=QVariant())
Definition Settings.cpp:340
static void setSettingsFile(const QString &settingsFile=QString())
Definition Settings.cpp:26
static QVariant value(const QString &key=QString())
Definition Settings.cpp:361
static QVariant defaultValue(const QString &key)
Definition Settings.cpp:190
static QString tlsTrustedClientsDb()
Definition Settings.cpp:330
static QString tlsDir()
Definition Settings.cpp:320
static bool isServerConfigFileReadable()
Definition Settings.cpp:288
static QString portableSettingsFile()
Definition Settings.cpp:375
void settingsWritableChanged(bool writable)
static void setStateFile(const QString &stateFile=QString())
Definition Settings.cpp:49
static QSettingsProxy & proxy()
Definition Settings.cpp:257
static QString tlsTrustedServersDb()
Definition Settings.cpp:325
static QStringList validKeys()
Definition Settings.cpp:277
static QString settingsFile()
Definition Settings.cpp:305
CoreMode
Definition Settings.h:168
@ None
Definition Settings.h:169
static void restoreDefaultSettings()
Definition Settings.cpp:368
ProcessMode
Definition Settings.h:161
@ Service
Definition Settings.h:162
@ Desktop
Definition Settings.h:163
void serverSettingsChanged()
static bool isWritable()
Definition Settings.cpp:294
static QString serverConfigFile()
Definition Settings.cpp:282
static const auto SystemDir
Definition Settings.h:31
static Settings * instance()
Definition Settings.cpp:20
static void save(bool emitSaving=true)
Definition Settings.cpp:267
static QString settingsPath()
Definition Settings.cpp:310
static QString logLevelText()
Definition Settings.cpp:335
void settingsChanged(const QString key)
static const auto InvertXScroll
Definition Settings.h:41
static const auto XScrollScale
Definition Settings.h:43
static const auto LanguageSync
Definition Settings.h:44
static const auto DynamicConnectionRetry
Definition Settings.h:39
static const auto YScrollScale
Definition Settings.h:42
static const auto RemoteHost
Definition Settings.h:45
static const auto XdpRestoreToken
Definition Settings.h:46
static const auto InvertYScroll
Definition Settings.h:40
static const auto ComputerName
Definition Settings.h:56
static const auto LastVersion
Definition Settings.h:52
static const auto Display
Definition Settings.h:57
static const auto Interface
Definition Settings.h:51
static const auto PreventSleep
Definition Settings.h:54
static const auto ScreenExitCommand
Definition Settings.h:63
static const auto UseHooks
Definition Settings.h:58
static const auto Language
Definition Settings.h:59
static const auto EnableExitCommand
Definition Settings.h:62
static const auto ScreenEnterCommand
Definition Settings.h:61
static const auto CoreMode
Definition Settings.h:50
static const auto Port
Definition Settings.h:53
static const auto EnableEnterCommand
Definition Settings.h:60
static const auto ProcessMode
Definition Settings.h:55
static const auto ScreenName
Definition Settings.h:66
static const auto Elevate
Definition Settings.h:71
static const auto ConfigFile
Definition Settings.h:70
static const auto LogFile
Definition Settings.h:72
static const auto LogLevel
Definition Settings.h:73
static const auto Autohide
Definition Settings.h:77
static const auto IgnoreMissingKeyboardLayouts
Definition Settings.h:89
static const auto SymbolicTrayIcon
Definition Settings.h:84
static const auto WindowGeometry
Definition Settings.h:85
static const auto AutoUpdateCheck
Definition Settings.h:79
static const auto CloseReminder
Definition Settings.h:81
static const auto ShownFirstConnectedMessage
Definition Settings.h:86
static const auto AutoStartCore
Definition Settings.h:78
static const auto UpdateCheckUrl
Definition Settings.h:80
static const auto ShowVersionInTitle
Definition Settings.h:88
static const auto CloseToTray
Definition Settings.h:82
static const auto ShownServerFirstStartMessage
Definition Settings.h:87
static const auto LogExpanded
Definition Settings.h:83
Definition Settings.h:135
static const auto Heatbeat
Definition Settings.h:139
static const auto DefaultLockToScreenState
Definition Settings.h:144
static const auto HasSwitchDoubleTap
Definition Settings.h:143
static const auto NumRows
Definition Settings.h:136
static const auto ClipboardSharingSize
Definition Settings.h:150
static const auto SwitchDelay
Definition Settings.h:140
static const auto HasHeartbeat
Definition Settings.h:141
static const auto NumColumns
Definition Settings.h:137
static const auto RelativeMouseMoves
Definition Settings.h:148
static const auto HasSwitchDelay
Definition Settings.h:142
static const auto Protocol
Definition Settings.h:149
static const auto Win32KeepForeground
Definition Settings.h:147
static const auto DisableLockToScreen
Definition Settings.h:145
static const auto SwitchDoubleTapDelay
Definition Settings.h:146
static const auto ClipboardSharing
Definition Settings.h:138
static const auto ToFile
Definition Settings.h:95
static const auto GuiDebug
Definition Settings.h:96
static const auto File
Definition Settings.h:93
static const auto Level
Definition Settings.h:94
Definition Settings.h:128
static const auto Aliases
Definition Settings.h:129
static const auto CheckPeers
Definition Settings.h:100
static const auto Certificate
Definition Settings.h:101
static const auto KeySize
Definition Settings.h:102
static const auto TlsEnabled
Definition Settings.h:103
Definition Settings.h:106
static const auto RelativeMouseMoves
Definition Settings.h:120
static const auto ExternalConfigFile
Definition Settings.h:115
static const auto SwitchDoubleTap
Definition Settings.h:122
static const auto GridWidth
Definition Settings.h:117
static const auto SwitchDelay
Definition Settings.h:121
static const auto DefaultLockToComputerState
Definition Settings.h:108
static const auto EnableSwitchDelay
Definition Settings.h:112
static const auto Protocol
Definition Settings.h:119
static const auto Win32KeepForeground
Definition Settings.h:123
static const auto ClipboardSize
Definition Settings.h:107
static const auto XdpRestoreToken
Definition Settings.h:124
static const auto EnableHeatbeat
Definition Settings.h:111
static const auto ExternalConfig
Definition Settings.h:114
static const auto DisableLockToComputer
Definition Settings.h:109
static const auto EnableClipboard
Definition Settings.h:110
static const auto EnableSwitchDoubleTap
Definition Settings.h:113
static const auto Heartbeat
Definition Settings.h:118
static const auto GridHeight
Definition Settings.h:116