/* * 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/smolbote.hg * * SPDX-License-Identifier: GPL-3.0 */ #include "browser.h" #include "mainwindow/mainwindow.h" #include "mainwindow/window.h" #include "webengine/webprofile.h" #include #include #include #include #include #include "webengine/urlinterceptor.h" #include "addressbar/urllineedit.h" Browser::Browser(int &argc, char *argv[]) : SingleApplication(argc, argv) { setApplicationName("smolbote"); setWindowIcon(QIcon(":/icon.svg")); setApplicationVersion(SMOLBOTE_VERSION); } Browser::~Browser() { qDeleteAll(m_windows); m_windows.clear(); } void Browser::setConfiguration(std::shared_ptr &config) { Q_ASSERT(config); m_config = config; } void Browser::setup(const QString &defaultProfile) { Q_ASSERT_X(m_config, "Browser::setup", "Configuration not set"); // url request filter m_urlFilter = std::make_shared(QString::fromStdString(m_config->value("filter.path").value())); // cookie request filter // bookmarks m_bookmarks = std::make_shared(QString::fromStdString(m_config->value("bookmarks.path").value())); connect(m_bookmarks.get(), &BookmarksWidget::openUrl, this, [this](const QUrl &url) { m_windows.last()->createTab(url); }); // downloads m_downloads = std::make_shared(QString::fromStdString(m_config->value("downloads.path").value())); // load profiles if(defaultProfile == "") { auto *p = new WebProfile(this); p->setRequestInterceptor(m_urlFilter.get()); connect(p, &WebProfile::downloadRequested, m_downloads.get(), &DownloadsWidget::addDownload); WebProfile::setDefaultProfile(p); } else { auto *p = new WebProfile(defaultProfile, this); p->setRequestInterceptor(m_urlFilter.get()); connect(p, &WebProfile::downloadRequested, m_downloads.get(), &DownloadsWidget::addDownload); WebProfile::setDefaultProfile(p); } } void Browser::createSession(const QString &profileName, bool newWindow, const QStringList &urls) { if(m_windows.isEmpty()) { createWindow(); } auto *mainwindow = m_windows.last(); if(newWindow) { QUrl firstUrl = WebProfile::defaultProfile()->homepage(); if(!urls.isEmpty()) firstUrl = QUrl::fromUserInput(urls.at(0)); auto *w = mainwindow->createSubWindow(firstUrl); for(int i = 1; i < urls.count() - 1; i++) { w->addTab(QUrl::fromUserInput(urls.at(i))); } } else { for(const QString &url : urls) { mainwindow->createTab(QUrl::fromUserInput(url)); } } } MainWindow *Browser::createWindow() { // the window will delete itself when it closes, so we don't need to delete it MainWindow *window = new MainWindow(m_config); window->addressBar->setBookmarksManager(m_bookmarks.get()); window->createSubWindow(WebProfile::defaultProfile()->newtab()); auto *bookmarksAction = new QAction(tr("Bookmarks"), window); bookmarksAction->setShortcut(QKeySequence(QString::fromStdString(m_config->value("bookmarks.shortcut").value()))); connect(bookmarksAction, &QAction::triggered, window, [this, window]() { window->addDockWidget(Qt::RightDockWidgetArea, m_bookmarks.get()); }); window->addAction(MainWindow::ToolsMenu, bookmarksAction); auto *downloadsAction = new QAction(tr("Downloads"), window); downloadsAction->setShortcut(QKeySequence(QString::fromStdString(m_config->value("downloads.shortcut").value()))); connect(downloadsAction, &QAction::triggered, window, [this, window]() { window->addDockWidget(Qt::RightDockWidgetArea, m_downloads.get()); }); window->addAction(MainWindow::ToolsMenu, downloadsAction); m_windows.append(window); connect(window, &MainWindow::destroyed, this, [this, window]() { m_windows.removeOne(window); }); return window; }