File indexing completed on 2024-04-21 05:25:29

0001 /*
0002  * SPDX-FileCopyrightText: 2019 Linus Jahn <lnj@kaidan.im>
0003  *
0004  * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL
0005  */
0006 
0007 #include <KSharedConfig>
0008 #include <KWindowConfig>
0009 #include <QApplication>
0010 #include <QCommandLineOption>
0011 #include <QCommandLineParser>
0012 #include <QQmlApplicationEngine>
0013 #include <QQuickWindow>
0014 #include <QUrl>
0015 #include <QtQml>
0016 
0017 #include <KAboutData>
0018 #include <KLocalizedContext>
0019 #include <KLocalizedString>
0020 
0021 #include "contactcontroller.h"
0022 #include "contactimporter.h"
0023 #include "version.h"
0024 
0025 #ifdef Q_OS_ANDROID
0026 #include <QtAndroid>
0027 #endif
0028 
0029 Q_DECL_EXPORT int main(int argc, char *argv[])
0030 {
0031     QCommandLineParser parser;
0032     QApplication app(argc, argv);
0033 
0034     KAboutData aboutData(QStringLiteral("plasma-phonebook"),
0035                          i18n("Phonebook"),
0036                          QStringLiteral(PLASMAPHONEBOOK_VERSION_STRING),
0037                          i18n("View and edit contacts"),
0038                          KAboutLicense::GPL);
0039     aboutData.setDesktopFileName(QStringLiteral("org.kde.phonebook"));
0040     KAboutData::setApplicationData(aboutData);
0041 
0042     KLocalizedString::setApplicationDomain("plasma-phonebook");
0043     parser.addVersionOption();
0044     parser.process(app);
0045 
0046     // back-end
0047     QQmlApplicationEngine engine;
0048     engine.rootContext()->setContextObject(new KLocalizedContext(&engine));
0049 
0050     qmlRegisterType<ContactImporter>("org.kde.phonebook", 1, 0, "ContactImporter");
0051     qmlRegisterAnonymousType<QAbstractItemModel>("org.kde.phonebook", 1);
0052 
0053 #ifdef Q_OS_ANDROID
0054     QtAndroid::requestPermissionsSync({QStringLiteral("android.permission.WRITE_EXTERNAL_STORAGE")});
0055 #endif
0056 
0057     qRegisterMetaType<KContacts::Addressee>();
0058     qRegisterMetaType<KContacts::Picture>();
0059     qRegisterMetaType<KContacts::Email>();
0060     qRegisterMetaType<KContacts::Impp>();
0061     qRegisterMetaType<KContacts::PhoneNumber>();
0062 
0063     ContactController contactController;
0064     qmlRegisterSingletonInstance("org.kde.phonebook", 1, 0, "ContactController", &contactController);
0065 
0066     engine.load(QUrl(QStringLiteral("qrc:///main.qml")));
0067 
0068     if (engine.rootObjects().isEmpty()) {
0069         return -1;
0070     }
0071 
0072     const auto rootObjects = engine.rootObjects();
0073     for (auto obj : rootObjects) {
0074         auto view = qobject_cast<QQuickWindow *>(obj);
0075         if (view) {
0076             KConfig dataResource(QStringLiteral("data"), KConfig::SimpleConfig, QStandardPaths::AppDataLocation);
0077             KConfigGroup windowGroup(&dataResource, QStringLiteral("Window"));
0078             KWindowConfig::restoreWindowSize(view, windowGroup);
0079             KWindowConfig::restoreWindowPosition(view, windowGroup);
0080             break;
0081         }
0082     }
0083     
0084     // required for X11
0085     app.setWindowIcon(QIcon::fromTheme(QStringLiteral("org.kde.krecorder")));
0086 
0087     return app.exec();
0088 }