#pragma once #include #include #include /* struct AppSettings { enum {LOCALTIME, UTC} ui_timezone = LOCALTIME; bool can_access_internet = true; bool can_download_emoji = true; bool can_download_attachments = true; struct { enum {MASTODON} type = MASTODON; QString address; QString token; } instance; }; */ namespace AppSettingsTypes { enum Timezone {LOCALTIME = 0, UTC}; enum InstanceType {MASTODON = 0}; } // Declare metatypes for use with QVariant Q_DECLARE_METATYPE(AppSettingsTypes::Timezone); Q_DECLARE_METATYPE(AppSettingsTypes::InstanceType); class SettingsInterface { public: ~SettingsInterface(); const QVariant read_setting(const QString &key); static const QVariant quick_read_setting(const QString &key); void write_setting(const QString &key, const QVariant &value); void clear_setting(const QString &key); void clear_all(); bool commit(); bool is_default(const QString &key); bool is_uncommited(const QString &key); private: QSettings qt_settings; QHash* modified = nullptr; // Optimization to commit a clear_all() faster bool must_clear_all = false; // List of keys to remove from the QSettings QStringList must_clear; };