aboutsummaryrefslogtreecommitdiff
path: root/src/browser.cpp
diff options
context:
space:
mode:
authorAqua-sama <aqua@iserlohn-fortress.net>2018-10-09 12:05:28 +0200
committerAqua-sama <aqua@iserlohn-fortress.net>2018-10-09 12:05:28 +0200
commit3639d5789259561c531a3481d7061a0cb492c644 (patch)
treec9c7ff04022b62cf5be4d4ea31bf28d966ccefda /src/browser.cpp
parentCreate .profile file when adding a new profile (diff)
downloadsmolbote-3639d5789259561c531a3481d7061a0cb492c644.tar.xz
Unlink plugins from lib/ libraries
Diffstat (limited to 'src/browser.cpp')
-rw-r--r--src/browser.cpp73
1 files changed, 47 insertions, 26 deletions
diff --git a/src/browser.cpp b/src/browser.cpp
index 97020bc..0ad1071 100644
--- a/src/browser.cpp
+++ b/src/browser.cpp
@@ -28,6 +28,8 @@
#include <web/profilemanager.h>
#include <web/webprofile.h>
#include "webengine/filter.h"
+#include <QPluginLoader>
+#include <plugininterface.h>
Browser::Browser(int &argc, char *argv[], bool allowSecondary)
: SingleApplication(argc, argv, allowSecondary, SingleApplication::User | SingleApplication::SecondaryNotification | SingleApplication::ExcludeAppVersion)
@@ -49,23 +51,48 @@ Browser::~Browser()
void Browser::about()
{
auto *dlg = new AboutDialog;
- for(const Plugin &plugin : qAsConst(m_plugins)) {
- dlg->addPlugin(plugin.name, plugin.author, plugin.shortcut.toString());
+ for(const QPluginLoader *loader : qAsConst(m_plugins)) {
+ const auto meta = loader->metaData().value("MetaData").toObject();
+ dlg->addPlugin(meta.value("name").toString(), meta.value("author").toString(), meta.value("shortcut").toString());
}
dlg->exec();
}
-QPair<QString, WebProfile *> Browser::loadProfile(const QString &id)
+const QStringList Browser::configurationOptions() const
+{
+ QStringList options;
+ for(const auto &option : m_config->options()) {
+ options.append(QString::fromStdString(option->long_name()));
+ }
+ return options;
+}
+
+const QString Browser::configuration(const QString& key) const
+{
+ return m_config->value<QString>(qUtf8Printable(key)).value_or(QString());
+}
+
+void Browser::setConfiguration(const QString& key, const QString& value)
+{
+ m_config->setValue(qUtf8Printable(key), value);
+}
+
+const QList<QPair<QString, Profile *>> Browser::profileList() const
+{
+ QList<QPair<QString, Profile *>> profiles;
+ for(const QString &id : m_profileManager->idList()) {
+ profiles.append(qMakePair(id, m_profileManager->profile(id)));
+ }
+ return profiles;
+}
+
+QPair<QString, Profile *> Browser::loadProfile(const QString &id, bool isOffTheRecord)
{
WebProfile *profile = nullptr;
if(QFile::exists(id)) {
- //qDebug("id %s exists", qUtf8Printable(id));
profile = m_profileManager->loadProfile(id);
} else {
- QDir profileDir(m_config->value<QString>("profile.path").value());
- //qDebug("id %s --> %s", qUtf8Printable(id), qUtf8Printable(profileDir.absoluteFilePath(id + ".profile")));
- profile = m_profileManager->loadProfile(profileDir.absoluteFilePath(id + ".profile"));
- profile->setName(id);
+ profile = m_profileManager->createProfile(id, isOffTheRecord);
}
connect(profile, &WebProfile::downloadRequested, m_downloads.get(), &DownloadsWidget::addDownload);
auto *interceptor = new UrlRequestInterceptor(m_urlFilter.get(), profile, profile);
@@ -74,6 +101,11 @@ QPair<QString, WebProfile *> Browser::loadProfile(const QString &id)
return QPair<QString, WebProfile *>(m_profileManager->id(profile), profile);
}
+void Browser::removeProfile(const QString &id)
+{
+ m_profileManager->deleteProfile(id);
+}
+
void Browser::setConfiguration(std::unique_ptr<Configuration> &config)
{
Q_ASSERT(config);
@@ -91,20 +123,10 @@ ProfileManager *Browser::getProfileManager()
return m_profileManager;
}
-void Browser::registerPlugin(const Plugin &plugin)
-{
- Q_ASSERT(m_config);
-
- auto *p = qobject_cast<PluginInterface *>(plugin.instance);
- if(p != nullptr) {
- p->setBrowserInterface(this);
- m_plugins.append(plugin);
- }
-}
-
-void Browser::setup()
+void Browser::setup(QVector<QPluginLoader *> plugins)
{
Q_ASSERT(m_config);
+ m_plugins = plugins;
auto stylesheet = m_config->value<QString>("browser.stylesheet");
if(stylesheet) {
@@ -132,7 +154,7 @@ void Browser::setup()
const QString id = m_config->value<QString>("profile.default").value();
auto *profile = m_profileManager->profile(id);
if(profile == nullptr) {
- profile = this->loadProfile(id).second;
+ profile = qobject_cast<WebProfile *>(loadProfile(id).second);
}
WebProfile::setDefaultProfile(profile);
@@ -225,13 +247,12 @@ MainWindow *Browser::createWindow()
});
window->addAction(MainWindow::ToolsMenu, downloadsAction);
- for(const Plugin &p : qAsConst(m_plugins)) {
- auto *plugin = qobject_cast<PluginInterface *>(p.instance);
+ for(QPluginLoader *loader : qAsConst(m_plugins)) {
+ const auto *plugin = qobject_cast<PluginInterface *>(loader->instance());
Q_CHECK_PTR(plugin);
- auto *pluginAction = new QAction(p.name, window);
- pluginAction->setShortcut(p.shortcut);
-
+ auto *pluginAction = new QAction(loader->metaData().value("MetaData").toObject().value("name").toString(), window);
+ pluginAction->setShortcut(QKeySequence::fromString(loader->metaData().value("MetaData").toObject().value("shortcut").toString()));
connect(pluginAction, &QAction::triggered, window, [=]() {
plugin->createWidget(window)->exec();
});