aboutsummaryrefslogtreecommitdiff
path: root/src/browser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/browser.cpp')
-rw-r--r--src/browser.cpp99
1 files changed, 27 insertions, 72 deletions
diff --git a/src/browser.cpp b/src/browser.cpp
index 61be3b0..2277e54 100644
--- a/src/browser.cpp
+++ b/src/browser.cpp
@@ -10,6 +10,7 @@
#include "aboutdialog.h"
#include "aboutplugin.h"
#include "adblock/adblocklist.h"
+#include "applicationmenu.h"
#include "bookmarks/bookmarkswidget.h"
#include "configuration.h"
#include "downloadswidget.h"
@@ -19,19 +20,12 @@
#include "mainwindow/menubar.h"
#include "smolbote/plugininterface.hpp"
#include "subwindow/subwindow.h"
-#include "urlfilter.h"
#include "util.h"
#include "webengine/urlinterceptor.h"
#include "webengine/webprofile.h"
#include "webengine/webprofilemanager.h"
#include "webengine/webview.h"
#include <QAction>
-#include <QDir>
-#include <QFileDialog>
-#include <QFileInfo>
-#include <QFileInfoList>
-#include <QJsonArray>
-#include <QJsonDocument>
#include <QLibraryInfo>
#include <QPluginLoader>
#include <QTimer>
@@ -89,31 +83,13 @@ void Browser::about()
dlg->exec();
}
-void Browser::loadProfiles(const QStringList &profilePaths)
+void Browser::aboutPlugins()
{
- Configuration conf;
-
- for(const QString &path : profilePaths) {
- const QString id = QFileInfo(path).baseName();
-
- auto *profile = m_profileManager->add(id, path);
- connect(profile, &WebProfile::downloadRequested, m_downloads.get(), &DownloadsWidget::addDownload);
-
- auto *interceptor = new UrlRequestInterceptor(profile, profile);
- for(UrlFilter *filter : qAsConst(m_filters)) {
- interceptor->addFilter(filter);
- }
-
- const auto headers = conf.value<QStringList>("filter.header").value_or(QStringList());
- for(const QString &header : headers) {
- const auto h = header.split(QLatin1String(":"));
- if(h.length() == 2)
- interceptor->addHttpHeader(h.at(0).toLatin1(), h.at(1).toLatin1());
- }
- profile->setUrlRequestInterceptor(interceptor);
-
- spdlog::info("Added profile\t{}{}\t{}", qUtf8Printable(id), profile->isOffTheRecord() ? "*" : "", qUtf8Printable(profile->name()));
+ auto *dlg = new AboutPluginDialog;
+ for(auto *info : m_plugins) {
+ dlg->add(info->loader);
}
+ dlg->exec();
}
void Browser::loadPlugins(const QStringList &paths, const std::function<void(const QPluginLoader *)> &callback)
@@ -161,38 +137,23 @@ void Browser::setup()
// downloads
m_downloads = std::make_unique<DownloadsWidget>(conf.value<QString>("downloads.path").value());
- // url request filter
- for(const QString &hostlist : Util::files(conf.value<QString>("filter.hosts").value_or(QString()))) {
- QFile f(hostlist);
- if(f.open(QIODevice::ReadOnly | QIODevice::Text)) {
- m_filters.append(new HostList(&f));
- f.close();
- }
- }
- for(const QString &adblock : Util::files(conf.value<QString>("filter.adblock").value_or(QString()))) {
- QFile f(adblock);
- if(f.open(QIODevice::ReadOnly | QIODevice::Text)) {
- m_filters.append(new AdBlockList(&f));
- f.close();
- }
- }
- // cookie request filter
-
// load profiles
- m_profileManager = new WebProfileManager(this);
- WebProfileManager::setInstance(m_profileManager);
- loadProfiles(Util::files(conf.value<QString>("profile.path").value(), { "*.profile" }));
-
- // set default profile
{
- const QString id = conf.value<QString>("profile.default").value();
- auto *profile = m_profileManager->profile(id);
- if(profile == nullptr) {
- spdlog::error("Unknown default profile, conjuring one up...");
- profile = m_profileManager->add("default", QString(), true);
+ const auto profiles = Util::files(conf.value<QString>("profile.path").value(), { "*.profile" });
+ const auto search = conf.value<QString>("profile.search").value();
+ const auto homepage = QUrl::fromUserInput(conf.value<QString>("profile.homepage").value());
+ const auto newtab = QUrl::fromUserInput(conf.value<QString>("profile.newtab").value());
+ const auto default_id = conf.value<QString>("profile.default").value();
+ m_profileManager = std::make_unique<WebProfileManager<false>>(profiles, default_id, search, homepage, newtab);
+ m_profileManager->make_global();
+
+ for(const auto &id : m_profileManager->idList()) {
+ spdlog::info("Added profile\t{}", qUtf8Printable(id));
}
- spdlog::info("Default profile\t{}{}\t{}", qUtf8Printable(id), profile->isOffTheRecord() ? "*" : "", qUtf8Printable(profile->name()));
- WebProfile::setDefaultProfile(profile);
+
+ // set default profile
+ auto *profile = m_profileManager->profile(default_id);
+ spdlog::info("Default profile\t{}{}\t{}", qUtf8Printable(default_id), profile->isOffTheRecord() ? "*" : "", qUtf8Printable(profile->name()));
}
// bookmarks
@@ -243,15 +204,16 @@ void Browser::open(const QVector<Session::MainWindow> &data, bool merge)
}
for(const auto &windowData : data) {
- // the window will delete itself when it closes, so we don't need to delete it
- auto *window = new MainWindow(windowData);
- connect(window->addressBar, &AddressBar::complete, m_bookmarks.get(), &BookmarksWidget::search);
-
+ auto *menu = new ApplicationMenu(this);
for(auto *info : qAsConst(m_plugins)) {
- addPluginTo(info, window);
+ menu->addPlugin(info->loader);
}
+ auto *window = new MainWindow(windowData, menu);
+ connect(window->addressBar, &AddressBar::complete, m_bookmarks.get(), &BookmarksWidget::search);
+
m_windows.append(window);
+ // the window will delete itself when it closes, so we don't need to delete it
connect(window, &MainWindow::destroyed, this, [this, window]() {
m_windows.removeOne(window);
});
@@ -262,15 +224,9 @@ void Browser::addPluginTo(PluginInfo *info, MainWindow *window)
{
QPluginLoader *loader = info->loader;
auto *pluginMenu = new QMenu(loader->metaData().value("MetaData").toObject().value("name").toString());
- window->m_menuBar->insertPlugin(pluginMenu);
+ //window->m_menuBar->insertPlugin(pluginMenu);
info->menus.append(pluginMenu);
- auto *aboutAction = pluginMenu->addAction(tr("About"));
- connect(aboutAction, &QAction::triggered, this, [loader, window]() {
- auto *dlg = new AboutPluginDialog(loader, window);
- dlg->exec();
- });
-
auto *runAction = pluginMenu->addAction(tr("Run"));
runAction->setShortcut(QKeySequence::fromString(loader->metaData().value("MetaData").toObject().value("shortcut").toString()));
@@ -284,7 +240,6 @@ void Browser::addPluginTo(PluginInfo *info, MainWindow *window)
auto *removeAction = pluginMenu->addAction(tr("Remove"));
connect(removeAction, &QAction::triggered, this, [this, info]() {
- ;
m_plugins.removeOne(info);
delete info;
});