aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorAkshay Nair <phenax5@gmail.com>2025-04-20 19:20:33 +0530
committerAkshay Nair <phenax5@gmail.com>2025-05-02 16:15:59 +0530
commit2f1e73741da625c173156102457d5442b27cd953 (patch)
treef59bd3f896fd5473d71a3fdaf7fa4833add248b5 /src
parent31872258b18e81d5f973080e5130ebf49db3271f (diff)
downloadnull-browser-2f1e73741da625c173156102457d5442b27cd953.tar.gz
null-browser-2f1e73741da625c173156102457d5442b27cd953.zip
Add configuration directory loading + --config-dir cli arg
Diffstat (limited to '')
-rw-r--r--src/Configuration.hpp12
-rw-r--r--src/LuaRuntime.cpp26
-rw-r--r--src/LuaRuntime.hpp3
-rw-r--r--src/main.cpp8
-rw-r--r--src/widgets/BrowserApp.cpp17
-rw-r--r--src/widgets/BrowserApp.hpp5
6 files changed, 53 insertions, 18 deletions
diff --git a/src/Configuration.hpp b/src/Configuration.hpp
index 3b491b2..1f861fa 100644
--- a/src/Configuration.hpp
+++ b/src/Configuration.hpp
@@ -1,5 +1,6 @@
#pragma once
+#include "utils.hpp"
#include <QtCore>
#include <qwebengineprofile.h>
#include <unordered_map>
@@ -13,7 +14,9 @@ private:
{"close_window_when_no_views", true},
{"user_agent", QWebEngineProfile::defaultProfile()->httpUserAgent()},
{"downloads_dir", QWebEngineProfile::defaultProfile()->downloadPath()},
+ {"app_data_dir", QStandardPaths::writableLocation(QStandardPaths::AppLocalDataLocation)},
};
+ QDir config_dir = QDir(QStandardPaths::writableLocation(QStandardPaths::AppConfigLocation));
public:
using QObject::QObject;
@@ -24,6 +27,9 @@ public:
}
QVariant get_config(const QString &name, QVariant default_value = "") const {
+ if (name == "config_dir") // readonly
+ return config_dir.path();
+
if (!config_map.contains(name))
return default_value;
@@ -37,6 +43,12 @@ public:
QString user_agent() const { return get_config("user_agent").toString(); }
QString downloads_dir() const { return get_config("downloads_dir").toString(); }
+ DEFINE_GETTER(get_config_dir, config_dir)
+ DEFINE_SETTER(set_config_dir, config_dir)
+
+ QString get_config_lua_init_file() const { return config_dir.filePath("init.lua"); }
+ QString get_config_lua_dir() const { return config_dir.filePath("lua"); }
+
private:
void on_update(const QString &name, const QVariant &value) {
if (name == "user_agent")
diff --git a/src/LuaRuntime.cpp b/src/LuaRuntime.cpp
index cb5a69a..b4c39a2 100644
--- a/src/LuaRuntime.cpp
+++ b/src/LuaRuntime.cpp
@@ -15,7 +15,7 @@ LuaRuntime::LuaRuntime() {
state = luaL_newstate();
luaL_openlibs(state);
- init_lua_package_path();
+ init_builtins_package_path();
init_web_api();
}
@@ -57,16 +57,9 @@ void LuaRuntime::init_web_api() {
});
}
-void LuaRuntime::init_lua_package_path() {
- auto lua_path = QString(PROJECT_LUA_PATH);
- preserve_top(state, {
- lua_getglobal(state, "package");
- lua_getfield(state, -1, "path");
- auto pkg_path = QString(lua_tostring(state, -1)) + ";" + lua_path;
- lua_pop(state, 1);
- lua_pushstring(state, pkg_path.toStdString().c_str());
- lua_setfield(state, -2, "path");
- });
+void LuaRuntime::init_builtins_package_path() {
+ auto builtins_lua_path = QString(PROJECT_LUA_PATH);
+ append_package_path(builtins_lua_path);
}
void LuaRuntime::evaluate(const QString &code) {
@@ -84,6 +77,17 @@ void LuaRuntime::evaluate(const QString &code) {
});
}
+void LuaRuntime::append_package_path(const QString &path) {
+ preserve_top(state, {
+ lua_getglobal(state, "package");
+ lua_getfield(state, -1, "path");
+ auto pkg_path = QString(lua_tostring(state, -1)) + ";" + path;
+ lua_pop(state, 1);
+ lua_pushstring(state, pkg_path.toStdString().c_str());
+ lua_setfield(state, -2, "path");
+ });
+}
+
void LuaRuntime::load_file_sync(const QString &path) {
preserve_top(state, {
if (luaL_dofile(state, path.toStdString().c_str()) != LUA_OK) {
diff --git a/src/LuaRuntime.hpp b/src/LuaRuntime.hpp
index d7ec1ae..abefd86 100644
--- a/src/LuaRuntime.hpp
+++ b/src/LuaRuntime.hpp
@@ -34,6 +34,7 @@ public:
void evaluate(const QString &code);
void load_file_sync(const QString &path);
+ void append_package_path(const QString &path);
void stop_event_loop();
void start_event_loop();
@@ -61,7 +62,7 @@ signals:
protected:
LuaRuntime();
~LuaRuntime() override;
- void init_lua_package_path();
+ void init_builtins_package_path();
void init_web_api();
private:
diff --git a/src/main.cpp b/src/main.cpp
index dc51342..dc67c8a 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -12,6 +12,7 @@ QCommandLineParser *create_cli_parser() {
parser->addPositionalArgument("url", "URL(s) to open", "[url]");
parser->addOptions({
{{"e", "expr"}, "Lua expression to execute", "lua"},
+ {{"c", "config-dir"}, "Config directory for null browser", "dir"},
});
return parser;
@@ -27,10 +28,15 @@ int main(int argc, char *argv[]) {
auto urls = parser->positionalArguments();
auto lua_expr = parser->value("expr");
+ auto config_dir = parser->value("config-dir");
+
+ Configuration configuration;
+ if (!config_dir.isEmpty())
+ configuration.set_config_dir(config_dir);
InstanceManager instance_manager;
if (instance_manager.is_server()) {
- auto *browser = new BrowserApp;
+ auto *browser = new BrowserApp(configuration);
browser->create_window(urls);
auto &lua = LuaRuntime::instance();
diff --git a/src/widgets/BrowserApp.cpp b/src/widgets/BrowserApp.cpp
index 502d930..1362941 100644
--- a/src/widgets/BrowserApp.cpp
+++ b/src/widgets/BrowserApp.cpp
@@ -1,3 +1,4 @@
+#include <QDir>
#include <QKeyEvent>
#include <QtCore>
@@ -6,7 +7,7 @@
#include "widgets/BrowserApp.hpp"
#include "widgets/BrowserWindow.hpp"
-BrowserApp::BrowserApp() {
+BrowserApp::BrowserApp(Configuration &configuration) : configuration(configuration) {
auto &lua = LuaRuntime::instance();
lua.start_event_loop();
@@ -17,8 +18,18 @@ BrowserApp::BrowserApp() {
// Global event filter
qApp->installEventFilter(this);
- // NOTE: TMP
- lua.load_file_sync("./config.lua");
+ qDebug() << "Config dir:" << configuration.get_config_dir().path();
+
+ // Load lua directory into package path
+ lua.append_package_path(configuration.get_config_lua_dir());
+
+ // Load init.lua
+ auto lua_init_file = configuration.get_config_lua_init_file();
+ if (QFile::exists(lua_init_file)) {
+ lua.load_file_sync(lua_init_file);
+ } else {
+ qWarning() << "Unable to find init.lua:" << lua_init_file;
+ }
// Initializes profile
for (auto *profile : profiles) {
diff --git a/src/widgets/BrowserApp.hpp b/src/widgets/BrowserApp.hpp
index 90d1ae7..c659763 100644
--- a/src/widgets/BrowserApp.hpp
+++ b/src/widgets/BrowserApp.hpp
@@ -1,5 +1,6 @@
#pragma once
+#include "Configuration.hpp"
#include "widgets/BrowserWindow.hpp"
#include <qlist.h>
@@ -7,7 +8,7 @@ class BrowserApp : public QObject {
Q_OBJECT
public:
- BrowserApp();
+ BrowserApp(Configuration &configuration);
BrowserWindow *create_window(const QStringList &urls = {});
@@ -15,7 +16,7 @@ protected:
bool eventFilter(QObject *target, QEvent *event) override;
private:
- Configuration configuration;
+ Configuration &configuration;
QWebEngineProfile default_profile{"default"};
QList<QWebEngineProfile *> profiles{&default_profile};
};