File indexing completed on 2024-05-19 05:57:13

0001 /*
0002  *  SPDX-FileCopyrightText: 2019 Jonah Brüchert <jbb@kaidan.im>
0003  *  SPDX-FileCopyrightText: 2019 Simon Schmeisser <s.schmeisser@gmx.net>
0004  *
0005  *  SPDX-License-Identifier: GPL-3.0-or-later
0006  */
0007 
0008 #include <qglobal.h>
0009 #ifndef Q_OS_ANDROID
0010 #include <QApplication>
0011 #else
0012 #include <QGuiApplication>
0013 #endif
0014 #include <QCommandLineParser>
0015 #include <QIcon>
0016 #include <QQmlApplicationEngine>
0017 #include <QUrl>
0018 #include <QtQml>
0019 #include <QQuickStyle>
0020 
0021 #include <KAboutData>
0022 #include <KLocalizedContext>
0023 #include <KLocalizedString>
0024 
0025 #include "QrCodeContent.h"
0026 // #include "QrCodeScannerFilter.h"
0027 #include "Qrca.h"
0028 #include "notificationmanager.h"
0029 #include "clipboard.h"
0030 
0031 Q_DECL_EXPORT int main(int argc, char *argv[])
0032 {
0033 #ifndef Q_OS_ANDROID
0034     QApplication app(argc, argv);
0035     // Default to org.kde.desktop style unless the user forces another style
0036     if (qEnvironmentVariableIsEmpty("QT_QUICK_CONTROLS_STYLE")) {
0037         QQuickStyle::setStyle(QStringLiteral("org.kde.desktop"));
0038     }
0039 #else
0040     QGuiApplication app(argc, argv);
0041     QQuickStyle::setStyle(QStringLiteral("org.kde.breeze"));
0042 #endif
0043     QCoreApplication::setOrganizationName(QStringLiteral("KDE"));
0044     QCoreApplication::setOrganizationDomain(QStringLiteral("kde.org"));
0045     QCoreApplication::setApplicationName(QStringLiteral("qrca"));
0046 
0047     QCommandLineParser parser;
0048     parser.addHelpOption();
0049     parser.addOption(QCommandLineOption(QStringLiteral("encode"), QStringLiteral("Text to encode into a QR-Code"), QStringLiteral("encode"), {}));
0050     parser.process(app);
0051 
0052     // setup translation string domain for the i18n calls
0053     KLocalizedString::setApplicationDomain("qrca");
0054     // create a KAboutData object to use for setting the application metadata
0055     KAboutData aboutData(
0056         QStringLiteral("qrca"), i18n("Qrca"), QStringLiteral("0.1"), i18n("A simple QR scanner"), KAboutLicense::GPL_V3, i18n("Copyright 2016-2019 Qrca and Kaidan authors"), QString(), QStringLiteral("https://www.plasma-mobile.org"));
0057     // overwrite default-generated values of organizationDomain & desktopFileName
0058     aboutData.addAuthor(i18n("Jonah Brüchert"), QString(), QStringLiteral("jbb@kaidan.im"), QStringLiteral("https://jbbgameich.github.io"));
0059     aboutData.addAuthor(i18n("Simon Schmeißer"));
0060     aboutData.setOrganizationDomain("kde.org");
0061     aboutData.setDesktopFileName(QStringLiteral("org.kde.qrca"));
0062     // set the application metadata
0063     KAboutData::setApplicationData(aboutData);
0064     // in GUI apps set the window icon manually, not covered by KAboutData
0065     // needed for environments where the icon name is not extracted from
0066     // the information in the application's desktop file
0067     QGuiApplication::setWindowIcon(QIcon::fromTheme(QStringLiteral("org.kde.qrca")));
0068     aboutData.setProgramLogo(app.windowIcon());
0069 
0070     qmlRegisterUncreatableType<QrCodeContent>("org.kde.qrca", 1, 0, "QrCodeContent", {});
0071     qmlRegisterSingletonType<NotificationManager>("org.kde.qrca", 1, 0, "NotificationManager", [](QQmlEngine *engine, QJSEngine *scriptEngine) -> QObject * {
0072         Q_UNUSED(engine)
0073         Q_UNUSED(scriptEngine)
0074 
0075         return new NotificationManager();
0076     });
0077     qmlRegisterSingletonType<Clipboard>("org.kde.qrca", 1, 0, "Clipboard", [](QQmlEngine *engine, QJSEngine *scriptEngine) -> QObject * {
0078         Q_UNUSED(engine)
0079         Q_UNUSED(scriptEngine)
0080 
0081         return new Clipboard();
0082     });
0083     qRegisterMetaType<QrCodeContent>();
0084 
0085     Qrca qrca;
0086     qrca.setAboutData(aboutData);
0087     qrca.setEncodeText(parser.value(QStringLiteral("encode")));
0088     qmlRegisterSingletonInstance<Qrca>("org.kde.qrca", 1, 0, "Qrca", &qrca);
0089 
0090     QQmlApplicationEngine engine;
0091     engine.rootContext()->setContextObject(new KLocalizedContext(&engine));
0092 
0093     engine.load(QUrl(QStringLiteral("qrc:///main.qml")));
0094 
0095     if (engine.rootObjects().isEmpty()) {
0096         return -1;
0097     }
0098 
0099     return app.exec();
0100 }