diff --git a/src/main.cpp b/src/main.cpp new file mode 100644 index 0000000000000000000000000000000000000000..40feb583ae2a81fe36d0ccc153f5ceb6be18c576 --- /dev/null +++ b/src/main.cpp @@ -0,0 +1,58 @@ +#include <QString> +#include <QStringList> +#include <QUrl> +#include <QJsonObject> +#include <QCommandLineParser> +#include <QCoreApplication> +#include <QGuiApplication> +#include <QIcon> +#include <QQmlApplicationEngine> +#include <QQmlContext> + +#include "core/config.h" +#include "core/network.h" +#include "handlers/xdgurl.h" +#include "utility/file.h" + +int main(int argc, char *argv[]) +{ + // Init + //QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); // Qt 5.6 or higher + QGuiApplication app(argc, argv); + + Core::Config *appConfig = new Core::Config(":/configs"); + QJsonObject appConfigApplication = appConfig->get("application"); + Core::Config *userConfig = new Core::Config(Utility::File::xdgConfigHomePath() + "/" + appConfigApplication["id"].toString()); + Core::Network *asyncNetwork = new Core::Network(true); + //Core::Network *syncNetwork = new Core::Network(false); + + app.setApplicationName(appConfigApplication["name"].toString()); + app.setApplicationVersion(appConfigApplication["version"].toString()); + app.setOrganizationName(appConfigApplication["organization"].toString()); + app.setOrganizationDomain(appConfigApplication["domain"].toString()); + app.setWindowIcon(QIcon::fromTheme(appConfigApplication["id"].toString(), QIcon(appConfigApplication["icon"].toString()))); + + // Setup CLI + QCommandLineParser clParser; + clParser.setApplicationDescription(appConfigApplication["description"].toString()); + clParser.addHelpOption(); + clParser.addVersionOption(); + clParser.addPositionalArgument("xdgurl", "XDG-URL"); + clParser.process(app); + + const QStringList args = clParser.positionalArguments(); + + if (args.size() != 1) { + clParser.showHelp(1); + } + + const QString xdgurl = args.at(0); + + // Setup QML + QQmlApplicationEngine qmlAppEngine; + QQmlContext *qmlContext = qmlAppEngine.rootContext(); + qmlContext->setContextProperty("xdgUrlHandler", new Handlers::XdgUrl(xdgurl, appConfig, userConfig, asyncNetwork)); + qmlAppEngine.load(QUrl("qrc:/qml/main.qml")); + + return app.exec(); +}