aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAqua-sama <aqua@iserlohn-fortress.net>2018-05-16 18:20:25 +0200
committerAqua-sama <aqua@iserlohn-fortress.net>2018-05-16 18:20:25 +0200
commit6d095aca7f59dff26df0e2b5283d926feff5b477 (patch)
treeda26b56719aefee7eec5b81a47b6b6ad49125437
parentMove help and version functions to main (out of Configuration) (diff)
downloadsmolbote-6d095aca7f59dff26df0e2b5283d926feff5b477.tar.xz
Plugin command-line parameters
-rw-r--r--lib/configuration/configuration.cpp3
-rw-r--r--plugins/ProfileEditor/profileeditorplugin.cpp10
-rw-r--r--plugins/ProfileEditor/profileeditorplugin.h1
-rw-r--r--plugins/interfaces.h3
-rw-r--r--src/browser.cpp17
-rw-r--r--src/browser.h8
-rw-r--r--src/main.cpp16
7 files changed, 55 insertions, 3 deletions
diff --git a/lib/configuration/configuration.cpp b/lib/configuration/configuration.cpp
index def997d..f2ec417 100644
--- a/lib/configuration/configuration.cpp
+++ b/lib/configuration/configuration.cpp
@@ -50,6 +50,9 @@ Configuration::Configuration()
("config,c", po::value<std::string>()->default_value(defaultUserConfigLocation()), "Set the configuration file.")
("socket,s", po::value<std::string>()->default_value(defaultSocketPath()), "Local server socket")
+ ("command", po::value<std::string>(), "Run a plugin command")
+ ("commands", "List all plugin commands")
+
("url", po::value<std::vector<std::string>>(), "URLs")
;
diff --git a/plugins/ProfileEditor/profileeditorplugin.cpp b/plugins/ProfileEditor/profileeditorplugin.cpp
index 7a92e51..fc65350 100644
--- a/plugins/ProfileEditor/profileeditorplugin.cpp
+++ b/plugins/ProfileEditor/profileeditorplugin.cpp
@@ -8,6 +8,16 @@
#include "profileeditorplugin.h"
#include "forms/profileview.h"
+#include <QHash>
+
+QHash<QString, std::function<void()>> ProfileEditorPlugin::commands()
+{
+ QHash<QString, std::function<void()>> hash;
+ hash.insert("profileEditor:about", []() {
+ qDebug("ProfileEditor for smolbote");
+ });
+ return hash;
+}
QDialog *ProfileEditorPlugin::createWidget(QWebEngineProfile *profile, QWidget *parent)
{
diff --git a/plugins/ProfileEditor/profileeditorplugin.h b/plugins/ProfileEditor/profileeditorplugin.h
index 899c51a..88a0783 100644
--- a/plugins/ProfileEditor/profileeditorplugin.h
+++ b/plugins/ProfileEditor/profileeditorplugin.h
@@ -21,6 +21,7 @@ class ProfileEditorPlugin : public QObject, public PluginInterface, public Profi
public:
// PluginInterface
+ QHash<QString, std::function<void()>> commands() override;
// ProfileInterface
QDialog *createWidget(QWebEngineProfile *profile, QWidget *parent) override;
diff --git a/plugins/interfaces.h b/plugins/interfaces.h
index 46cf24a..ad3df97 100644
--- a/plugins/interfaces.h
+++ b/plugins/interfaces.h
@@ -11,6 +11,7 @@
#include <QtPlugin>
#include <memory>
+#include <functional>
class QString;
class QAction;
@@ -26,13 +27,13 @@ class PluginInterface
{
public:
virtual ~PluginInterface() = default;
+ virtual QHash<QString, std::function<void()>> commands() = 0;
};
class ProfileInterface
{
public:
virtual ~ProfileInterface() = default;
-
virtual QDialog *createWidget(QWebEngineProfile *profile, QWidget *parent) = 0;
};
diff --git a/src/browser.cpp b/src/browser.cpp
index 09db2d1..91ba4f8 100644
--- a/src/browser.cpp
+++ b/src/browser.cpp
@@ -82,6 +82,14 @@ void Browser::setup(const QString &defaultProfile)
// plugins
m_plugins.append(loadPlugins(QString::fromStdString(m_config->value<std::string>("plugins.path").value())));
+ // register commands
+ for(Plugin p : m_plugins) {
+ auto *plugin = qobject_cast<PluginInterface *>(p.instance.get());
+ if(plugin) {
+ m_commands.unite(plugin->commands());
+ }
+ }
+
// url request filter
m_urlFilter = std::make_shared<UrlRequestInterceptor>(QString::fromStdString(m_config->value<std::string>("filter.path").value()));
@@ -113,6 +121,15 @@ void Browser::setup(const QString &defaultProfile)
}
}
+void Browser::command(const QString &command)
+{
+ if(m_commands.contains(command)) {
+ m_commands.value(command)();
+ } else {
+ qWarning("No such command: %s", qUtf8Printable(command));
+ }
+}
+
void Browser::createSession(const QString &profileName, bool newWindow, const QStringList &urls)
{
if(m_windows.isEmpty()) {
diff --git a/src/browser.h b/src/browser.h
index 01de9bb..e5df9de 100644
--- a/src/browser.h
+++ b/src/browser.h
@@ -14,6 +14,7 @@
#include <QVector>
#include <memory>
#include <interfaces.h>
+#include <functional>
QVector<Plugin> loadPlugins(const QString &location);
@@ -34,6 +35,12 @@ public:
void setConfiguration(std::shared_ptr<Configuration> &config);
void setup(const QString &defaultProfile);
+ void command(const QString &command);
+ QStringList commands() const
+ {
+ return m_commands.keys();
+ }
+
public slots:
void createSession(const QString &profileName, bool newWindow, const QStringList &urls);
MainWindow *createWindow();
@@ -46,6 +53,7 @@ private:
QVector<MainWindow *> m_windows;
QVector<Plugin> m_plugins;
+ QHash<QString, std::function<void()>> m_commands;
};
#endif // SMOLBOTE_BROWSER_H
diff --git a/src/main.cpp b/src/main.cpp
index f1ac1ae..d578d24 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -49,6 +49,20 @@ int main(int argc, char **argv)
app.setAttribute(Qt::AA_DontCreateNativeWidgetSiblings, true);
app.setConfiguration(config);
+ app.setup(QString::fromStdString(config->value<std::string>("profile.default").value()));
+
+ if(config->exists("commands")) {
+ for(const QString &cmd : app.commands()) {
+ std::cout << cmd.toStdString() << std::endl;
+ }
+ return 0;
+ }
+
+ if(config->exists("command")) {
+ app.command(QString::fromStdString(config->value<std::string>("command").value()));
+ return 0;
+ }
+
// set up socket
bool isSingleInstance = app.bindLocalSocket(QString::fromStdString(config->value<std::string>("socket").value()));
#ifdef QT_DEBUG
@@ -66,12 +80,10 @@ int main(int argc, char **argv)
}
}
- app.setup(QString::fromStdString(config->value<std::string>("profile.default").value()));
QObject::connect(&app, &Browser::messageAvailable, &app, &Browser::createSession);
}
app.sendMessage("", false, config->positionalArguments());
-
if(isSingleInstance)
return app.exec();
else