File indexing completed on 2024-04-28 03:59:49

0001 /*
0002     SPDX-FileCopyrightText: 2015 Jan Grulich <jgrulich@redhat.com>
0003 
0004     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0005 */
0006 
0007 #include "modemmessaging.h"
0008 
0009 #include <QDBusConnection>
0010 #include <QDBusMessage>
0011 
0012 ModemMessaging::ModemMessaging(QObject *parent)
0013     : QDBusAbstractAdaptor(parent)
0014     , m_enabledNotifications(false)
0015     , m_messageCounter(0)
0016     , m_defaultStorage(0)
0017 {
0018 }
0019 
0020 ModemMessaging::~ModemMessaging()
0021 {
0022 }
0023 
0024 uint ModemMessaging::defaultStorage() const
0025 {
0026     return m_defaultStorage;
0027 }
0028 
0029 QList<QDBusObjectPath> ModemMessaging::messages() const
0030 {
0031     return m_messages.keys();
0032 }
0033 
0034 ModemManager::UIntList ModemMessaging::supportedStorages() const
0035 {
0036     return m_supportedStorages;
0037 }
0038 
0039 QDBusObjectPath ModemMessaging::Create(const QVariantMap &properties)
0040 {
0041     Q_UNUSED(properties);
0042     return QDBusObjectPath();
0043 }
0044 
0045 void ModemMessaging::Delete(const QDBusObjectPath &path)
0046 {
0047     m_messages.remove(path);
0048     QDBusConnection::sessionBus().unregisterObject(path.path());
0049 
0050     Q_EMIT Deleted(path);
0051 }
0052 
0053 QList<QDBusObjectPath> ModemMessaging::List()
0054 {
0055     return m_messages.keys();
0056 }
0057 
0058 void ModemMessaging::setModemPath(const QString &path)
0059 {
0060     m_modemPath = path;
0061 }
0062 
0063 void ModemMessaging::setEnableNotifications(bool enable)
0064 {
0065     m_enabledNotifications = enable;
0066 }
0067 
0068 void ModemMessaging::addMessage(Sms *sms)
0069 {
0070     QString newSmsPath = QStringLiteral("/org/kde/fakemodem/Sms/") + QString::number(m_messageCounter++);
0071     sms->setSmsPath(newSmsPath);
0072     sms->setEnableNotifications(true);
0073     m_messages.insert(QDBusObjectPath(newSmsPath), sms);
0074     QDBusConnection::sessionBus().registerObject(newSmsPath, sms, QDBusConnection::ExportScriptableContents);
0075     Q_EMIT Added(QDBusObjectPath(newSmsPath), false);
0076 }
0077 
0078 void ModemMessaging::setDefaultStorage(uint defaultStorage)
0079 {
0080     m_defaultStorage = defaultStorage;
0081 
0082     if (m_enabledNotifications) {
0083         QVariantMap map;
0084         map.insert(QLatin1String("DefaultStorage"), m_defaultStorage);
0085         QDBusMessage message = QDBusMessage::createSignal(m_modemPath, QLatin1String("org.freedesktop.DBus.Properties"), QLatin1String("PropertiesChanged"));
0086         message << QLatin1String("org.kde.fakemodem.Modem.Messaging") << map << QStringList();
0087         QDBusConnection::sessionBus().send(message);
0088     }
0089 }
0090 
0091 void ModemMessaging::setSupportedStorages(const ModemManager::UIntList &supportedStorages)
0092 {
0093     m_supportedStorages = supportedStorages;
0094 
0095     if (m_enabledNotifications) {
0096         QVariantMap map;
0097         map.insert(QLatin1String("SupportedStorages"), QVariant::fromValue<ModemManager::UIntList>(m_supportedStorages));
0098         QDBusMessage message = QDBusMessage::createSignal(m_modemPath, QLatin1String("org.freedesktop.DBus.Properties"), QLatin1String("PropertiesChanged"));
0099         message << QLatin1String("org.kde.fakemodem.Modem.Messaging") << map << QStringList();
0100         QDBusConnection::sessionBus().send(message);
0101     }
0102 }
0103 
0104 QVariantMap ModemMessaging::toMap() const
0105 {
0106     QVariantMap map;
0107 #if MM_CHECK_VERSION(1, 2, 0)
0108     map.insert(QLatin1String(MM_MODEM_MESSAGING_PROPERTY_MESSAGES), QVariant::fromValue<QList<QDBusObjectPath>>(m_messages.keys()));
0109 #endif
0110     map.insert(QLatin1String(MM_MODEM_MESSAGING_PROPERTY_SUPPORTEDSTORAGES), QVariant::fromValue<ModemManager::UIntList>(m_supportedStorages));
0111     map.insert(QLatin1String(MM_MODEM_MESSAGING_PROPERTY_DEFAULTSTORAGE), m_defaultStorage);
0112     return map;
0113 }
0114 
0115 #include "moc_modemmessaging.cpp"