/* * 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 "webprofile.h" #include #include #include #include #include #include #include #include #include #define profileManager ProfileManager::instance() class WebProfile; class ProfileManager : public QObject { Q_OBJECT public: explicit ProfileManager(const QHash &profileSection, QObject *parent = nullptr); static void setInstance(ProfileManager *instance); static ProfileManager *instance(); WebProfile *loadProfile(const QString &path); void deleteProfile(const QString &id); QMenu *createProfileMenu(std::function callback, QWidget *parent = nullptr) const; const QStringList idList() const; const QString id(const WebProfile *profile) const; WebProfile *profile(const QString &id) const; const QString configurationPath(const QString &id) const; private: struct ProfileData { explicit ProfileData(const QString &path = QString()) : settings(path, QSettings::IniFormat) { this->path = path; } ~ProfileData() { if(!deleteSelf) this->settings.sync(); else { QFile(path).remove(); QDir(profile->persistentStoragePath()).removeRecursively(); QDir(profile->cachePath()).removeRecursively(); } } WebProfile *profile = nullptr; bool deleteSelf = false; QSettings settings; QString path; }; std::map> m_profiles; static ProfileManager *s_instance; const QHash defaults; }; #endif // SMOLBOTE_PROFILEMANAGER_H