1 | /* |
2 | This file is part of KNewStuff2. |
3 | SPDX-FileCopyrightText: 2019 Dan Leinir Turthra Jensen <admin@leinir.dk> |
4 | |
5 | SPDX-License-Identifier: LGPL-2.1-or-later |
6 | */ |
7 | |
8 | #include "knsrcmodel.h" |
9 | |
10 | #include <KLocalizedString> |
11 | |
12 | #include <QApplication> |
13 | #include <QCommandLineOption> |
14 | #include <QCommandLineParser> |
15 | #include <QQmlApplicationEngine> |
16 | #include <QQmlContext> |
17 | |
18 | int main(int argc, char **argv) |
19 | { |
20 | QApplication app(argc, argv); |
21 | QCoreApplication::setApplicationName(QStringLiteral("knewstuff-dialog" )); |
22 | QCoreApplication::setApplicationVersion(QStringLiteral("1.0" )); |
23 | QCoreApplication::setOrganizationDomain(QStringLiteral("kde.org" )); |
24 | KLocalizedString::setApplicationDomain("knewstuff-dialog" ); |
25 | |
26 | QCommandLineParser *parser = new QCommandLineParser; |
27 | parser->addHelpOption(); |
28 | parser->addPositionalArgument(QStringLiteral("knsrcfile" ), |
29 | i18n("The KNSRC file you want to show. If none is passed, you will be presented with a dialog which lets you switch between " |
30 | "all the config files installed into the systemwide knsrc file location" )); |
31 | parser->addOption( |
32 | commandLineOption: QCommandLineOption(QStringLiteral("url" ), |
33 | i18n("A kns url to show information from. The format for a kns url is kns://knsrcfile/providerid/entryid\n'knsrcfile'\nis the name " |
34 | "of a knsrc file as might be passed directly through this tool's knsrcfile argument\n'providerid'\nis the hostname of the " |
35 | "provider the entry should exist on\n'entryid'\nis the unique ID of an entry found in the provider specified by the knsrc " |
36 | "file.\n An example of such a url is kns://sddmtheme.knsrc/api.kde-look.org/2059021" ), |
37 | QStringLiteral("knsurl" ))); |
38 | parser->process(app); |
39 | |
40 | QQmlApplicationEngine *appengine = new QQmlApplicationEngine(); |
41 | qmlRegisterType<KNSRCModel>(uri: "org.kde.newstuff.tools.dialog" , versionMajor: 1, versionMinor: 0, qmlName: "KNSRCModel" ); |
42 | auto *context = new KLocalizedContext(appengine); |
43 | context->setTranslationDomain(QStringLiteral("knewstuff6" )); |
44 | appengine->rootContext()->setContextObject(context); |
45 | |
46 | if (parser->optionNames().contains(QStringLiteral("url" ))) { |
47 | const QUrl url(parser->value(QStringLiteral("url" ))); |
48 | Q_ASSERT(url.isValid()); |
49 | Q_ASSERT(url.scheme() == QLatin1String("kns" )); |
50 | |
51 | const QString knsrcfile{url.host()}; |
52 | |
53 | const QStringList pathParts = url.path().split(sep: QLatin1Char('/'), behavior: Qt::SkipEmptyParts); |
54 | const QString providerId = pathParts.at(i: 0); |
55 | const QString entryId = pathParts.at(i: 1); |
56 | if (pathParts.size() != 2) { |
57 | qWarning() << "wrong format in the url path" << url << pathParts; |
58 | } |
59 | Q_ASSERT(!providerId.isEmpty() && !entryId.isEmpty()); |
60 | |
61 | appengine->rootContext()->setContextProperty(QStringLiteral("knsrcfile" ), knsrcfile); |
62 | appengine->rootContext()->setContextProperty(QStringLiteral("knsProviderId" ), providerId); |
63 | appengine->rootContext()->setContextProperty(QStringLiteral("knsEntryId" ), entryId); |
64 | appengine->load(QStringLiteral("qrc:/qml/dialog.qml" )); |
65 | } else if (!parser->positionalArguments().isEmpty()) { |
66 | appengine->rootContext()->setContextProperty(QStringLiteral("knsrcfile" ), parser->positionalArguments().first()); |
67 | appengine->load(QStringLiteral("qrc:/qml/dialog.qml" )); |
68 | } else { |
69 | appengine->load(QStringLiteral("qrc:/qml/main.qml" )); |
70 | } |
71 | |
72 | return app.exec(); |
73 | } |
74 | |