/* * This file is part of smolbote. It's copyrighted by the contributors recorded * in the version control history of the file, available from its original * location: https://neueland.iserlohn-fortress.net/smolbote.hg * * SPDX-License-Identifier: GPL-3.0 */ #ifndef SMOLBOTE_PROFILEMANAGER_H #define SMOLBOTE_PROFILEMANAGER_H #include <QObject> #include <QMap> #include <QSettings> #include <map> #include <memory> #include <functional> #include <QMenu> #define profileManager ProfileManager::instance() class WebProfile; class ProfileManager : public QObject { Q_OBJECT public: explicit ProfileManager(const QHash<QString, QString> &profileSection, QObject *parent = nullptr); static void setInstance(ProfileManager *instance); static ProfileManager *instance(); WebProfile *loadProfile(const QString &path); QMenu *createProfileMenu(std::function<void(WebProfile *)> callback, QWidget *parent = nullptr) const; const QStringList idList() const; const QString id(WebProfile *profile) const; WebProfile *profile(const QString &id) const; const QString configurationPath(const QString &id) const; private: struct ProfileData { ProfileData(const QString &path = QString()) : settings(path, QSettings::IniFormat) { this->path = path; } ~ProfileData() { this->settings.sync(); } WebProfile *profile = nullptr; QSettings settings; QString path; }; std::map<QString, std::unique_ptr<ProfileData>> m_profiles; static ProfileManager *s_instance; const QHash<QString, QString> defaults; }; #endif // SMOLBOTE_PROFILEMANAGER_H