/* * 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/gitea/aqua/smolbote * * 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 class WebProfile; class ProfileManager : public QObject { Q_OBJECT public: explicit ProfileManager(const QHash &profileSection, QObject *parent); WebProfile *createProfile(const QString &id, bool isOffTheRecord); WebProfile *loadProfile(const QString &path); void deleteProfile(const QString &id); void profilePickerMenu(QMenu *menu, WebProfile *current, std::function callback) const; 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; private: struct ProfileData { explicit ProfileData(const QString &path = QString()) : settings(path, QSettings::IniFormat) { this->path = path; } ~ProfileData() { if(!deleteSelf) { #ifdef QT_DEBUG qDebug("sync %s", qUtf8Printable(settings.fileName())); #endif this->settings.sync(); } else { QFile::remove(path); if(!profile->isOffTheRecord()) { if(!profile->persistentStoragePath().isEmpty()) QDir(profile->persistentStoragePath()).removeRecursively(); if(!profile->cachePath().isEmpty()) QDir(profile->cachePath()).removeRecursively(); } } } WebProfile *profile = nullptr; bool deleteSelf = false; QSettings settings; QString path; }; std::map> m_profiles; const QHash defaults; }; #endif // SMOLBOTE_PROFILEMANAGER_H