aboutsummaryrefslogtreecommitdiff
path: root/src/App.cpp
diff options
context:
space:
mode:
authorAkshay Nair <phenax5@gmail.com>2025-07-23 23:40:48 +0530
committerAkshay Nair <phenax5@gmail.com>2025-07-24 21:46:11 +0530
commit43f3261635e1667367cfd31a2f746832e94c3957 (patch)
treea68d385c1bee08e8527e2d0c44d69ab14010a4c0 /src/App.cpp
parentf18749fc37ef0d5bfb6bf240740a401cce372d0c (diff)
downloadnull-browser-43f3261635e1667367cfd31a2f746832e94c3957.tar.gz
null-browser-43f3261635e1667367cfd31a2f746832e94c3957.zip
Refactor main into App class
Diffstat (limited to 'src/App.cpp')
-rw-r--r--src/App.cpp72
1 files changed, 72 insertions, 0 deletions
diff --git a/src/App.cpp b/src/App.cpp
new file mode 100644
index 0000000..7ce8932
--- /dev/null
+++ b/src/App.cpp
@@ -0,0 +1,72 @@
+#include "InstanceManager.hpp"
+#include "LuaRuntime.hpp"
+#include "widgets/BrowserApp.hpp"
+
+#include "App.hpp"
+
+App::App() {
+ configure_cli_parser();
+ QApplication::setApplicationName("null-browser");
+ QApplication::setApplicationVersion("0.0.0");
+}
+
+void App::run() {
+ cli_parser.process(*qApp);
+ instance_manager.initialize();
+
+ auto config_dir = get_cli_config_dir();
+ if (!config_dir.isEmpty())
+ configuration.set_config_dir(config_dir);
+
+ if (instance_manager.is_server()) {
+ init_server();
+ } else {
+ qInfo() << "Using current instance";
+ init_client();
+ }
+}
+
+void App::configure_cli_parser() {
+ cli_parser.setApplicationDescription("null-browser");
+ cli_parser.addHelpOption();
+ cli_parser.addVersionOption();
+ cli_parser.addPositionalArgument("url", "URL(s) to open", "[url]");
+ cli_parser.addOptions({
+ {{"e", "expr"}, "Lua expression to execute", "lua"},
+ {{"C", "config-dir"}, "Config directory for null browser", "dir"},
+ });
+}
+
+void App::init_server() {
+ auto urls = get_cli_urls();
+ auto lua_expr = get_cli_lua_expr();
+
+ auto *browser = new BrowserApp(configuration);
+ browser->create_window(urls);
+
+ auto &lua = LuaRuntime::instance();
+ QObject::connect(&instance_manager, &InstanceManager::lua_eval_requested, &lua,
+ &LuaRuntime::evaluate);
+ QObject::connect(&instance_manager, &InstanceManager::urls_open_requested, browser,
+ &BrowserApp::create_window);
+
+ if (!lua_expr.isEmpty())
+ lua.evaluate(lua_expr);
+}
+
+void App::init_client() {
+ auto urls = get_cli_urls();
+ auto lua_expr = get_cli_lua_expr();
+
+ if (!urls.isEmpty() || lua_expr.isEmpty()) {
+ UrlServerMsg msg(urls);
+ instance_manager.write_message(msg);
+ }
+
+ if (!lua_expr.isEmpty()) {
+ LuaExprServerMsg msg(lua_expr);
+ instance_manager.write_message(msg);
+ }
+
+ instance_manager.close();
+}