aboutsummaryrefslogtreecommitdiff
path: root/lib/settings.h
diff options
context:
space:
mode:
Diffstat (limited to 'lib/settings.h')
-rw-r--r--lib/settings.h225
1 files changed, 111 insertions, 114 deletions
diff --git a/lib/settings.h b/lib/settings.h
index 0cde47a3..cb09c479 100644
--- a/lib/settings.h
+++ b/lib/settings.h
@@ -24,131 +24,128 @@
class QVariant;
-namespace QMatrixClient {
- class Settings : public QSettings
- {
- Q_OBJECT
- public:
- /**
- * Use this function before creating any Settings objects in order
- * to setup a read-only location where configuration has previously
- * been stored. This will provide an additional fallback in case of
- * renaming the organisation/application.
- */
- static void setLegacyNames(const QString& organizationName,
- const QString& applicationName = {});
+namespace QMatrixClient
+{
+class Settings : public QSettings
+{
+ Q_OBJECT
+public:
+ /**
+ * Use this function before creating any Settings objects in order
+ * to setup a read-only location where configuration has previously
+ * been stored. This will provide an additional fallback in case of
+ * renaming the organisation/application.
+ */
+ static void setLegacyNames(const QString& organizationName,
+ const QString& applicationName = {});
#if defined(_MSC_VER) && _MSC_VER < 1900
- // VS 2013 (and probably older) aren't friends with 'using' statements
- // that involve private constructors
- explicit Settings(QObject* parent = 0) : QSettings(parent) {}
+ // VS 2013 (and probably older) aren't friends with 'using' statements
+ // that involve private constructors
+ explicit Settings(QObject* parent = 0)
+ : QSettings(parent)
+ {}
#else
- using QSettings::QSettings;
+ using QSettings::QSettings;
#endif
- Q_INVOKABLE void setValue(const QString& key, const QVariant& value);
- Q_INVOKABLE QVariant value(const QString& key,
- const QVariant& defaultValue = {}) const;
+ Q_INVOKABLE void setValue(const QString& key, const QVariant& value);
+ Q_INVOKABLE QVariant value(const QString& key,
+ const QVariant& defaultValue = {}) const;
+
+ template <typename T>
+ T get(const QString& key, const T& defaultValue = {}) const
+ {
+ const auto qv = value(key, QVariant());
+ return qv.isValid() && qv.canConvert<T>() ? qv.value<T>() : defaultValue;
+ }
+
+ Q_INVOKABLE bool contains(const QString& key) const;
+ Q_INVOKABLE QStringList childGroups() const;
- template <typename T>
- T get(const QString& key, const T& defaultValue = {}) const
- {
- const auto qv = value(key, QVariant());
- return qv.isValid() && qv.canConvert<T>() ? qv.value<T>()
- : defaultValue;
- }
+private:
+ static QString legacyOrganizationName;
+ static QString legacyApplicationName;
- Q_INVOKABLE bool contains(const QString& key) const;
- Q_INVOKABLE QStringList childGroups() const;
+protected:
+ QSettings legacySettings { legacyOrganizationName, legacyApplicationName };
+};
- private:
- static QString legacyOrganizationName;
- static QString legacyApplicationName;
+class SettingsGroup : public Settings
+{
+public:
+ template <typename... ArgTs>
+ explicit SettingsGroup(QString path, ArgTs&&... qsettingsArgs)
+ : Settings(std::forward<ArgTs>(qsettingsArgs)...)
+ , groupPath(std::move(path))
+ {}
- protected:
- QSettings legacySettings { legacyOrganizationName,
- legacyApplicationName };
- };
+ Q_INVOKABLE bool contains(const QString& key) const;
+ Q_INVOKABLE QVariant value(const QString& key,
+ const QVariant& defaultValue = {}) const;
- class SettingsGroup : public Settings
+ template <typename T>
+ T get(const QString& key, const T& defaultValue = {}) const
{
- public:
- template <typename... ArgTs>
- explicit SettingsGroup(QString path, ArgTs&&... qsettingsArgs)
- : Settings(std::forward<ArgTs>(qsettingsArgs)...),
- groupPath(std::move(path))
- {
- }
-
- Q_INVOKABLE bool contains(const QString& key) const;
- Q_INVOKABLE QVariant value(const QString& key,
- const QVariant& defaultValue = {}) const;
-
- template <typename T>
- T get(const QString& key, const T& defaultValue = {}) const
- {
- const auto qv = value(key, QVariant());
- return qv.isValid() && qv.canConvert<T>() ? qv.value<T>()
- : defaultValue;
- }
-
- Q_INVOKABLE QString group() const;
- Q_INVOKABLE QStringList childGroups() const;
- Q_INVOKABLE void setValue(const QString& key, const QVariant& value);
-
- Q_INVOKABLE void remove(const QString& key);
-
- private:
- QString groupPath;
- };
-
-#define QMC_DECLARE_SETTING(type, propname, setter) \
- Q_PROPERTY(type propname READ propname WRITE setter) \
- public: \
- type propname() const; \
- void setter(type newValue); \
- \
- private:
-
-#define QMC_DEFINE_SETTING(classname, type, propname, qsettingname, \
- defaultValue, setter) \
- type classname::propname() const \
- { \
- return get<type>(QStringLiteral(qsettingname), defaultValue); \
- } \
- \
- void classname::setter(type newValue) \
- { \
- setValue(QStringLiteral(qsettingname), newValue); \
+ const auto qv = value(key, QVariant());
+ return qv.isValid() && qv.canConvert<T>() ? qv.value<T>() : defaultValue;
}
- class AccountSettings : public SettingsGroup
- {
- Q_OBJECT
- Q_PROPERTY(QString userId READ userId CONSTANT)
- QMC_DECLARE_SETTING(QString, deviceId, setDeviceId)
- QMC_DECLARE_SETTING(QString, deviceName, setDeviceName)
- QMC_DECLARE_SETTING(bool, keepLoggedIn, setKeepLoggedIn)
- /** \deprecated \sa setAccessToken */
- Q_PROPERTY(QString accessToken READ accessToken WRITE setAccessToken)
- public:
- template <typename... ArgTs>
- explicit AccountSettings(const QString& accountId,
- ArgTs... qsettingsArgs)
- : SettingsGroup("Accounts/" + accountId, qsettingsArgs...)
- {
- }
-
- QString userId() const;
-
- QUrl homeserver() const;
- void setHomeserver(const QUrl& url);
-
- /** \deprecated \sa setToken */
- QString accessToken() const;
- /** \deprecated Storing accessToken in QSettings is unsafe,
- * see QMatrixClient/Quaternion#181 */
- void setAccessToken(const QString& accessToken);
- Q_INVOKABLE void clearAccessToken();
- };
+ Q_INVOKABLE QString group() const;
+ Q_INVOKABLE QStringList childGroups() const;
+ Q_INVOKABLE void setValue(const QString& key, const QVariant& value);
+
+ Q_INVOKABLE void remove(const QString& key);
+
+private:
+ QString groupPath;
+};
+
+#define QMC_DECLARE_SETTING(type, propname, setter) \
+ Q_PROPERTY(type propname READ propname WRITE setter) \
+public: \
+ type propname() const; \
+ void setter(type newValue); \
+ \
+private:
+
+#define QMC_DEFINE_SETTING(classname, type, propname, qsettingname, \
+ defaultValue, setter) \
+ type classname::propname() const \
+ { \
+ return get<type>(QStringLiteral(qsettingname), defaultValue); \
+ } \
+ \
+ void classname::setter(type newValue) \
+ { \
+ setValue(QStringLiteral(qsettingname), std::move(newValue)); \
+ }
+
+class AccountSettings : public SettingsGroup
+{
+ Q_OBJECT
+ Q_PROPERTY(QString userId READ userId CONSTANT)
+ QMC_DECLARE_SETTING(QString, deviceId, setDeviceId)
+ QMC_DECLARE_SETTING(QString, deviceName, setDeviceName)
+ QMC_DECLARE_SETTING(bool, keepLoggedIn, setKeepLoggedIn)
+ /** \deprecated \sa setAccessToken */
+ Q_PROPERTY(QString accessToken READ accessToken WRITE setAccessToken)
+public:
+ template <typename... ArgTs>
+ explicit AccountSettings(const QString& accountId, ArgTs... qsettingsArgs)
+ : SettingsGroup("Accounts/" + accountId, qsettingsArgs...)
+ {}
+
+ QString userId() const;
+
+ QUrl homeserver() const;
+ void setHomeserver(const QUrl& url);
+
+ /** \deprecated \sa setToken */
+ QString accessToken() const;
+ /** \deprecated Storing accessToken in QSettings is unsafe,
+ * see QMatrixClient/Quaternion#181 */
+ void setAccessToken(const QString& accessToken);
+ Q_INVOKABLE void clearAccessToken();
+};
} // namespace QMatrixClient