From bbe50215cbb9078ba457f93a5e90096e844c611a Mon Sep 17 00:00:00 2001 From: Akshay Nair Date: Sat, 12 Apr 2025 19:35:54 +0530 Subject: Add user agent configuration --- src/Configuration.hpp | 22 +++++++++++++++++----- src/WindowActionRouter.cpp | 5 +++++ src/WindowMediator.cpp | 4 ++++ src/WindowMediator.hpp | 1 + src/widgets/WebViewStack.hpp | 3 +++ 5 files changed, 30 insertions(+), 5 deletions(-) (limited to 'src') 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 +#include #include class Configuration : public QObject { @@ -10,24 +11,35 @@ private: std::unordered_map 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 #include #include +#include #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 #include #include +#include #include #include "Configuration.hpp" @@ -39,6 +40,8 @@ public: bool has_webview(WebViewId webview_id); + QWebEngineProfile *get_profile() { return profile; } + /// @deprecated TODO: Remove std::vector urls(); /// @deprecated TODO: Remove -- cgit v1.3.1