File indexing completed on 2024-10-06 04:31:31
0001 /** 0002 * SPDX-FileCopyrightText: 2013 Albert Vaca <albertvaka@gmail.com> 0003 * 0004 * SPDX-License-Identifier: GPL-2.0-only OR GPL-3.0-only OR LicenseRef-KDE-Accepted-GPL 0005 */ 0006 0007 #include "kdeconnectdeclarativeplugin.h" 0008 0009 #include <QDBusPendingCall> 0010 #include <QDBusPendingReply> 0011 #include <QGuiApplication> 0012 #include <QQmlContext> 0013 #include <QQmlEngine> 0014 #include <devicespluginfilterproxymodel.h> 0015 0016 #include "objectfactory.h" 0017 #include "responsewaiter.h" 0018 0019 #include "core/kdeconnectpluginconfig.h" 0020 #include "interfaces/commandsmodel.h" 0021 #include "interfaces/devicesmodel.h" 0022 #include "interfaces/devicessortproxymodel.h" 0023 #include "interfaces/notificationsmodel.h" 0024 #include "openconfig.h" 0025 #include "pointerlocker.h" 0026 #if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD) 0027 #include "pointerlockerwayland.h" 0028 #endif 0029 #include <pluginmodel.h> 0030 #include <remotecommandsmodel.h> 0031 #include <remotesinksmodel.h> 0032 0033 QObject *createDBusResponse() 0034 { 0035 return new DBusAsyncResponse(); 0036 } 0037 0038 template<typename T> 0039 void registerFactory(const char *uri, const char *name) 0040 { 0041 qmlRegisterSingletonType<ObjectFactory>(uri, 1, 0, name, [](QQmlEngine *engine, QJSEngine *) -> QObject * { 0042 return new ObjectFactory(engine, [](const QVariant &deviceId) -> QObject * { 0043 return new T(deviceId.toString()); 0044 }); 0045 }); 0046 } 0047 0048 void KdeConnectDeclarativePlugin::registerTypes(const char *uri) 0049 { 0050 qmlRegisterType<DevicesModel>(uri, 1, 0, "DevicesModel"); 0051 qmlRegisterType<NotificationsModel>(uri, 1, 0, "NotificationsModel"); 0052 qmlRegisterType<RemoteCommandsModel>(uri, 1, 0, "RemoteCommandsModel"); 0053 qmlRegisterType<DBusAsyncResponse>(uri, 1, 0, "DBusAsyncResponse"); 0054 qmlRegisterType<DevicesSortProxyModel>(uri, 1, 0, "DevicesSortProxyModel"); 0055 qmlRegisterType<DevicesPluginFilterProxyModel>(uri, 1, 0, "DevicesPluginFilterProxyModel"); 0056 qmlRegisterType<RemoteSinksModel>(uri, 1, 0, "RemoteSinksModel"); 0057 qmlRegisterType<PluginModel>(uri, 1, 0, "PluginModel"); 0058 qmlRegisterType<KdeConnectPluginConfig>(uri, 1, 0, "KdeConnectPluginConfig"); 0059 qmlRegisterType<CommandsModel>(uri, 1, 0, "CommandsModel"); 0060 qmlRegisterUncreatableType<MprisDbusInterface>(uri, 1, 0, "MprisDbusInterface", QStringLiteral("You're not supposed to instantiate interfaces")); 0061 qmlRegisterUncreatableType<LockDeviceDbusInterface>(uri, 1, 0, "LockDeviceDbusInterface", QStringLiteral("You're not supposed to instantiate interfaces")); 0062 qmlRegisterUncreatableType<FindMyPhoneDeviceDbusInterface>(uri, 0063 1, 0064 0, 0065 "FindMyPhoneDbusInterface", 0066 QStringLiteral("You're not supposed to instantiate interfaces")); 0067 qmlRegisterUncreatableType<ClipboardDbusInterface>(uri, 1, 0, "ClipboardDbusInterface", QStringLiteral("You're not supposed to instantiate interfaces")); 0068 qmlRegisterUncreatableType<RemoteKeyboardDbusInterface>(uri, 0069 1, 0070 0, 0071 "RemoteKeyboardDbusInterface", 0072 QStringLiteral("You're not supposed to instantiate interfaces")); 0073 qmlRegisterUncreatableType<DeviceDbusInterface>(uri, 1, 0, "DeviceDbusInterface", QStringLiteral("You're not supposed to instantiate interfaces")); 0074 qmlRegisterUncreatableType<RemoteCommandsDbusInterface>(uri, 0075 1, 0076 0, 0077 "RemoteCommandsDbusInterface", 0078 QStringLiteral("You're not supposed to instantiate interfaces")); 0079 qmlRegisterUncreatableType<RemoteSystemVolumeDbusInterface>(uri, 0080 1, 0081 0, 0082 "RemoteSystemVolumeInterface", 0083 QStringLiteral("You're not supposed to instantiate interfaces")); 0084 qmlRegisterUncreatableType<ShareDbusInterface>(uri, 1, 0, "ShareDbusInterface", QStringLiteral("You're not supposed to instantiate interfaces")); 0085 qmlRegisterUncreatableType<BigscreenDbusInterface>(uri, 1, 0, "BigscreenDbusInterface", QStringLiteral("You're not supposed to instantiate interfaces")); 0086 qmlRegisterSingletonType<DaemonDbusInterface>(uri, 1, 0, "DaemonDbusInterface", [](QQmlEngine *, QJSEngine *) -> QObject * { 0087 return new DaemonDbusInterface; 0088 }); 0089 qmlRegisterSingletonType<AbstractPointerLocker>("org.kde.kdeconnect", 1, 0, "PointerLocker", [](QQmlEngine *, QJSEngine *) -> QObject * { 0090 AbstractPointerLocker *ret; 0091 #if defined(Q_OS_LINUX) || defined(Q_OS_FREEBSD) 0092 if (qGuiApp->platformName() == QLatin1String("wayland")) 0093 ret = new PointerLockerWayland; 0094 else 0095 #endif 0096 ret = new PointerLockerQt; 0097 return ret; 0098 }); 0099 0100 qmlRegisterSingletonType<OpenConfig>(uri, 1, 0, "OpenConfig", [](QQmlEngine *, QJSEngine *) -> QObject * { 0101 return new OpenConfig; 0102 }); 0103 0104 qmlRegisterAnonymousType<QAbstractItemModel>(uri, 1); 0105 0106 registerFactory<DeviceDbusInterface>(uri, "DeviceDbusInterfaceFactory"); 0107 registerFactory<BatteryDbusInterface>(uri, "DeviceBatteryDbusInterfaceFactory"); 0108 registerFactory<ConnectivityReportDbusInterface>(uri, "DeviceConnectivityReportDbusInterfaceFactory"); 0109 registerFactory<FindMyPhoneDeviceDbusInterface>(uri, "FindMyPhoneDbusInterfaceFactory"); 0110 registerFactory<SftpDbusInterface>(uri, "SftpDbusInterfaceFactory"); 0111 registerFactory<RemoteKeyboardDbusInterface>(uri, "RemoteKeyboardDbusInterfaceFactory"); 0112 registerFactory<ClipboardDbusInterface>(uri, "ClipboardDbusInterfaceFactory"); 0113 registerFactory<MprisDbusInterface>(uri, "MprisDbusInterfaceFactory"); 0114 registerFactory<RemoteControlDbusInterface>(uri, "RemoteControlDbusInterfaceFactory"); 0115 registerFactory<LockDeviceDbusInterface>(uri, "LockDeviceDbusInterfaceFactory"); 0116 registerFactory<SmsDbusInterface>(uri, "SmsDbusInterfaceFactory"); 0117 registerFactory<RemoteCommandsDbusInterface>(uri, "RemoteCommandsDbusInterfaceFactory"); 0118 registerFactory<ShareDbusInterface>(uri, "ShareDbusInterfaceFactory"); 0119 registerFactory<RemoteSystemVolumeDbusInterface>(uri, "RemoteSystemVolumeDbusInterfaceFactory"); 0120 registerFactory<BigscreenDbusInterface>(uri, "BigscreenDbusInterfaceFactory"); 0121 registerFactory<VirtualmonitorDbusInterface>(uri, "VirtualmonitorDbusInterfaceFactory"); 0122 } 0123 0124 void KdeConnectDeclarativePlugin::initializeEngine(QQmlEngine *engine, const char *uri) 0125 { 0126 QQmlExtensionPlugin::initializeEngine(engine, uri); 0127 0128 engine->rootContext()->setContextProperty(QStringLiteral("DBusResponseFactory"), new ObjectFactory(engine, createDBusResponse)); 0129 0130 engine->rootContext()->setContextProperty(QStringLiteral("DBusResponseWaiter"), DBusResponseWaiter::instance()); 0131 } 0132 0133 #include "moc_kdeconnectdeclarativeplugin.cpp"