File indexing completed on 2024-04-21 03:59:51

0001 /*
0002     SPDX-FileCopyrightText: 2013 Lukas Tinkl <ltinkl@redhat.com>
0003     SPDX-FileCopyrightText: 2013-2015 Jan Grulich <jgrulich@redhat.com>
0004 
0005     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0006 */
0007 
0008 #include "modemtime.h"
0009 #include "mmdebug_p.h"
0010 #include "modemtime_p.h"
0011 #ifdef MMQT_STATIC
0012 #include "dbus/fakedbus.h"
0013 #else
0014 #include "dbus/dbus.h"
0015 #endif
0016 
0017 namespace ModemManager
0018 {
0019 class ModemManager::NetworkTimezone::Private
0020 {
0021 public:
0022     Private()
0023     {
0024     }
0025     int offset;
0026     int dstOffset;
0027     int leapSecond;
0028 };
0029 
0030 }
0031 
0032 ModemManager::NetworkTimezone::NetworkTimezone()
0033     : d(new Private())
0034 {
0035 }
0036 
0037 ModemManager::NetworkTimezone::NetworkTimezone(const ModemManager::NetworkTimezone &other)
0038     : d(new Private)
0039 {
0040     *this = other;
0041 }
0042 
0043 ModemManager::NetworkTimezone::~NetworkTimezone()
0044 {
0045     delete d;
0046 }
0047 
0048 int ModemManager::NetworkTimezone::offset() const
0049 {
0050     return d->offset;
0051 }
0052 
0053 void ModemManager::NetworkTimezone::setOffset(int offset)
0054 {
0055     d->offset = offset;
0056 }
0057 
0058 int ModemManager::NetworkTimezone::dstOffset() const
0059 {
0060     return d->dstOffset;
0061 }
0062 
0063 void ModemManager::NetworkTimezone::setDstOffset(int dstOffset)
0064 {
0065     d->dstOffset = dstOffset;
0066 }
0067 
0068 int ModemManager::NetworkTimezone::leapSecond() const
0069 {
0070     return d->leapSecond;
0071 }
0072 
0073 void ModemManager::NetworkTimezone::setLeapSecond(int leapSecond)
0074 {
0075     d->leapSecond = leapSecond;
0076 }
0077 
0078 ModemManager::NetworkTimezone &ModemManager::NetworkTimezone::operator=(const ModemManager::NetworkTimezone &other)
0079 {
0080     if (this == &other) {
0081         return *this;
0082     }
0083 
0084     *d = *other.d;
0085     return *this;
0086 }
0087 
0088 ModemManager::ModemTimePrivate::ModemTimePrivate(const QString &path, ModemTime *q)
0089     : InterfacePrivate(path, q)
0090 #ifdef MMQT_STATIC
0091     , modemTimeIface(QLatin1String(MMQT_DBUS_SERVICE), path, QDBusConnection::sessionBus())
0092 #else
0093     , modemTimeIface(QLatin1String(MMQT_DBUS_SERVICE), path, QDBusConnection::systemBus())
0094 #endif
0095     , q_ptr(q)
0096 {
0097     if (modemTimeIface.isValid()) {
0098         networkTimezone = variantMapToTimezone(modemTimeIface.networkTimezone());
0099     }
0100 }
0101 
0102 ModemManager::ModemTime::ModemTime(const QString &path, QObject *parent)
0103     : Interface(*new ModemTimePrivate(path, this), parent)
0104 {
0105     Q_D(ModemTime);
0106 
0107     connect(&d->modemTimeIface, &OrgFreedesktopModemManager1ModemTimeInterface::NetworkTimeChanged, d, &ModemTimePrivate::onNetworkTimeChanged);
0108 #ifdef MMQT_STATIC
0109     QDBusConnection::sessionBus().connect(QLatin1String(MMQT_DBUS_SERVICE),
0110                                           d->uni,
0111                                           QLatin1String(DBUS_INTERFACE_PROPS),
0112                                           QStringLiteral("PropertiesChanged"),
0113                                           d,
0114                                           SLOT(onPropertiesChanged(QString, QVariantMap, QStringList)));
0115 #else
0116     QDBusConnection::systemBus().connect(QLatin1String(MMQT_DBUS_SERVICE),
0117                                          d->uni,
0118                                          QLatin1String(DBUS_INTERFACE_PROPS),
0119                                          QStringLiteral("PropertiesChanged"),
0120                                          d,
0121                                          SLOT(onPropertiesChanged(QString, QVariantMap, QStringList)));
0122 #endif
0123 }
0124 
0125 ModemManager::ModemTime::~ModemTime()
0126 {
0127 }
0128 
0129 QDBusPendingReply<QString> ModemManager::ModemTime::networkTime()
0130 {
0131     Q_D(ModemTime);
0132 
0133     return d->modemTimeIface.GetNetworkTime();
0134 }
0135 
0136 ModemManager::NetworkTimezone ModemManager::ModemTime::networkTimezone() const
0137 {
0138     Q_D(const ModemTime);
0139 
0140     return d->networkTimezone;
0141 }
0142 
0143 ModemManager::NetworkTimezone ModemManager::ModemTimePrivate::variantMapToTimezone(const QVariantMap &map)
0144 {
0145     ModemManager::NetworkTimezone result;
0146     if (map.contains(QLatin1String("offset"))) {
0147         result.setOffset(map.value(QStringLiteral("offset")).toInt());
0148     }
0149     if (map.contains(QLatin1String("dst-offset"))) {
0150         result.setDstOffset(map.value(QStringLiteral("dst-offset")).toInt());
0151     }
0152     if (map.contains(QLatin1String("leap-seconds"))) {
0153         result.setLeapSecond(map.value(QStringLiteral("leap-seconds")).toInt());
0154     }
0155 
0156     return result;
0157 }
0158 
0159 void ModemManager::ModemTime::setTimeout(int timeout)
0160 {
0161     Q_D(ModemTime);
0162     d->modemTimeIface.setTimeout(timeout);
0163 }
0164 
0165 int ModemManager::ModemTime::timeout() const
0166 {
0167     Q_D(const ModemTime);
0168     return d->modemTimeIface.timeout();
0169 }
0170 
0171 void ModemManager::ModemTimePrivate::onNetworkTimeChanged(const QString &isoDateTime)
0172 {
0173     Q_Q(ModemTime);
0174 
0175     const QDateTime result = QDateTime::fromString(isoDateTime, Qt::ISODate);
0176     if (result.isValid()) {
0177         Q_EMIT q->networkTimeChanged(result);
0178     }
0179 }
0180 
0181 void ModemManager::ModemTimePrivate::onPropertiesChanged(const QString &interface, const QVariantMap &properties, const QStringList &invalidatedProps)
0182 {
0183     Q_Q(ModemTime);
0184     Q_UNUSED(invalidatedProps);
0185     qCDebug(MMQT) << interface << properties.keys();
0186 
0187     if (interface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_TIME)) {
0188         QVariantMap::const_iterator it = properties.constFind(QLatin1String(MM_MODEM_TIME_PROPERTY_NETWORKTIMEZONE));
0189         if (it != properties.constEnd()) {
0190             networkTimezone = variantMapToTimezone(qdbus_cast<QVariantMap>(*it));
0191             Q_EMIT q->networkTimezoneChanged(networkTimezone);
0192         }
0193     }
0194 }
0195 
0196 #include "moc_modemtime.cpp"