File indexing completed on 2024-05-12 17:21:22

0001 /*
0002  * SPDX-FileCopyrightText: 2020 Jonah Brüchert <jbb@kaidan.im>
0003  * SPDX-FileCopyrightText: 2022 Devin Lin <devin@kde.org>
0004  *
0005  * SPDX-License-Identifier: GPL-3.0-or-later
0006  */
0007 
0008 #include <QApplication>
0009 #include <QGuiApplication>
0010 #include <QIcon>
0011 #include <QQmlApplicationEngine>
0012 #include <QUrl>
0013 #include <QCommandLineParser>
0014 #include <QQuickStyle>
0015 #include <QtQml>
0016 
0017 #include <KAboutData>
0018 #include <KLocalizedContext>
0019 #include <KLocalizedString>
0020 
0021 #include "about.h"
0022 #include "audioplayer.h"
0023 #include "audioprober.h"
0024 #include "audiorecorder.h"
0025 #include "recording.h"
0026 #include "recordingmodel.h"
0027 #include "settingsmodel.h"
0028 #include "utils.h"
0029 #include "version.h"
0030 
0031 Q_DECL_EXPORT int main(int argc, char *argv[])
0032 {
0033     // set default style
0034     if (qEnvironmentVariableIsEmpty("QT_QUICK_CONTROLS_STYLE")) {
0035         QQuickStyle::setStyle(QStringLiteral("org.kde.desktop"));
0036     }
0037     // if using org.kde.desktop, ensure we use kde style if possible
0038     if (qEnvironmentVariableIsEmpty("QT_QPA_PLATFORMTHEME")) {
0039         qputenv("QT_QPA_PLATFORMTHEME", "kde");
0040     }
0041 
0042     QApplication app(argc, argv);
0043     
0044     KLocalizedString::setApplicationDomain("krecorder");
0045     
0046     KAboutData aboutData(QStringLiteral("krecorder"),
0047                          QStringLiteral("Recorder"),
0048                          QStringLiteral(KRECORDER_VERSION_STRING),
0049                          QStringLiteral("Audio recorder"),
0050                          KAboutLicense::GPL,
0051                          i18n("© 2020-2024 KDE Community"));
0052     aboutData.addAuthor(i18n("Devin Lin"), QString(), QStringLiteral("devin@kde.org"));
0053     aboutData.addAuthor(i18n("Jonah Brüchert"), QString(), QStringLiteral("jbb@kaidan.im"));
0054     KAboutData::setApplicationData(aboutData);
0055     
0056     QCommandLineParser parser;
0057     parser.addVersionOption();
0058     parser.process(app);
0059 
0060     qmlRegisterType<Recording>("KRecorder", 1, 0, "Recording");
0061     qmlRegisterType<AudioProber>("KRecorder", 1, 0, "AudioProber");
0062     qmlRegisterSingletonType<Utils>("KRecorder", 1, 0, "Utils", [] (QQmlEngine *, QJSEngine *) -> QObject* {
0063         return new Utils;
0064     });
0065 
0066     // pre-initialize settings model to apply settings to the AudioRecorder instance
0067     SettingsModel::instance();
0068 
0069     qmlRegisterSingletonType<AudioPlayer>("KRecorder", 1, 0, "AudioPlayer", [] (QQmlEngine *, QJSEngine *) -> QObject* {
0070         return AudioPlayer::instance();
0071     });
0072 
0073     qmlRegisterSingletonType<AudioRecorder>("KRecorder", 1, 0, "AudioRecorder", [] (QQmlEngine *, QJSEngine *) -> QObject* {
0074         return AudioRecorder::instance();
0075     });
0076 
0077     qmlRegisterSingletonType<RecordingModel>("KRecorder", 1, 0, "RecordingModel", [] (QQmlEngine *, QJSEngine *) -> QObject* {
0078         return RecordingModel::instance();
0079     });
0080 
0081     qmlRegisterSingletonType<SettingsModel>("KRecorder", 1, 0, "SettingsModel", [] (QQmlEngine *, QJSEngine *) -> QObject* {
0082         return SettingsModel::instance();
0083     });
0084 
0085     qmlRegisterSingletonInstance("KRecorder", 1, 0, "AboutType", &AboutType::instance());
0086     
0087     QQmlApplicationEngine engine;
0088 
0089     engine.rootContext()->setContextObject(new KLocalizedContext(&engine));
0090     engine.load(QUrl(QStringLiteral("qrc:///main.qml")));
0091 
0092     if (engine.rootObjects().isEmpty()) {
0093         return -1;
0094     }
0095 
0096     // required for X11
0097     app.setWindowIcon(QIcon::fromTheme(QStringLiteral("org.kde.krecorder")));
0098 
0099     return app.exec();
0100 }