aboutsummaryrefslogtreecommitdiff
path: root/src/main.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/main.cpp')
-rw-r--r--src/main.cpp61
1 files changed, 38 insertions, 23 deletions
diff --git a/src/main.cpp b/src/main.cpp
index 4d4fa8d..7889c08 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -18,16 +18,12 @@
#include <QFile>
#include <QPluginLoader>
#include <QStandardPaths>
-#include <args.hxx>
#include <iostream>
#include <memory>
#include <plugininterface.h>
#include <pluginloader.h>
#include <spdlog/spdlog.h>
-typedef std::function<void(const std::string &, std::vector<std::string>::const_iterator, std::vector<std::string>::const_iterator)> subcommand_func;
-typedef std::unordered_map<std::string, subcommand_func> command_map;
-
// a helper function to join the keys of a command_map into a string
inline std::string join_keys(const command_map &map, const std::string sep = ", ")
{
@@ -59,9 +55,19 @@ int main(int argc, char **argv)
#endif
const std::vector<std::string> args(argv + 1, argv + argc);
- args::ArgumentParser parser("smolbote: yet another no-frills browser", "For more information on usage, refer to the manual page.");
+ args::ArgumentParser parser("smolbote: yet another no-frills browser",
+#ifdef Q_OS_UNIX
+ "For more information on usage, refer to the manual page."
+#else
+ "For more information on usage, refer to the manual."
+#endif
+ );
parser.Prog(argv[0]);
+ const command_map commands{
+ { "configuration", builtins::configuration }
+ };
+
args::HelpFlag cmd_help(parser, "help", "Display this help message.", { 'h', "help" });
args::Flag cmd_version(parser, "version", "Display version information.", { 'v', "version" });
args::Flag cmd_build(parser, "build", "Display build commit.", { 'b', "build" });
@@ -74,19 +80,44 @@ int main(int argc, char **argv)
args::ValueFlag<std::string> cmd_session(parser, "session", "Open the specified session.", { 's', "session" });
args::PositionalList<std::string> cmd_args(parser, "URL(s)", "List of URLs to open");
+ cmd_args.KickOut(true);
try {
- /*auto next = */ parser.ParseArgs(args);
+ auto next = parser.ParseArgs(args);
if(cmd_version)
return builtins::version();
if(cmd_build)
return builtins::build();
+ // create and load configuration
+ const std::string config_path = [&]() {
+ std::string path;
+ if(cmd_config)
+ path = args::get(cmd_config);
+ else
+ path = std::string(CONFIG_POI_CFG_PATH);
+
+ if(path.front() == '~')
+ path.replace(0, 1, QStandardPaths::writableLocation(QStandardPaths::HomeLocation).toStdString());
+
+ return path;
+ }();
+ spdlog::debug("Opening config file {}", config_path);
+ init_conf(config_path);
+
+ if(cmd_args) {
+ const auto front = args::get(cmd_args).front();
+ const auto cmd = commands.find(front);
+ if(cmd != commands.end()) {
+ return cmd->second(argv[0], next, std::end(args));
+ }
+ }
+
} catch(args::Help &e) {
std::cout << parser;
Q_UNUSED(e);
- //std::cout << "Available subcommands: " << command_keys << std::endl;
+ std::cout << "Available subcommands: " << join_keys(commands) << std::endl;
return 0;
} catch(args::Error &e) {
@@ -102,22 +133,6 @@ int main(int argc, char **argv)
qputenv("QTWEBENGINE_CHROMIUM_FLAGS", chromiumFlags + " --disable-in-process-stack-traces");
}
- // create and load configuration
- const std::string config_path = [&]() {
- std::string path;
- if(cmd_config)
- path = args::get(cmd_config);
- else
- path = std::string(CONFIG_POI_CFG_PATH);
-
- if(path.front() == '~')
- path.replace(0, 1, QStandardPaths::writableLocation(QStandardPaths::HomeLocation).toStdString());
-
- return path;
- }();
- spdlog::debug("Opening config file {}", config_path);
- init_conf(config_path);
-
QVector<QPluginLoader *> plugins;
CommandHash_t pluginCommands;