aboutsummaryrefslogtreecommitdiff
path: root/src/main.cpp
blob: ee94ad39539792d46802bb805dfd162aadc13061 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include <QApplication>

#include "InstanceManager.hpp"
#include "LuaRuntime.hpp"
#include "widgets/BrowserApp.hpp"

QCommandLineParser *create_cli_parser() {
  auto *parser = new QCommandLineParser();
  parser->setApplicationDescription("null-browser");
  parser->addHelpOption();
  parser->addVersionOption();
  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;
}

int main(int argc, char *argv[]) {
  const QApplication app(argc, argv);
  QApplication::setApplicationName("null-browser");
  QApplication::setApplicationVersion("0.0.0");

  auto *parser = create_cli_parser();
  parser->process(app);

  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(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);
  } else {
    qInfo() << "Using current instance";

    if (!urls.isEmpty() || lua_expr.isEmpty())
      instance_manager.write_open_urls_to_socket(urls);

    if (!lua_expr.isEmpty())
      instance_manager.write_lua_expr_to_socket(lua_expr);

    instance_manager.send_message();
    return 0;
  }

  return QApplication::exec();
}