diff options
Diffstat (limited to 'src/browser.cpp')
-rw-r--r-- | src/browser.cpp | 99 |
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; }); |