File indexing completed on 2024-04-28 11:47:37

0001 /*
0002     SPDX-FileCopyrightText: 2013 Anant Kamath <kamathanant@gmail.com>
0003     SPDX-FileCopyrightText: 2013 Lukas Tinkl <ltinkl@redhat.com>
0004     SPDX-FileCopyrightText: 2013-2015 Jan Grulich <jgrulich@redhat.com>
0005 
0006     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0007 */
0008 
0009 #include "sms.h"
0010 #include "mmdebug_p.h"
0011 #include "sms_p.h"
0012 
0013 #ifdef MMQT_STATIC
0014 #include "dbus/fakedbus.h"
0015 #else
0016 #include "dbus/dbus.h"
0017 #endif
0018 
0019 #include <ModemManager/ModemManager.h>
0020 
0021 ModemManager::SmsPrivate::SmsPrivate(const QString &path, Sms *q)
0022 #ifdef MMQT_STATIC
0023     : smsIface(QLatin1String(MMQT_DBUS_SERVICE), path, QDBusConnection::sessionBus())
0024 #else
0025     : smsIface(QLatin1String(MMQT_DBUS_SERVICE), path, QDBusConnection::systemBus())
0026 #endif
0027     , q_ptr(q)
0028 {
0029     if (smsIface.isValid()) {
0030         uni = path;
0031         state = (MMSmsState)smsIface.state();
0032         pduType = (MMSmsPduType)smsIface.pduType();
0033         number = smsIface.number();
0034         text = smsIface.text();
0035         smsc = smsIface.SMSC();
0036         data = smsIface.data();
0037         validity = smsIface.validity();
0038         smsClass = smsIface.smsClass();
0039         deliveryReportRequest = smsIface.deliveryReportRequest();
0040         messageReference = smsIface.messageReference();
0041         timestamp = QDateTime::fromString(smsIface.timestamp(), Qt::ISODateWithMs);
0042         dischargeTimestamp = QDateTime::fromString(smsIface.dischargeTimestamp(), Qt::ISODateWithMs);
0043         deliveryState = (MMSmsDeliveryState)smsIface.deliveryState();
0044         storage = (MMSmsStorage)smsIface.storage();
0045 #if MM_CHECK_VERSION(1, 2, 0)
0046         serviceCategory = (MMSmsCdmaServiceCategory)smsIface.serviceCategory();
0047         teleserviceId = (MMSmsCdmaTeleserviceId)smsIface.teleserviceId();
0048 #endif
0049     }
0050 }
0051 
0052 ModemManager::Sms::Sms(const QString &path, QObject *parent)
0053     : QObject(parent)
0054     , d_ptr(new SmsPrivate(path, this))
0055 {
0056     Q_D(Sms);
0057 
0058     qRegisterMetaType<MMSmsDeliveryState>();
0059     qRegisterMetaType<MMSmsPduType>();
0060     qRegisterMetaType<MMSmsState>();
0061     qRegisterMetaType<MMSmsStorage>();
0062 #if MM_CHECK_VERSION(1, 2, 0)
0063     qRegisterMetaType<MMSmsCdmaServiceCategory>();
0064     qRegisterMetaType<MMSmsCdmaTeleserviceId>();
0065 #endif
0066 
0067 #ifdef MMQT_STATIC
0068     QDBusConnection::sessionBus().connect(QLatin1String(MMQT_DBUS_SERVICE),
0069                                           path,
0070                                           QLatin1String(DBUS_INTERFACE_PROPS),
0071                                           QStringLiteral("PropertiesChanged"),
0072                                           d,
0073                                           SLOT(onPropertiesChanged(QString, QVariantMap, QStringList)));
0074 #else
0075     QDBusConnection::systemBus().connect(QLatin1String(MMQT_DBUS_SERVICE),
0076                                          path,
0077                                          QLatin1String(DBUS_INTERFACE_PROPS),
0078                                          QStringLiteral("PropertiesChanged"),
0079                                          d,
0080                                          SLOT(onPropertiesChanged(QString, QVariantMap, QStringList)));
0081 #endif
0082 }
0083 
0084 ModemManager::Sms::~Sms()
0085 {
0086     delete d_ptr;
0087 }
0088 
0089 QString ModemManager::Sms::uni() const
0090 {
0091     Q_D(const Sms);
0092     return d->uni;
0093 }
0094 
0095 QDBusPendingReply<> ModemManager::Sms::send()
0096 {
0097     Q_D(Sms);
0098     return d->smsIface.Send();
0099 }
0100 
0101 QDBusPendingReply<> ModemManager::Sms::store(MMSmsStorage storage)
0102 {
0103     Q_D(Sms);
0104     return d->smsIface.Store(storage);
0105 }
0106 
0107 MMSmsState ModemManager::Sms::state() const
0108 {
0109     Q_D(const Sms);
0110     return d->state;
0111 }
0112 
0113 MMSmsPduType ModemManager::Sms::pduType() const
0114 {
0115     Q_D(const Sms);
0116     return d->pduType;
0117 }
0118 
0119 QString ModemManager::Sms::number() const
0120 {
0121     Q_D(const Sms);
0122     return d->number;
0123 }
0124 
0125 QString ModemManager::Sms::text() const
0126 {
0127     Q_D(const Sms);
0128     return d->text;
0129 }
0130 
0131 QString ModemManager::Sms::SMSC() const
0132 {
0133     Q_D(const Sms);
0134     return d->smsc;
0135 }
0136 
0137 QByteArray ModemManager::Sms::data() const
0138 {
0139     Q_D(const Sms);
0140     return d->data;
0141 }
0142 
0143 ModemManager::ValidityPair ModemManager::Sms::validity() const
0144 {
0145     Q_D(const Sms);
0146     return d->validity;
0147 }
0148 
0149 int ModemManager::Sms::smsClass() const
0150 {
0151     Q_D(const Sms);
0152     return d->smsClass;
0153 }
0154 
0155 bool ModemManager::Sms::deliveryReportRequest() const
0156 {
0157     Q_D(const Sms);
0158     return d->deliveryReportRequest;
0159 }
0160 
0161 uint ModemManager::Sms::messageReference() const
0162 {
0163     Q_D(const Sms);
0164     return d->messageReference;
0165 }
0166 
0167 QDateTime ModemManager::Sms::timestamp() const
0168 {
0169     Q_D(const Sms);
0170     return d->timestamp;
0171 }
0172 
0173 QDateTime ModemManager::Sms::dischargeTimestamp() const
0174 {
0175     Q_D(const Sms);
0176     return d->dischargeTimestamp;
0177 }
0178 
0179 MMSmsDeliveryState ModemManager::Sms::deliveryState() const
0180 {
0181     Q_D(const Sms);
0182     return d->deliveryState;
0183 }
0184 
0185 MMSmsStorage ModemManager::Sms::storage() const
0186 {
0187     Q_D(const Sms);
0188     return d->storage;
0189 }
0190 #if MM_CHECK_VERSION(1, 2, 0)
0191 MMSmsCdmaServiceCategory ModemManager::Sms::serviceCategory() const
0192 {
0193     Q_D(const Sms);
0194     return d->serviceCategory;
0195 }
0196 
0197 MMSmsCdmaTeleserviceId ModemManager::Sms::teleserviceId() const
0198 {
0199     Q_D(const Sms);
0200     return d->teleserviceId;
0201 }
0202 #endif
0203 
0204 void ModemManager::Sms::setTimeout(int timeout)
0205 {
0206     Q_D(Sms);
0207     d->smsIface.setTimeout(timeout);
0208 }
0209 
0210 int ModemManager::Sms::timeout() const
0211 {
0212     Q_D(const Sms);
0213     return d->smsIface.timeout();
0214 }
0215 
0216 void ModemManager::SmsPrivate::onPropertiesChanged(const QString &interfaceName, const QVariantMap &changedProperties, const QStringList &invalidatedProperties)
0217 {
0218     Q_UNUSED(invalidatedProperties);
0219     Q_Q(Sms);
0220 
0221     if (interfaceName == QLatin1String(MMQT_DBUS_INTERFACE_SMS)) {
0222         QVariantMap::const_iterator it = changedProperties.constFind(QLatin1String(MM_SMS_PROPERTY_STATE));
0223         if (it != changedProperties.constEnd()) {
0224             state = (MMSmsState)it->toUInt();
0225             qCDebug(MMQT) << state;
0226             Q_EMIT q->stateChanged(state);
0227         }
0228         it = changedProperties.constFind(QLatin1String(MM_SMS_PROPERTY_PDUTYPE));
0229         if (it != changedProperties.constEnd()) {
0230             pduType = (MMSmsPduType)it->toUInt();
0231             Q_EMIT q->pduTypeChanged(pduType);
0232         }
0233         it = changedProperties.constFind(QLatin1String(MM_SMS_PROPERTY_NUMBER));
0234         if (it != changedProperties.constEnd()) {
0235             number = it->toString();
0236             Q_EMIT q->numberChanged(number);
0237         }
0238         it = changedProperties.constFind(QLatin1String(MM_SMS_PROPERTY_SMSC));
0239         if (it != changedProperties.constEnd()) {
0240             smsc = it->toString();
0241             Q_EMIT q->SMSCChanged(smsc);
0242         }
0243         it = changedProperties.constFind(QLatin1String(MM_SMS_PROPERTY_DATA));
0244         if (it != changedProperties.constEnd()) {
0245             data = it->toByteArray();
0246             Q_EMIT q->dataChanged(data);
0247         }
0248         it = changedProperties.constFind(QLatin1String(MM_SMS_PROPERTY_TEXT));
0249         if (it != changedProperties.constEnd()) {
0250             text = it->toString();
0251             Q_EMIT q->textChanged(text);
0252         }
0253         it = changedProperties.constFind(QLatin1String(MM_SMS_PROPERTY_VALIDITY));
0254         if (it != changedProperties.constEnd()) {
0255             validity = it->value<ValidityPair>();
0256             Q_EMIT q->validityChanged(validity);
0257         }
0258         it = changedProperties.constFind(QLatin1String(MM_SMS_PROPERTY_CLASS));
0259         if (it != changedProperties.constEnd()) {
0260             smsClass = it->toInt();
0261             Q_EMIT q->smsClassChanged(smsClass);
0262         }
0263         it = changedProperties.constFind(QLatin1String(MM_SMS_PROPERTY_DELIVERYREPORTREQUEST));
0264         if (it != changedProperties.constEnd()) {
0265             deliveryReportRequest = it->toBool();
0266             Q_EMIT q->deliveryReportRequestChanged(deliveryReportRequest);
0267         }
0268         it = changedProperties.constFind(QLatin1String(MM_SMS_PROPERTY_MESSAGEREFERENCE));
0269         if (it != changedProperties.constEnd()) {
0270             messageReference = it->toUInt();
0271             Q_EMIT q->messageReferenceChanged(messageReference);
0272         }
0273         it = changedProperties.constFind(QLatin1String(MM_SMS_PROPERTY_TIMESTAMP));
0274         if (it != changedProperties.constEnd()) {
0275             timestamp = QDateTime::fromString(it->toString(), Qt::ISODate);
0276             Q_EMIT q->timestampChanged(timestamp);
0277         }
0278         it = changedProperties.constFind(QLatin1String(MM_SMS_PROPERTY_DISCHARGETIMESTAMP));
0279         if (it != changedProperties.constEnd()) {
0280             dischargeTimestamp = QDateTime::fromString(it->toString(), Qt::ISODate);
0281             Q_EMIT q->dischargeTimestampChanged(dischargeTimestamp);
0282         }
0283         it = changedProperties.constFind(QLatin1String(MM_SMS_PROPERTY_DELIVERYSTATE));
0284         if (it != changedProperties.constEnd()) {
0285             deliveryState = (MMSmsDeliveryState)it->toUInt();
0286             Q_EMIT q->deliveryStateChanged(deliveryState);
0287         }
0288         it = changedProperties.constFind(QLatin1String(MM_SMS_PROPERTY_STORAGE));
0289         if (it != changedProperties.constEnd()) {
0290             storage = (MMSmsStorage)it->toUInt();
0291             Q_EMIT q->storageChanged(storage);
0292         }
0293 #if MM_CHECK_VERSION(1, 2, 0)
0294         it = changedProperties.constFind(QLatin1String(MM_SMS_PROPERTY_SERVICECATEGORY));
0295         if (it != changedProperties.constEnd()) {
0296             serviceCategory = (MMSmsCdmaServiceCategory)it->toUInt();
0297             Q_EMIT q->serviceCategoryChanged(serviceCategory);
0298         }
0299         it = changedProperties.constFind(QLatin1String(MM_SMS_PROPERTY_TELESERVICEID));
0300         if (it != changedProperties.constEnd()) {
0301             teleserviceId = (MMSmsCdmaTeleserviceId)it->toUInt();
0302             Q_EMIT q->teleserviceIdChanged(teleserviceId);
0303         }
0304 #endif
0305     }
0306 }
0307 
0308 #include "moc_sms.cpp"
0309 #include "moc_sms_p.cpp"