File indexing completed on 2024-04-21 04:49:07

0001 /*
0002  * SPDX-FileCopyrightText: 2020 George Florea Bănuș <georgefb899@gmail.com>
0003  *
0004  * SPDX-License-Identifier: GPL-3.0-or-later
0005  */
0006 
0007 #include "application.h"
0008 #include "generalsettings.h"
0009 #include "kdsingleapplication.h"
0010 #include "qqmlpropertymap.h"
0011 #include "thumbnailimageprovider.h"
0012 
0013 #include <QCommandLineParser>
0014 #include <QIcon>
0015 #include <QQmlApplicationEngine>
0016 #include <QQmlContext>
0017 #include <QQmlEngine>
0018 #include <QQuickStyle>
0019 
0020 #include <KLocalizedString>
0021 
0022 int main(int argc, char *argv[])
0023 {
0024     qSetMessagePattern(QStringLiteral("%{function}() : %{message}\n"));
0025 
0026     QApplication::setOrganizationName(QStringLiteral("KDE"));
0027     QApplication::setApplicationName(QStringLiteral("Haruna"));
0028     QApplication::setOrganizationDomain(QStringLiteral("kde.org"));
0029     QApplication::setApplicationDisplayName(QStringLiteral("Haruna - Media Player"));
0030     QApplication::setApplicationVersion(Application::version());
0031 
0032     QQuickStyle::setStyle(QStringLiteral("org.kde.desktop"));
0033     QQuickStyle::setFallbackStyle(QStringLiteral("Fusion"));
0034     if (GeneralSettings::useBreezeIconTheme()) {
0035         QIcon::setThemeName(QStringLiteral("breeze"));
0036     }
0037 
0038     QApplication qApplication(argc, argv);
0039     QApplication::setWindowIcon(QIcon::fromTheme(QStringLiteral("haruna")));
0040     KLocalizedString::setApplicationDomain("haruna");
0041 
0042     auto application = Application::instance();
0043 
0044     KDSingleApplication kdsApp;
0045     if (kdsApp.isPrimaryInstance()) {
0046         QObject::connect(&kdsApp, &KDSingleApplication::messageReceived, [=](const QByteArray &message) {
0047             application->handleSecondayInstanceMessage(message);
0048         });
0049     } else {
0050         if (GeneralSettings::self()->useSingleInstance()) {
0051             QCommandLineParser clParser;
0052             clParser.process(qApplication);
0053             if (clParser.positionalArguments().size() > 0) {
0054                 QString file = clParser.positionalArguments().first();
0055                 kdsApp.sendMessage(file.toUtf8());
0056             }
0057             exit(EXIT_SUCCESS);
0058         }
0059     }
0060 
0061     QQmlApplicationEngine engine(&qApplication);
0062     const QUrl url(QStringLiteral("qrc:/qt/qml/org/kde/haruna/qml/main.qml"));
0063     auto onObjectCreated = [url](const QObject *obj, const QUrl &objUrl) {
0064         if (!obj && url == objUrl) {
0065             QCoreApplication::exit(-1);
0066         }
0067     };
0068     QObject::connect(&engine, &QQmlApplicationEngine::objectCreated, &qApplication, onObjectCreated, Qt::QueuedConnection);
0069     engine.addImageProvider(QStringLiteral("thumbnail"), new ThumbnailImageProvider());
0070     engine.rootContext()->setContextProperty(QStringLiteral("app"), Application::instance());
0071     engine.rootContext()->setContextProperty(QStringLiteral("appActions"), new QQmlPropertyMap);
0072     engine.rootContext()->setContextObject(new KLocalizedContext(Application::instance()));
0073     engine.rootContext()->setContextProperty(QStringLiteral("harunaAboutData"), QVariant::fromValue(KAboutData::applicationData()));
0074     engine.load(url);
0075 
0076     application->setQmlEngine(&engine);
0077 
0078     return qApplication.exec();
0079 }