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 }