diff options
Diffstat (limited to '')
| -rw-r--r-- | config.lua | 3 | ||||
| -rw-r--r-- | src/Configuration.hpp | 22 | ||||
| -rw-r--r-- | src/WindowActionRouter.cpp | 5 | ||||
| -rw-r--r-- | src/WindowMediator.cpp | 4 | ||||
| -rw-r--r-- | src/WindowMediator.hpp | 1 | ||||
| -rw-r--r-- | src/widgets/WebViewStack.hpp | 3 |
6 files changed, 32 insertions, 6 deletions
@@ -16,6 +16,7 @@ end web.set('new_view_url', 'https://lite.duckduckgo.com') web.set('close_window_when_no_views', true) +web.set('user_agent', 'MacOS | Safari - $500 edition') local dmenu = require 'null-browser.extras.dmenu' local history = require 'null-browser.extras.history' @@ -41,7 +42,7 @@ end -- Open in new view web.keymap.set('n', 'o', function() - print(web.get('new_view_url')) + print(web.get('new_view_url'), web.get('user_agent')) dmenu.select(history.list(), { prompt = 'Open view:' }, function(err, result) if err or not result then return end web.view.create(to_url(result)) diff --git a/src/Configuration.hpp b/src/Configuration.hpp index a1eca51..3310262 100644 --- a/src/Configuration.hpp +++ b/src/Configuration.hpp @@ -1,6 +1,7 @@ #pragma once #include <QtCore> +#include <qwebengineprofile.h> #include <unordered_map> class Configuration : public QObject { @@ -10,24 +11,35 @@ private: std::unordered_map<QString, QVariant> config_map{ {"new_view_url", "https://duckduckgo.com"}, {"close_window_when_no_views", true}, + {"user_agent", QWebEngineProfile::defaultProfile()->httpUserAgent()}, }; public: using QObject::QObject; void set_config(const QString &name, const QVariant &value) { - qDebug() << "config update" << name << value; config_map[name] = value; - emit config_updated(name, value); + on_update(name, value); } - QVariant get_config(const QString &name) const { return config_map.at(name); } + QVariant get_config(const QString &name, QVariant default_value = "") const { + if (!config_map.contains(name)) return default_value; + + return config_map.at(name); + } - QString new_view_url() const { return get_config("new_view_url").toString(); } bool close_window_when_no_views() const { return get_config("close_window_when_no_views").toBool(); } + QString new_view_url() const { return get_config("new_view_url").toString(); } + QString user_agent() const { return get_config("user_agent").toString(); } + +private: + void on_update(const QString &name, const QVariant &value) { + if (name == "user_agent") + emit user_agent_updated(value.toString()); + } signals: - void config_updated(const QString &name, const QVariant &value); + void user_agent_updated(const QString &value); }; diff --git a/src/WindowActionRouter.cpp b/src/WindowActionRouter.cpp index bba15d1..8aa4cd9 100644 --- a/src/WindowActionRouter.cpp +++ b/src/WindowActionRouter.cpp @@ -21,6 +21,11 @@ void WindowActionRouter::initialize(Configuration *config) { connect(&runtime, &LuaRuntime::keymap_added, this, &WindowActionRouter::add_keymap); connect(&runtime, &LuaRuntime::config_updated, configuration, &Configuration::set_config); + connect(configuration, &Configuration::user_agent_updated, this, [this](const QString &user_agent) { + for (auto &win_match : window_map) { + win_match.second->mediator()->set_user_agent(user_agent); + } + }); connect(&runtime, &LuaRuntime::history_back_requested, this, [this](WebViewId webview_id, qsizetype history_index) { diff --git a/src/WindowMediator.cpp b/src/WindowMediator.cpp index 942207d..a2ff2a6 100644 --- a/src/WindowMediator.cpp +++ b/src/WindowMediator.cpp @@ -1,6 +1,7 @@ #include <QList> #include <QWidget> #include <QtCore> +#include <qwebengineprofile.h> #include "WindowMediator.hpp" #include "widgets/WebViewStack.hpp" @@ -15,6 +16,9 @@ WindowMediator::WindowMediator(WebViewStack *webview_stack) : webview_stack(webv connect(this, &WindowMediator::webview_closed, webview_stack, &WebViewStack::close); connect(this, &WindowMediator::webview_selected, webview_stack, &WebViewStack::focus_webview); + auto *profile = webview_stack->get_profile(); + connect(this, &WindowMediator::set_user_agent, profile, &QWebEngineProfile::setHttpUserAgent); + // Delegate signal connect(webview_stack, &WebViewStack::new_window_requested, this, &WindowMediator::new_window_requested); diff --git a/src/WindowMediator.hpp b/src/WindowMediator.hpp index ea1dd52..f1e99ca 100644 --- a/src/WindowMediator.hpp +++ b/src/WindowMediator.hpp @@ -25,6 +25,7 @@ signals: void webview_selected(WebViewId webview_id); void new_window_requested(const QUrl &url); void close_window_requested(); + void set_user_agent(const QString &user_agent); private: WebViewStack *webview_stack; diff --git a/src/widgets/WebViewStack.hpp b/src/widgets/WebViewStack.hpp index b36c389..8f66c09 100644 --- a/src/widgets/WebViewStack.hpp +++ b/src/widgets/WebViewStack.hpp @@ -3,6 +3,7 @@ #include <QStackedLayout> #include <QWebEngineProfile> #include <cstdint> +#include <qwebengineprofile.h> #include <vector> #include "Configuration.hpp" @@ -39,6 +40,8 @@ public: bool has_webview(WebViewId webview_id); + QWebEngineProfile *get_profile() { return profile; } + /// @deprecated TODO: Remove std::vector<QUrl> urls(); /// @deprecated TODO: Remove |
