Deskflow 1.22.0.197
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 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/Local/%2").arg(QDir::homePath(), kAppName);
23 inline const static auto SystemDir = QStringLiteral("%1ProgramData/%2").arg(QDir::rootPath(), kAppName);
24#elif defined(Q_OS_MAC)
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 inline const static auto UserSettingFile = QStringLiteral("%1/%2.conf").arg(UserDir, kAppName);
32 inline const static auto SystemSettingFile = QStringLiteral("%1/%2.conf").arg(SystemDir, kAppName);
33
34 struct Client
35 {
36 inline static const auto Binary = QStringLiteral("client/binary");
37 inline static const auto InvertScrollDirection = QStringLiteral("client/invertScrollDirection");
38 inline static const auto LanguageSync = QStringLiteral("client/languageSync");
39 inline static const auto RemoteHost = QStringLiteral("client/remoteHost");
40 };
41 struct Core
42 {
43 inline static const auto CoreMode = QStringLiteral("core/coreMode");
44 inline static const auto Interface = QStringLiteral("core/interface");
45 inline static const auto LastVersion = QStringLiteral("core/lastVersion");
46 inline static const auto Port = QStringLiteral("core/port");
47 inline static const auto PreventSleep = QStringLiteral("core/preventSleep");
48 inline static const auto ProcessMode = QStringLiteral("core/processMode");
49 inline static const auto ScreenName = QStringLiteral("core/screenName");
50 inline static const auto StartedBefore = QStringLiteral("core/startedBefore");
51 inline static const auto UpdateUrl = QStringLiteral("core/updateUrl");
52 };
53 struct Daemon
54 {
55 inline static const auto Command = QStringLiteral("daemon/command");
56 inline static const auto Elevate = QStringLiteral("daemon/elevate");
57 inline static const auto LogFile = QStringLiteral("daemon/logFile");
58 inline static const auto LogLevel = QStringLiteral("daemon/logLevel");
59 };
60 struct Gui
61 {
62 inline static const auto Autohide = QStringLiteral("gui/autoHide");
63 inline static const auto AutoUpdateCheck = QStringLiteral("gui/enableUpdateCheck");
64 inline static const auto CloseReminder = QStringLiteral("gui/closeReminder");
65 inline static const auto CloseToTray = QStringLiteral("gui/closeToTray");
66 inline static const auto LogExpanded = QStringLiteral("gui/logExpanded");
67 inline static const auto SymbolicTrayIcon = QStringLiteral("gui/symbolicTrayIcon");
68 inline static const auto WindowGeometry = QStringLiteral("gui/windowGeometry");
69 };
70 struct Log
71 {
72 inline static const auto File = QStringLiteral("log/file");
73 inline static const auto Level = QStringLiteral("log/level");
74 inline static const auto ToFile = QStringLiteral("log/toFile");
75 };
76 struct Security
77 {
78 inline static const auto CheckPeers = QStringLiteral("security/checkPeerFingerprints");
79 inline static const auto Certificate = QStringLiteral("security/certificate");
80 inline static const auto KeySize = QStringLiteral("security/keySize");
81 inline static const auto TlsEnabled = QStringLiteral("security/tlsEnabled");
82 };
83 struct Server
84 {
85 inline static const auto Binary = QStringLiteral("server/binary");
86 inline static const auto ConfigVisible = QStringLiteral("server/configVisible");
87 inline static const auto ExternalConfig = QStringLiteral("server/externalConfig");
88 inline static const auto ExternalConfigFile = QStringLiteral("server/externalConfigFile");
89 };
90
91 // Enums types used in settings
92 // The use of enum classes is not use for these
93 // enum classes are more specific when used with QVariant
94 // This leads longer function calls in code
95 // and longer more cryptic output in the settings file
96 // The using of standard enum will just write ints
97 // and we can read / write them as if they were ints
103 Q_ENUM(ProcessMode)
104
111 Q_ENUM(CoreMode)
112
113 static Settings *instance();
114 static void setSettingFile(const QString &settingsFile = QString());
115 static void setValue(const QString &key = QString(), const QVariant &value = QVariant());
116 static QVariant value(const QString &key = QString());
117 static void restoreDefaultSettings();
118 static QVariant defaultValue(const QString &key);
119 static bool isWritable();
120 static bool isNativeMode();
121 static QString settingsFile();
122 static QString settingsPath();
123 static QString tlsDir();
124 static QString tlsLocalDb();
125 static QString tlsTrustedServersDb();
126 static QString tlsTrustedClientsDb();
127 static QString logLevelText();
128 static QSettingsProxy &proxy();
129 static void save(bool emitSaving = true);
130 static QStringList validKeys();
131
132Q_SIGNALS:
133 void settingsChanged(const QString key);
135
136private:
137 explicit Settings(QObject *parent = nullptr);
138 Settings *operator=(Settings &other) = delete;
139 Settings(const Settings &other) = delete;
140 ~Settings() override = default;
141 void cleanSettings();
142
143 QSettings *m_settings = nullptr;
144 QString m_portableSettingsFile = QStringLiteral("%1/settings/%2.conf");
145 std::shared_ptr<QSettingsProxy> m_settingsProxy;
146
147 // clang-format off
148 inline static const QStringList m_logLevels = {
149 QStringLiteral("INFO")
150 , QStringLiteral("DEBUG")
151 , QStringLiteral("DEBUG1")
152 , QStringLiteral("DEBUG2")
153 };
154
155 inline static const QStringList m_validKeys = {
190 };
191 // clang-format on
192};
int key
Definition KeySequence.cpp:15
Definition QSettingsProxy.h:14
Definition Settings.h:18
static const auto SystemSettingFile
Definition Settings.h:32
static const auto UserDir
Definition Settings.h:28
static const auto UserSettingFile
Definition Settings.h:31
static void setValue(const QString &key=QString(), const QVariant &value=QVariant())
Definition Settings.cpp:208
static bool isNativeMode()
Definition Settings.cpp:171
static QVariant value(const QString &key=QString())
Definition Settings.cpp:222
static QVariant defaultValue(const QString &key)
Definition Settings.cpp:75
static QString tlsTrustedClientsDb()
Definition Settings.cpp:203
static QString tlsDir()
Definition Settings.cpp:188
static QSettingsProxy & proxy()
Definition Settings.cpp:147
static QString tlsTrustedServersDb()
Definition Settings.cpp:198
static QStringList validKeys()
Definition Settings.cpp:159
static QString settingsFile()
Definition Settings.cpp:176
CoreMode
Definition Settings.h:106
@ None
Definition Settings.h:107
static void restoreDefaultSettings()
Definition Settings.cpp:227
ProcessMode
Definition Settings.h:99
@ Service
Definition Settings.h:100
@ Desktop
Definition Settings.h:101
static void setSettingFile(const QString &settingsFile=QString())
Definition Settings.cpp:21
void serverSettingsChanged()
static QString tlsLocalDb()
Definition Settings.cpp:193
static bool isWritable()
Definition Settings.cpp:164
static const auto SystemDir
Definition Settings.h:29
static Settings * instance()
Definition Settings.cpp:15
static void save(bool emitSaving=true)
Definition Settings.cpp:152
static QString settingsPath()
Definition Settings.cpp:181
static QString logLevelText()
Definition Settings.cpp:142
void settingsChanged(const QString key)
Definition Settings.h:35
static const auto Binary
Definition Settings.h:36
static const auto LanguageSync
Definition Settings.h:38
static const auto InvertScrollDirection
Definition Settings.h:37
static const auto RemoteHost
Definition Settings.h:39
Definition Settings.h:42
static const auto LastVersion
Definition Settings.h:45
static const auto Interface
Definition Settings.h:44
static const auto PreventSleep
Definition Settings.h:47
static const auto CoreMode
Definition Settings.h:43
static const auto Port
Definition Settings.h:46
static const auto ProcessMode
Definition Settings.h:48
static const auto StartedBefore
Definition Settings.h:50
static const auto ScreenName
Definition Settings.h:49
static const auto UpdateUrl
Definition Settings.h:51
Definition Settings.h:54
static const auto Elevate
Definition Settings.h:56
static const auto LogFile
Definition Settings.h:57
static const auto Command
Definition Settings.h:55
static const auto LogLevel
Definition Settings.h:58
Definition Settings.h:61
static const auto Autohide
Definition Settings.h:62
static const auto SymbolicTrayIcon
Definition Settings.h:67
static const auto WindowGeometry
Definition Settings.h:68
static const auto AutoUpdateCheck
Definition Settings.h:63
static const auto CloseReminder
Definition Settings.h:64
static const auto CloseToTray
Definition Settings.h:65
static const auto LogExpanded
Definition Settings.h:66
Definition Settings.h:71
static const auto ToFile
Definition Settings.h:74
static const auto File
Definition Settings.h:72
static const auto Level
Definition Settings.h:73
Definition Settings.h:77
static const auto CheckPeers
Definition Settings.h:78
static const auto Certificate
Definition Settings.h:79
static const auto KeySize
Definition Settings.h:80
static const auto TlsEnabled
Definition Settings.h:81
Definition Settings.h:84
static const auto ExternalConfigFile
Definition Settings.h:88
static const auto ConfigVisible
Definition Settings.h:86
static const auto Binary
Definition Settings.h:85
static const auto ExternalConfig
Definition Settings.h:87