aboutsummaryrefslogtreecommitdiff
path: root/src/browser.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/browser.cpp')
-rw-r--r--src/browser.cpp222
1 files changed, 45 insertions, 177 deletions
diff --git a/src/browser.cpp b/src/browser.cpp
index 14fee3e..60b8810 100644
--- a/src/browser.cpp
+++ b/src/browser.cpp
@@ -21,16 +21,14 @@
#include "browser.h"
#include "mainwindow.h"
#include <QtWebEngine>
-#include <QMessageBox>
#include <QDir>
-#include <QPluginLoader>
-#include "interfaces.h"
Browser::Browser(int &argc, char *argv[]) :
SingleApplication(argc, argv)
{
setApplicationName("smolbote");
+ setWindowIcon(QIcon(":/icon.svg"));
#ifdef GIT_VERSION
setApplicationVersion(GIT_VERSION);
#else
@@ -40,95 +38,58 @@ Browser::Browser(int &argc, char *argv[]) :
Browser::~Browser()
{
- qDeleteAll(m_windows);
- m_windows.clear();
+// qDeleteAll(m_windows);
+// m_windows.clear();
}
-QString Browser::applicationLongVersion() const
+void Browser::setConfiguration(std::shared_ptr<Configuration> &config)
{
-#ifdef GIT_DESCRIBE
- return QString(GIT_DESCRIBE);
-#else
- return applicationVersion();
-#endif
+ m_config = config;
+
+// m_bookmarksManager = std::make_shared<BookmarksWidget>(QString::fromStdString(m_config->value<std::string>("bookmarks.path").value()));
+// m_downloadManager = std::make_shared<DownloadsWidget>(QString::fromStdString(m_config->value<std::string>("downloads.path").value()));
}
-void Browser::loadPlugins()
+void Browser::loadProfiles()
{
- // Loading plugins
- qDebug(">> Looking for plugins...");
+ Q_ASSERT(m_config);
- // Look for plugins in "../lib/smolbote/plugins"
- QDir dir = QDir::current();
- dir.cd("../lib/smolbote/plugins");
+ const QString &path = QString::fromStdString(m_config->value<std::string>("profile.path").value());
- // Load all plugins
- const QStringList files = dir.entryList(QDir::Files | QDir::Readable);
- for(const QString &filename : files) {
- qDebug("Loading %s", qUtf8Printable(filename));
+#ifdef QT_DEBUG
+ qDebug(">> Looking for profiles... [%s]", qUtf8Printable(path));
+#endif
- QPluginLoader loader(dir.absoluteFilePath(filename));
- QObject *plugin = loader.instance();
- if(plugin) {
- PluginInterface *p = qobject_cast<PluginInterface *>(plugin);
- if(p) {
- qDebug("Successfully loaded plugin [name = %s]", qUtf8Printable(p->name()));
- m_plugin = plugin;
- }
- } else {
- qDebug("Plugin load failed");
- }
- }
+ // Build a profile list from the folders in the profile.path
+ QDir profileDir(path);
+ const QStringList profileList = profileDir.entryList(QDir::Dirs | QDir::NoDotAndDotDot);
- qDebug("<< Plugins end...");
-}
-
-void Browser::loadProfiles()
-{
- qDebug(">> Looking for profiles...");
- profile("");
- QDir dir(settings()->value("browser.profile.path").toString());
- const QStringList profileList = dir.entryList(QDir::Dirs | QDir::NoDotAndDotDot);
for(const QString &name : profileList) {
- qDebug("- Adding profile %s", qUtf8Printable(name));
- profile(name);
+ m_profiles.insert(name, new WebEngineProfile(name, profileDir.absoluteFilePath(name), this));
}
- qDebug("<< Profiles end...");
- //connect(this, SIGNAL(messageAvailable(QStringList)), this, SLOT(addWindow(QStringList)));
- connect(this, &Browser::messageAvailable, this, [&](const QHash<QString, QVariant> params) {
+ // Also add the Off-the-record profile
+ m_profiles.insert("", new WebEngineProfile(this));
- //qDebug("Creating new window for [%s]", qUtf8Printable(params["urls"].toString()));
+ // set default profile
+ m_defaultProfile = m_profiles[QString::fromStdString(m_config->value<std::string>("browser.profile").value())];
- createWindow(params);
- });
-}
-
-Browser *Browser::instance()
-{
- return static_cast<Browser *>(QCoreApplication::instance());
-}
-
-Settings *Browser::settings()
-{
- Q_ASSERT(m_settings);
- return m_settings.get();
+#ifdef QT_DEBUG
+ qDebug("<< Profiles end...");
+#endif
}
-BookmarksWidget *Browser::bookmarks()
+/*
+std::shared_ptr<BookmarksWidget> &Browser::bookmarks()
{
- if(!m_bookmarksManager) {
- m_bookmarksManager = QSharedPointer<BookmarksWidget>(new BookmarksWidget(settings()->value("bookmarks.path").toString()), &QObject::deleteLater);
- }
- return m_bookmarksManager.data();
+ Q_ASSERT(m_bookmarksManager);
+ return m_bookmarksManager;
}
-DownloadsWidget *Browser::downloads()
+std::shared_ptr<DownloadsWidget> &Browser::downloads()
{
- if(!m_downloadManager) {
- m_downloadManager = QSharedPointer<DownloadsWidget>(new DownloadsWidget(settings()->value("downloads.path").toString()), &QObject::deleteLater);
- }
- return m_downloadManager.data();
+ Q_ASSERT(m_downloadManager);
+ return m_downloadManager;
}
BlockerManager *Browser::blocklists()
@@ -139,52 +100,6 @@ BlockerManager *Browser::blocklists()
return m_blocklistManager;
}
-void Browser::loadSettings(const QString &path)
-{
- QString configLocation, defaultsLocation;
-
- // set custom config path if any
- if(!path.isEmpty()) {
- configLocation = path;
-
- } else {
- // no custom config has been set
- // check if config file exists for this user
- QString cpath = QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation) + "/poi.conf";
- if(QFile::exists(cpath)) {
- configLocation = cpath;
- }
- // else there is no user overrides
- }
-
- // set defaults location
- // check system-specific locations
-#ifdef Q_OS_LINUX
- if(QFile::exists("/usr/share/smolbote/poi.conf")) {
- defaultsLocation = "/usr/share/smolbote/poi.conf";
- } else if(QFile::exists("/usr/local/share/smolbote/poi.conf")) {
- defaultsLocation = "/usr/local/share/smolbote/poi.conf";
- }
-#endif
-
- // if no default config is found, then use the built-in one
- if(defaultsLocation.isEmpty()) {
- defaultsLocation = ":/poi.toml";
- }
-
- m_settings = std::unique_ptr<Settings>(new Settings(configLocation, defaultsLocation));
-
-#ifdef QT_DEBUG
- if(m_settings->isEmpty()) {
- // There are no keys in the settings
- QMessageBox::information(0,
- tr("Configuration is empty"),
- tr("The configuration file <i>%1</i> is empty.<br>"
- "Using default values from <i>%2</i>.").arg(configLocation, defaultsLocation));
- }
-#endif
-}
-
MainWindow *Browser::activeWindow()
{
if(m_windows.empty()) {
@@ -197,73 +112,30 @@ MainWindow *Browser::activeWindow()
}
}
return m_windows.first().data();
-}
+}*/
-MainWindow *Browser::createWindow(const QHash<QString, QVariant> options)
+MainWindow *Browser::createWindow()
{
- Q_ASSERT(options.contains("urls"));
+ // the window will delete itself when it closes, so we don't need to delete it
+ MainWindow *window = new MainWindow(m_config);
+ window->setProfile(m_defaultProfile);
- MainWindow *w = new MainWindow();
+ m_windows.append(window);
- m_windows.append(QPointer<MainWindow>(w));
- connect(w, &MainWindow::destroyed, this, [&]() {
- clean();
+ // has to be window.get(), but can't be *window
+ connect(window, &MainWindow::destroyed, this, [this, window]() {
+ m_windows.removeOne(window);
});
+ window->show();
- QString profileName;
- if(options.contains("profile")) {
- profileName = options.value("profile").toString();
- }
- const QStringList urls = options.value("urls").toStringList();
- if(urls.isEmpty()) {
- w->newTab(profile(profileName)->homepage());
- } else {
- for(const QString url : urls) {
- w->newTab(QUrl::fromUserInput(url));
- }
- }
-
- w->show();
-
- return w;
-}
-
-void Browser::clean()
-{
- for(int i = m_windows.count() - 1; i >= 0; i--) {
- if(m_windows[i].isNull()) {
- m_windows.removeAt(i);
-#ifdef QT_DEBUG
- qDebug("Removed deleted window from window list");
-#endif
- }
- }
+ return window;
}
WebEngineProfile* Browser::profile(const QString name)
{
- if(!m_profiles.contains(name)) {
- if(name.isEmpty()) {
- // Create off-the-record profile
- m_profiles.insert(name, new WebEngineProfile(this));
- } else {
- // Create regular profile
- m_profiles.insert(name, new WebEngineProfile(name, this));
- }
-
- if(!m_urlRequestInterceptor) {
- m_urlRequestInterceptor = new UrlRequestInterceptor(this);
- m_urlRequestInterceptor->setSubscription(blocklists());
- }
-
- m_profiles[name]->setRequestInterceptor(m_urlRequestInterceptor);
-
- connect(m_profiles[name], SIGNAL(downloadRequested(QWebEngineDownloadItem*)), downloads(), SLOT(addDownload(QWebEngineDownloadItem*)));
- }
-
return m_profiles[name];
}
-
+/*
QStringList Browser::profiles()
{
QStringList l;
@@ -273,8 +145,4 @@ QStringList Browser::profiles()
}
return l;
}
-
-QObject *Browser::plugin(const QString name)
-{
- return m_plugin;
-}
+*/