aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAkshay Nair <phenax5@gmail.com>2025-04-12 19:35:54 +0530
committerAkshay Nair <phenax5@gmail.com>2025-04-12 21:04:16 +0530
commitbbe50215cbb9078ba457f93a5e90096e844c611a (patch)
tree0726730396510a2ea8cd18cee72afb5c7c1edc41
parentc8352009ceb6b9240ef7c1ad5be93f42312b59a2 (diff)
downloadnull-browser-bbe50215cbb9078ba457f93a5e90096e844c611a.tar.gz
null-browser-bbe50215cbb9078ba457f93a5e90096e844c611a.zip
Add user agent configuration
Diffstat (limited to '')
-rw-r--r--config.lua3
-rw-r--r--src/Configuration.hpp22
-rw-r--r--src/WindowActionRouter.cpp5
-rw-r--r--src/WindowMediator.cpp4
-rw-r--r--src/WindowMediator.hpp1
-rw-r--r--src/widgets/WebViewStack.hpp3
6 files changed, 32 insertions, 6 deletions
diff --git a/config.lua b/config.lua
index 165012d..e434ba9 100644
--- a/config.lua
+++ b/config.lua
@@ -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