File indexing completed on 2024-04-28 16:42:52
0001 // SPDX-FileCopyrightText: 2021 Alexey Andreyev <aa13q@ya.ru> 0002 // 0003 // SPDX-License-Identifier: LicenseRef-KDE-Accepted-GPL 0004 0005 #include "ktelephonyplugindeclarative.h" 0006 0007 #include <QAbstractItemModel> 0008 #include <QPluginLoader> 0009 #include <QQmlEngine> 0010 0011 #include "active-call-model.h" 0012 #include "call-history-model.h" 0013 #include "declarative-call-utils.h" 0014 #include "declarative-contact-utils.h" 0015 #include "declarative-device-utils.h" 0016 #include "declarative-dialer-utils.h" 0017 #include "declarative-ussd-utils.h" 0018 0019 static org::kde::telephony::DeviceUtils *deviceUtils = nullptr; 0020 0021 static DeclarativeCallUtils *declarativeCallUtils = nullptr; 0022 0023 static QObject *ussdUtilsTypeProvider(QQmlEngine *engine, QJSEngine *scriptEngine) 0024 { 0025 Q_UNUSED(engine) 0026 Q_UNUSED(scriptEngine) 0027 0028 auto ussdUtils = new DeclarativeUssdUtils(); 0029 return ussdUtils; 0030 } 0031 0032 static QObject *deviceUtilsTypeProvider(QQmlEngine *engine, QJSEngine *scriptEngine) 0033 { 0034 Q_UNUSED(engine) 0035 Q_UNUSED(scriptEngine) 0036 0037 if (deviceUtils == nullptr) { 0038 deviceUtils = new org::kde::telephony::DeviceUtils(QString::fromLatin1(org::kde::telephony::DeviceUtils::staticInterfaceName()), 0039 QStringLiteral("/org/kde/telephony/DeviceUtils/tel/mm"), 0040 QDBusConnection::sessionBus(), 0041 engine); 0042 } 0043 auto declDeviceUtils = new DeclarativeDeviceUtils(); 0044 declDeviceUtils->setDeviceUtils(deviceUtils); 0045 return declDeviceUtils; 0046 } 0047 0048 static QObject *callUtilsTypeProvider(QQmlEngine *engine, QJSEngine *scriptEngine) 0049 { 0050 Q_UNUSED(engine) 0051 Q_UNUSED(scriptEngine) 0052 0053 if (declarativeCallUtils == nullptr) { 0054 declarativeCallUtils = new DeclarativeCallUtils(); 0055 } 0056 0057 return declarativeCallUtils; 0058 } 0059 0060 static QAbstractListModel *callHistoryModelTypeProvider(QQmlEngine *engine, QJSEngine *scriptEngine) 0061 { 0062 Q_UNUSED(engine) 0063 Q_UNUSED(scriptEngine) 0064 0065 auto callHistoryModel = new CallHistoryModel(); 0066 return callHistoryModel; 0067 } 0068 0069 static QAbstractListModel *activeCallModelTypeProvider(QQmlEngine *engine, QJSEngine *scriptEngine) 0070 { 0071 Q_UNUSED(engine) 0072 Q_UNUSED(scriptEngine) 0073 0074 auto activeCallModel = new ActiveCallModel(); 0075 0076 if (declarativeCallUtils == nullptr) { 0077 declarativeCallUtils = new DeclarativeCallUtils(); 0078 } 0079 auto callUtils = qobject_cast<org::kde::telephony::CallUtils *>(declarativeCallUtils); 0080 0081 activeCallModel->setCallUtils(callUtils); 0082 return activeCallModel; 0083 } 0084 0085 static QObject *dialerUtilsTypeProvider(QQmlEngine *engine, QJSEngine *scriptEngine) 0086 { 0087 Q_UNUSED(engine) 0088 Q_UNUSED(scriptEngine) 0089 0090 auto dialerUtils = new DeclarativeDialerUtils(); 0091 return dialerUtils; 0092 } 0093 0094 static QObject *contactUtilsTypeProvider(QQmlEngine *engine, QJSEngine *scriptEngine) 0095 { 0096 Q_UNUSED(engine) 0097 Q_UNUSED(scriptEngine) 0098 0099 auto contactUtils = new DeclarativeContactUtils(); 0100 return contactUtils; 0101 } 0102 0103 void KTelephonyPluginDeclarative::registerTypes(const char *uri) 0104 { 0105 if (QString::fromLocal8Bit(uri) != QLatin1String("org.kde.telephony")) { 0106 return; 0107 } 0108 0109 int major = 1; 0110 int minor = 0; 0111 0112 DialerTypes::registerMetaTypes(); 0113 qmlRegisterAnonymousType<QAbstractItemModel>(uri, 1); 0114 qmlRegisterUncreatableMetaObject(DialerTypes::staticMetaObject, uri, major, minor, "DialerTypes", QStringLiteral("is enum")); 0115 0116 // calls-daemon 0117 0118 qmlRegisterSingletonType<DeclarativeUssdUtils>(uri, major, minor, "UssdUtils", ussdUtilsTypeProvider); 0119 qmlRegisterSingletonType<DeclarativeDeviceUtils>(uri, major, minor, "DeviceUtils", deviceUtilsTypeProvider); 0120 qmlRegisterSingletonType<DeclarativeCallUtils>(uri, major, minor, "CallUtils", callUtilsTypeProvider); 0121 0122 qmlRegisterSingletonType<CallHistoryModel>(uri, major, minor, "CallHistoryModel", callHistoryModelTypeProvider); 0123 qmlRegisterSingletonType<ActiveCallModel>(uri, major, minor, "ActiveCallModel", activeCallModelTypeProvider); 0124 0125 // plugin-only KContacts-related utils 0126 qRegisterMetaType<KContacts::PhoneNumber>(); 0127 0128 // kde-telephony-daemon 0129 0130 qmlRegisterSingletonType<DeclarativeDialerUtils>(uri, major, minor, "DialerUtils", dialerUtilsTypeProvider); 0131 qmlRegisterSingletonType<DeclarativeContactUtils>(uri, major, minor, "ContactUtils", contactUtilsTypeProvider); 0132 }