aboutsummaryrefslogtreecommitdiff
path: root/src/webengine/webprofilemanager.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/webengine/webprofilemanager.cpp')
-rw-r--r--src/webengine/webprofilemanager.cpp147
1 files changed, 29 insertions, 118 deletions
diff --git a/src/webengine/webprofilemanager.cpp b/src/webengine/webprofilemanager.cpp
index bdd10f0..785251b 100644
--- a/src/webengine/webprofilemanager.cpp
+++ b/src/webengine/webprofilemanager.cpp
@@ -7,28 +7,23 @@
*/
#include "webprofilemanager.h"
-#include "configuration.h"
#include "webprofile.h"
-#include <QFileInfo>
-#include <QWebEngineSettings>
-static WebProfileManager *s_instance = nullptr;
+static WebProfileManager<false> *s_instance = nullptr;
-auto WebProfileManager::instance() -> const WebProfileManager *
+template <>
+void WebProfileManager<false>::make_global()
{
- return s_instance;
-}
-void WebProfileManager::setInstance(WebProfileManager *ptr)
-{
- s_instance = ptr;
+ if(s_instance == nullptr) {
+ s_instance = this;
+ }
}
-WebProfileManager::WebProfileManager(QObject *parent)
- : QObject(parent)
-{
-}
+template <>
+WebProfileManager<true>::~WebProfileManager() = default;
-WebProfileManager::~WebProfileManager()
+template <>
+WebProfileManager<false>::~WebProfileManager()
{
for(Profile p : qAsConst(profiles)) {
if(p.selfDestruct && p.settings != nullptr) {
@@ -48,111 +43,30 @@ WebProfileManager::~WebProfileManager()
}
}
-WebProfile *WebProfileManager::profile(const QString &id) const
+template <>
+WebProfile *WebProfileManager<true>::profile(const QString &id) const
{
- // Check if profile exists
- if(profiles.contains(id)) {
- return profiles.value(id).ptr;
- }
-
- return nullptr;
+ return s_instance->profile(id);
}
-WebProfile *WebProfileManager::add(const QString &id, const QString &path, bool isOffTheRecord)
+template <>
+QStringList WebProfileManager<true>::idList() const
{
- if(profiles.contains(id)) {
- return nullptr;
- }
-
- Configuration conf;
- Profile profile;
-
- if(!path.isEmpty())
- profile.settings = new QSettings(path, QSettings::IniFormat);
- else
- profile.settings = new QSettings;
+ return s_instance->idList();
+}
- // QWebEngineCore cleans up profiles automatically, so no need to set parent
- if(profile.settings->value("otr", isOffTheRecord).toBool()) {
- // name parent
- profile.ptr = new WebProfile(profile.settings->value("name", id).toString(), nullptr);
- } else {
- // storageName name parent
- profile.ptr = new WebProfile(id, profile.settings->value("name", id).toString(), nullptr);
+template <>
+void WebProfileManager<false>::walk(std::function<void(const QString &id, WebProfile *profile, const QSettings *settings)> f) const
+{
+ for(auto iter = profiles.begin(); iter != profiles.end(); ++iter) {
+ f(iter.key(), iter.value().ptr, iter.value().settings);
}
-
- profile.settings->setParent(profile.ptr);
-
- connect(profile.ptr, &WebProfile::nameChanged, profile.settings, [profile](const QString &name) {
- profile.settings->setValue("name", name);
- });
-
- profile.ptr->setSearch(profile.settings->value("search", conf.value<QString>("profile.search").value()).toString());
- connect(profile.ptr, &WebProfile::searchChanged, profile.settings, [profile](const QString &url) {
- profile.settings->setValue("search", url);
- });
-
- profile.ptr->setHomepage(profile.settings->value("homepage", conf.value<QString>("profile.homepage").value()).toUrl());
- connect(profile.ptr, &WebProfile::homepageChanged, profile.settings, [profile](const QUrl &url) {
- profile.settings->setValue("homepage", url);
- });
-
- profile.ptr->setNewtab(profile.settings->value("newtab", conf.value<QString>("profile.newtab").value()).toUrl());
- connect(profile.ptr, &WebProfile::newtabChanged, profile.settings, [profile](const QUrl &url) {
- profile.settings->setValue("newtab", url);
- });
-
- if(profile.settings != nullptr) {
- profile.settings->beginGroup("properties");
- {
- const auto keys = profile.settings->childKeys();
- for(const QString &key : keys) {
- profile.ptr->setProperty(qUtf8Printable(key), profile.settings->value(key));
- }
- }
- profile.settings->endGroup(); // properties
- connect(profile.ptr, &WebProfile::propertyChanged, [profile](const QString &property, const QVariant &value) {
- profile.settings->setValue("properties/" + property, value);
- });
-
- profile.settings->beginGroup("attributes");
- {
- const auto keys = profile.settings->childKeys();
- auto *settings = profile.ptr->settings();
- for(const QString &key : keys) {
- auto attribute = static_cast<QWebEngineSettings::WebAttribute>(key.toInt());
- settings->setAttribute(attribute, profile.settings->value(key).toBool());
- }
- }
- profile.settings->endGroup();
- connect(profile.ptr, &WebProfile::attributeChanged, [profile](const QWebEngineSettings::WebAttribute attr, const bool value) {
- profile.settings->setValue("attributes/" + QString::number(attr), value);
- });
-
- // headers
- profile.settings->beginGroup("headers");
- for(const QString &key : profile.settings->childKeys()) {
- profile.ptr->setHttpHeader(key.toLatin1(), profile.settings->value(key).toString().toLatin1());
- }
- profile.settings->endGroup();
- connect(profile.ptr, &WebProfile::headerChanged, [profile](const QString &name, const QString &value) {
- profile.settings->setValue("headers/" + name, value);
- });
- connect(profile.ptr, &WebProfile::headerRemoved, [profile](const QString &name) {
- profile.settings->remove("headers/" + name);
- });
-
- } // profile.settings != nullptr
-
- profiles[id] = profile;
- return profile.ptr;
}
-void WebProfileManager::deleteProfile(const QString &id)
+template <>
+void WebProfileManager<true>::walk(std::function<void(const QString &id, WebProfile *profile, const QSettings *settings)> f) const
{
- if(profiles.contains(id)) {
- profiles[id].selfDestruct = true;
- }
+ s_instance->walk(f);
}
void profileMenu(QMenu *menu, const std::function<void(WebProfile *)> &callback, WebProfile *current, bool checkable)
@@ -160,13 +74,10 @@ void profileMenu(QMenu *menu, const std::function<void(WebProfile *)> &callback,
auto *group = new QActionGroup(menu);
QObject::connect(menu, &QMenu::aboutToHide, group, &QActionGroup::deleteLater);
- for(const auto &profile : qAsConst(s_instance->profiles)) {
- auto *action = menu->addAction(profile.ptr->name(), profile.ptr, [profile, callback]() {
- callback(profile.ptr);
- });
+ s_instance->walk([=](const QString &, WebProfile *profile, const QSettings *) {
+ auto *action = menu->addAction(profile->name(), profile, [=]() { callback(profile); });
action->setCheckable(checkable);
- if(profile.ptr == current)
- action->setChecked(true);
+ action->setChecked(profile == current);
group->addAction(action);
- }
+ });
}