/* SPDX-FileCopyrightText: 2014-2015 Harald Sitter SPDX-FileCopyrightText: 2022 ivan (@ratijas) tkachenko SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL */ #include "plugin.h" #include #include #include #include #include #include #include #include #include #include "audioicon.h" #include "modulemanager.h" #include "preferreddevice.h" #include "volumemonitor.h" #include "devicerenamemodel.h" #include "devicerenamesaver.h" #include "globalconfig.h" #include "globalservice.h" #include "listitemmenu.h" #include "microphoneindicator.h" #include "percentvalidator.h" #include "speakertest.h" #include "volumefeedback.h" static QJSValue pulseaudio_singleton(QQmlEngine *engine, QJSEngine *scriptEngine) { Q_UNUSED(engine) QJSValue object = scriptEngine->newObject(); object.setProperty(QStringLiteral("NormalVolume"), (double)PulseAudioQt::normalVolume()); object.setProperty(QStringLiteral("MinimalVolume"), (double)PulseAudioQt::minimumVolume()); // The maximum UI value suggested by PulseAudio (PA_VOLUME_UI_MAX) is 153% (11dB) // Set the maximum volume to 150% instead object.setProperty(QStringLiteral("MaximalVolume"), (double)PulseAudioQt::normalVolume() * 1.5); return object; } void Plugin::registerTypes(const char *uri) { PulseAudioQt::Context::setApplicationId(QStringLiteral("org.kde.plasma-pa")); qmlRegisterType(uri, 0, 1, "CardModel"); qmlRegisterType(uri, 0, 1, "SinkModel"); qmlRegisterType(uri, 0, 1, "SinkInputModel"); qmlRegisterType(uri, 0, 1, "SourceModel"); qmlRegisterType(uri, 0, 1, "ModuleManager"); qmlRegisterType(uri, 0, 1, "SourceOutputModel"); qmlRegisterType(uri, 0, 1, "StreamRestoreModel"); qmlRegisterType(uri, 0, 1, "ModuleModel"); qmlRegisterType(uri, 0, 1, "VolumeMonitor"); qmlRegisterSingletonType(uri, 0, 1, "Context", [](QQmlEngine *, QJSEngine *) -> QObject * { // Created on-call rather than on-registration to not start the Context "too early". auto context = PulseAudioQt::Context::instance(); QQmlEngine::setObjectOwnership(context, QQmlEngine::CppOwnership); return context; }); qmlRegisterUncreatableType(uri, 0, 1, "VolumeObject", QString()); qmlRegisterUncreatableType(uri, 0, 1, "PulseObject", QString()); qmlRegisterUncreatableType(uri, 0, 1, "Profile", QString()); qmlRegisterUncreatableType(uri, 0, 1, "Port", QString()); qmlRegisterType(uri, 0, 1, "ListItemMenu"); qmlRegisterType(uri, 0, 1, "VolumeFeedback"); qmlRegisterType(uri, 0, 1, "SpeakerTest"); qmlRegisterType(uri, 0, 1, "GlobalConfig"); qmlRegisterType(uri, 0, 1, "DeviceRenameModel"); qmlRegisterType(uri, 0, 1, "DeviceRenameSaver"); qmlRegisterType(uri, 0, 1, "PercentValidator"); qmlRegisterSingletonType(uri, 0, 1, "PulseAudio", pulseaudio_singleton); qmlRegisterSingletonType(uri, 0, 1, "MicrophoneIndicator", [](QQmlEngine *engine, QJSEngine *jsEngine) -> QObject * { Q_UNUSED(engine); Q_UNUSED(jsEngine); return new MicrophoneIndicator(); }); qmlRegisterSingletonType(uri, 0, 1, "AudioIcon", [](QQmlEngine *engine, QJSEngine *jsEngine) -> QObject * { Q_UNUSED(engine); Q_UNUSED(jsEngine); return new AudioIcon(); }); qmlRegisterSingletonType(uri, 0, 1, "GlobalService", [](QQmlEngine *engine, QJSEngine *jsEngine) -> QObject * { Q_UNUSED(engine); Q_UNUSED(jsEngine); return new GlobalService(); }); qmlRegisterSingletonType(uri, 0, 1, "PreferredDevice", [](QQmlEngine *engine, QJSEngine *jsEngine) -> QObject * { Q_UNUSED(engine); Q_UNUSED(jsEngine); return new PreferredDevice(); }); qmlRegisterSingletonType(uri, 0, 1, "Server", [](QQmlEngine *engine, QJSEngine *jsEngine) -> QObject * { Q_UNUSED(engine); Q_UNUSED(jsEngine); auto server = PulseAudioQt::Context::instance()->server(); QQmlEngine::setObjectOwnership(server, QQmlEngine::CppOwnership); return server; }); qmlRegisterAnonymousType(uri, 1); qmlRegisterAnonymousType(uri, 1); qmlRegisterAnonymousType(uri, 1); }