File indexing completed on 2025-02-02 14:20:53
0001 /* 0002 SPDX-FileCopyrightText: 2018 Aleksander Morgado <aleksander@aleksander.es> 0003 0004 SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL 0005 */ 0006 0007 #include "modemvoice.h" 0008 #include "modemvoice_p.h" 0009 0010 #ifdef MMQT_STATIC 0011 #include "dbus/fakedbus.h" 0012 #else 0013 #include "dbus/dbus.h" 0014 #endif 0015 #include "mmdebug_p.h" 0016 0017 #include <ModemManager/ModemManager.h> 0018 0019 ModemManager::ModemVoicePrivate::ModemVoicePrivate(const QString &path, ModemVoice *q) 0020 : InterfacePrivate(path, q) 0021 #ifdef MMQT_STATIC 0022 , modemVoiceIface(QLatin1String(MMQT_DBUS_SERVICE), path, QDBusConnection::sessionBus()) 0023 #else 0024 , modemVoiceIface(QLatin1String(MMQT_DBUS_SERVICE), path, QDBusConnection::systemBus()) 0025 #endif 0026 , q_ptr(q) 0027 { 0028 if (modemVoiceIface.isValid()) { 0029 connect(&modemVoiceIface, &OrgFreedesktopModemManager1ModemVoiceInterface::CallAdded, this, &ModemVoicePrivate::onCallAdded); 0030 connect(&modemVoiceIface, &OrgFreedesktopModemManager1ModemVoiceInterface::CallDeleted, this, &ModemVoicePrivate::onCallDeleted); 0031 } 0032 } 0033 0034 ModemManager::ModemVoice::ModemVoice(const QString &path, QObject *parent) 0035 : Interface(*new ModemVoicePrivate(path, this), parent) 0036 { 0037 Q_D(ModemVoice); 0038 0039 // Note: no need to listen for PropertiesChanged signals. Additions and 0040 // removals of calls are already notified via CallAdded and CallRemoved 0041 0042 QList<QDBusObjectPath> calls = d->modemVoiceIface.calls(); 0043 Q_FOREACH (const QDBusObjectPath &op, calls) { 0044 const QString path = op.path(); 0045 d->callList.insert(path, ModemManager::Call::Ptr()); 0046 Q_EMIT callAdded(path); 0047 } 0048 } 0049 0050 ModemManager::ModemVoice::~ModemVoice() 0051 { 0052 } 0053 0054 ModemManager::Call::Ptr ModemManager::ModemVoicePrivate::findCall(const QString &uni) 0055 { 0056 ModemManager::Call::Ptr call; 0057 if (callList.contains(uni)) { 0058 if (callList.value(uni)) { 0059 call = callList.value(uni); 0060 } else { 0061 call = ModemManager::Call::Ptr(new ModemManager::Call(uni), &QObject::deleteLater); 0062 callList[uni] = call; 0063 } 0064 } 0065 return call; 0066 } 0067 0068 ModemManager::Call::List ModemManager::ModemVoicePrivate::ModemVoicePrivate::calls() 0069 { 0070 ModemManager::Call::List list; 0071 0072 QMap<QString, ModemManager::Call::Ptr>::const_iterator i; 0073 for (i = callList.constBegin(); i != callList.constEnd(); ++i) { 0074 ModemManager::Call::Ptr call = findCall(i.key()); 0075 if (call) { 0076 list.append(call); 0077 } else { 0078 qCWarning(MMQT) << "warning: null call for" << i.key(); 0079 } 0080 } 0081 0082 return list; 0083 } 0084 0085 void ModemManager::ModemVoicePrivate::onCallAdded(const QDBusObjectPath &path) 0086 { 0087 Q_Q(ModemVoice); 0088 callList.insert(path.path(), ModemManager::Call::Ptr()); 0089 Q_EMIT q->callAdded(path.path()); 0090 } 0091 0092 void ModemManager::ModemVoicePrivate::onCallDeleted(const QDBusObjectPath &path) 0093 { 0094 Q_Q(ModemVoice); 0095 callList.remove(path.path()); 0096 Q_EMIT q->callDeleted(path.path()); 0097 } 0098 0099 ModemManager::Call::List ModemManager::ModemVoice::calls() const 0100 { 0101 Q_D(const ModemVoice); 0102 return const_cast<ModemVoicePrivate *>(d)->calls(); 0103 } 0104 0105 QDBusPendingReply<QDBusObjectPath> ModemManager::ModemVoice::createCall(const QString &number) 0106 { 0107 QVariantMap map; 0108 map.insert(QStringLiteral("number"), number); 0109 return createCall(map); 0110 } 0111 0112 QDBusPendingReply<QDBusObjectPath> ModemManager::ModemVoice::createCall(const QVariantMap &call) 0113 { 0114 Q_D(ModemVoice); 0115 0116 if (!call.contains(QLatin1String("number"))) { 0117 qCDebug(MMQT) << "Unable to create call, missing some property"; 0118 return QDBusPendingReply<QDBusObjectPath>(); 0119 } 0120 0121 return d->modemVoiceIface.CreateCall(call); 0122 } 0123 0124 QDBusPendingReply<void> ModemManager::ModemVoice::deleteCall(const QString &uni) 0125 { 0126 Q_D(ModemVoice); 0127 return d->modemVoiceIface.DeleteCall(QDBusObjectPath(uni)); 0128 } 0129 0130 ModemManager::Call::Ptr ModemManager::ModemVoice::findCall(const QString &uni) 0131 { 0132 Q_D(ModemVoice); 0133 return d->findCall(uni); 0134 } 0135 0136 void ModemManager::ModemVoice::setTimeout(int timeout) 0137 { 0138 Q_D(ModemVoice); 0139 d->modemVoiceIface.setTimeout(timeout); 0140 } 0141 0142 int ModemManager::ModemVoice::timeout() const 0143 { 0144 Q_D(const ModemVoice); 0145 return d->modemVoiceIface.timeout(); 0146 } 0147 0148 #include "moc_modemvoice.cpp"