aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--lib/configuration/configuration.h3
-rw-r--r--lib/web/webprofile.cpp46
-rw-r--r--lib/web/webprofile.h6
-rw-r--r--src/browser.cpp43
-rw-r--r--src/mainwindow/widgets/tabwidget.cpp3
5 files changed, 53 insertions, 48 deletions
diff --git a/lib/configuration/configuration.h b/lib/configuration/configuration.h
index 1df6bb5..59c837c 100644
--- a/lib/configuration/configuration.h
+++ b/lib/configuration/configuration.h
@@ -49,7 +49,8 @@ public:
}
if constexpr(std::is_same_v<T, QString>) {
- return std::optional<QString>(vm[path].as<const char*>());
+ return std::optional<QString>(QString::fromStdString(this->value<std::string>(path).value()));
+ //return std::optional<QString>(vm[path].as<const char*>());
} else if constexpr(std::is_same_v<T, std::string>) {
diff --git a/lib/web/webprofile.cpp b/lib/web/webprofile.cpp
index b40a98c..67671a0 100644
--- a/lib/web/webprofile.cpp
+++ b/lib/web/webprofile.cpp
@@ -14,23 +14,33 @@
WebProfile *WebProfile::profile = nullptr;
-void loadProfile(WebProfile *profile, const QHash<QString, QString> &defaults, const QString &path)
+WebProfile* loadProfile(const QString &name, const QHash<QString, QString> &defaults, const QString &path)
{
- Q_CHECK_PTR(profile);
-
- profile->setSearch(defaults.value("profile.search"));
- profile->setHomepage(QUrl::fromUserInput(defaults.value("profile.homepage")));
- profile->setNewtab(QUrl::fromUserInput(defaults.value("profile.newtab")));
-
- // return if there is no config file
- if(!QFileInfo::exists(path))
- return;
-
+ WebProfile *profile = nullptr;
#ifdef QT_DEBUG
- qDebug("+ Reading config for profile '%s': %s", qUtf8Printable(profile->name()), qUtf8Printable(path));
+ qDebug("+ Reading config for profile '%s': %s", qUtf8Printable(name), qUtf8Printable(path));
#endif
QSettings config(path, QSettings::IniFormat);
+ if(name.isEmpty()) {
+ // a default otr profile
+ profile = new WebProfile(QObject::tr("Off-the-record"), nullptr);
+
+ } else if(config.value("otr").toBool()) {
+ // a named otr profile
+ profile = new WebProfile(config.value("name", name).toString(), nullptr);
+
+ } else {
+ // a named profile
+ profile = new WebProfile(name, config.value("name", name).toString(), nullptr);
+ }
+
+ Q_CHECK_PTR(profile);
+
+ profile->setSearch(config.value("search", defaults.value("profile.search")).toString());
+ profile->setHomepage(config.value("homepage", defaults.value("profile.homepage")).toUrl());
+ profile->setNewtab(config.value("newtab", defaults.value("profile.newtab")).toUrl());
+
config.beginGroup("properties");
{
const auto keys = config.childKeys();
@@ -56,20 +66,22 @@ void loadProfile(WebProfile *profile, const QHash<QString, QString> &defaults, c
}
}
config.endGroup();
+
+ return profile;
}
-WebProfile::WebProfile(QObject *parent)
+WebProfile::WebProfile(const QString &name, QObject *parent)
: QWebEngineProfile(parent)
{
- m_name = tr("Off-the-record");
+ m_name = name;
#ifdef QT_DEBUG
- qDebug("Creating off-the-record profile");
+ qDebug("Creating otr profile %s", qUtf8Printable(m_name));
#endif
}
-WebProfile::WebProfile(const QString &name, QObject *parent)
- : QWebEngineProfile(name, parent)
+WebProfile::WebProfile(const QString &storageName, const QString &name, QObject *parent)
+ : QWebEngineProfile(storageName, parent)
{
m_name = name;
diff --git a/lib/web/webprofile.h b/lib/web/webprofile.h
index 31c5b44..a421359 100644
--- a/lib/web/webprofile.h
+++ b/lib/web/webprofile.h
@@ -34,9 +34,9 @@ class WebProfile : public QWebEngineProfile
public:
// off-the-record constructor
- explicit WebProfile(QObject *parent = nullptr);
- // default constructor
explicit WebProfile(const QString &name, QObject *parent = nullptr);
+ // default constructor
+ explicit WebProfile(const QString &storageName, const QString &name, QObject *parent = nullptr);
~WebProfile() = default;
@@ -108,7 +108,7 @@ private:
QUrl m_newtab = QUrl("about:blank");
};
-void loadProfile(WebProfile *profile, const QHash<QString, QString> &defaults, const QString &path);
+WebProfile* loadProfile(const QString &name, const QHash<QString, QString> &defaults, const QString &path = QString());
//WebProfile *saveProfile(WebProfile *profile, const QString &path);
#endif // SMOLBOTE_WEBENGINEPROFILE_H
diff --git a/src/browser.cpp b/src/browser.cpp
index 99ddcc3..8abe10a 100644
--- a/src/browser.cpp
+++ b/src/browser.cpp
@@ -75,23 +75,6 @@ inline QVector<Plugin> loadPlugins(const QString &path)
return list;
}
-inline QHash<QString, WebProfile *> loadProfiles(const QHash<QString, QString> &defaults, const QString &location)
-{
- QDir profilesDir(location);
- QHash<QString, WebProfile *> list;
-
- if(profilesDir.exists()) {
- const QFileInfoList entries = profilesDir.entryInfoList({ "*.profile" }, QDir::Files | QDir::Readable);
- for(const auto &entry : entries) {
- auto *profile = new WebProfile(entry.baseName());
- loadProfile(profile, defaults, entry.absoluteFilePath());
- list.insert(entry.baseName(), profile);
- }
- }
-
- return list;
-}
-
Browser::Browser(int &argc, char *argv[])
: SingleApplication(argc, argv)
{
@@ -125,16 +108,24 @@ void Browser::setup(const QString &defaultProfile)
// load profiles
{
- auto *otr = new WebProfile(this);
- loadProfile(otr, m_config->section("profile"), QString::fromStdString(m_config->value<std::string>("profile.path").value()) + "/otr.ini");
- m_profiles.insert(tr("Off-the-record"), otr);
- m_profiles.unite(loadProfiles(m_config->section("profile"), QString::fromStdString(m_config->value<std::string>("profile.path").value())));
-
- if(defaultProfile == "") {
- WebProfile::setDefaultProfile(otr);
- } else {
- WebProfile::setDefaultProfile(m_profiles.value(defaultProfile));
+ const auto defaults = m_config->section("profile");
+ const QDir profilesDir(m_config->value<QString>("profile.path").value());
+
+ if(profilesDir.exists()) {
+ const auto entries = profilesDir.entryInfoList({"*.profile"}, QDir::Files | QDir::Readable);
+
+ for(const QFileInfo &f : entries) {
+ auto *profile = loadProfile(f.baseName(), defaults, f.absoluteFilePath());
+ m_profiles.insert(f.baseName(), profile);
+ }
+ }
+
+ // set default profile
+ if(!m_profiles.contains(defaultProfile)) {
+ // if this profile has not been added, it doesn't have a path
+ m_profiles.insert(defaultProfile, loadProfile(defaultProfile, defaults));
}
+ WebProfile::setDefaultProfile(m_profiles.value(defaultProfile));
}
// url request filter
diff --git a/src/mainwindow/widgets/tabwidget.cpp b/src/mainwindow/widgets/tabwidget.cpp
index 2858fb0..a3fcbdd 100644
--- a/src/mainwindow/widgets/tabwidget.cpp
+++ b/src/mainwindow/widgets/tabwidget.cpp
@@ -13,6 +13,7 @@
#include <QMenu>
#include <QTabBar>
#include "browser.h"
+#include <webprofile.h>
TabWidget::TabWidget(QWidget *parent)
: QTabWidget(parent)
@@ -62,10 +63,10 @@ TabWidget::TabWidget(QWidget *parent)
Q_CHECK_PTR(browser);
for(const QString &name : browser->profiles()) {
- auto *profileAction = loadProfile_menu->addAction(name);
auto *profile = browser->profile(name);
Q_CHECK_PTR(profile);
+ auto *profileAction = loadProfile_menu->addAction(profile->name());
connect(profileAction, &QAction::triggered, this, [this, profile]() {
int index = this->tabBar()->tabAt(mapFromGlobal(tabContextMenu->pos()));
auto *view = qobject_cast<WebView *>(this->widget(index));