File indexing completed on 2024-04-14 03:57:24

0001 /*
0002     SPDX-FileCopyrightText: 2008 Will Stephenson <wstephenson@kde.org>
0003     SPDX-FileCopyrightText: 2010 Lamarque Souza <lamarque@kde.org>
0004     SPDX-FileCopyrightText: 2013 Lukas Tinkl <ltinkl@redhat.com>
0005     SPDX-FileCopyrightText: 2013 Jan Grulich <jgrulich@redhat.com>
0006 
0007     SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0008 */
0009 
0010 #include "modemlocation.h"
0011 #include "mmdebug_p.h"
0012 #include "modemlocation_p.h"
0013 #ifdef MMQT_STATIC
0014 #include "dbus/fakedbus.h"
0015 #else
0016 #include "dbus/dbus.h"
0017 #endif
0018 
0019 ModemManager::ModemLocationPrivate::ModemLocationPrivate(const QString &path, ModemLocation *q)
0020     : InterfacePrivate(path, q)
0021 #ifdef MMQT_STATIC
0022     , modemLocationIface(QLatin1String(MMQT_DBUS_SERVICE), path, QDBusConnection::sessionBus())
0023 #else
0024     , modemLocationIface(QLatin1String(MMQT_DBUS_SERVICE), path, QDBusConnection::systemBus())
0025 #endif
0026     , q_ptr(q)
0027 {
0028     if (modemLocationIface.isValid()) {
0029         capabilities = (ModemManager::ModemLocation::LocationSources)modemLocationIface.capabilities();
0030         enabledCapabilities = (ModemManager::ModemLocation::LocationSources)modemLocationIface.enabled();
0031         signalsLocation = modemLocationIface.signalsLocation();
0032         location = modemLocationIface.location();
0033     }
0034 }
0035 
0036 ModemManager::ModemLocation::ModemLocation(const QString &path, QObject *parent)
0037     : Interface(*new ModemLocationPrivate(path, this), parent)
0038 {
0039     Q_D(ModemLocation);
0040 
0041     qRegisterMetaType<LocationSources>();
0042 
0043 #ifdef MMQT_STATIC
0044     QDBusConnection::sessionBus().connect(QLatin1String(MMQT_DBUS_SERVICE),
0045                                           d->uni,
0046                                           QLatin1String(DBUS_INTERFACE_PROPS),
0047                                           QStringLiteral("PropertiesChanged"),
0048                                           d,
0049                                           SLOT(onPropertiesChanged(QString, QVariantMap, QStringList)));
0050 #else
0051     QDBusConnection::systemBus().connect(QLatin1String(MMQT_DBUS_SERVICE),
0052                                          d->uni,
0053                                          QLatin1String(DBUS_INTERFACE_PROPS),
0054                                          QStringLiteral("PropertiesChanged"),
0055                                          d,
0056                                          SLOT(onPropertiesChanged(QString, QVariantMap, QStringList)));
0057 #endif
0058 }
0059 
0060 ModemManager::ModemLocation::~ModemLocation()
0061 {
0062 }
0063 
0064 QDBusPendingReply<void> ModemManager::ModemLocation::setup(ModemManager::ModemLocation::LocationSources sources, bool signalLocation)
0065 {
0066     Q_D(ModemLocation);
0067     return d->modemLocationIface.Setup(sources, signalLocation);
0068 }
0069 
0070 QDBusPendingReply<ModemManager::LocationInformationMap> ModemManager::ModemLocation::getLocation()
0071 {
0072     Q_D(ModemLocation);
0073     return d->modemLocationIface.GetLocation();
0074 }
0075 
0076 ModemManager::ModemLocation::LocationSources ModemManager::ModemLocation::capabilities() const
0077 {
0078     Q_D(const ModemLocation);
0079     return (LocationSources)d->capabilities;
0080 }
0081 
0082 ModemManager::ModemLocation::LocationSources ModemManager::ModemLocation::enabledCapabilities() const
0083 {
0084     Q_D(const ModemLocation);
0085     return (LocationSources)d->enabledCapabilities;
0086 }
0087 
0088 bool ModemManager::ModemLocation::isEnabled() const
0089 {
0090     Q_D(const ModemLocation);
0091     return d->enabledCapabilities > MM_MODEM_LOCATION_SOURCE_NONE;
0092 }
0093 
0094 bool ModemManager::ModemLocation::signalsLocation() const
0095 {
0096     Q_D(const ModemLocation);
0097     return d->signalsLocation;
0098 }
0099 
0100 ModemManager::LocationInformationMap ModemManager::ModemLocation::location() const
0101 {
0102     Q_D(const ModemLocation);
0103     return d->location;
0104 }
0105 
0106 void ModemManager::ModemLocation::setTimeout(int timeout)
0107 {
0108     Q_D(ModemLocation);
0109     d->modemLocationIface.setTimeout(timeout);
0110 }
0111 
0112 int ModemManager::ModemLocation::timeout() const
0113 {
0114     Q_D(const ModemLocation);
0115     return d->modemLocationIface.timeout();
0116 }
0117 
0118 void ModemManager::ModemLocationPrivate::onPropertiesChanged(const QString &interface, const QVariantMap &properties, const QStringList &invalidatedProps)
0119 {
0120     Q_Q(ModemLocation);
0121     Q_UNUSED(invalidatedProps);
0122     qCDebug(MMQT) << interface << properties.keys();
0123 
0124     if (interface == QLatin1String(MMQT_DBUS_INTERFACE_MODEM_LOCATION)) {
0125         QVariantMap::const_iterator it = properties.constFind(QLatin1String(MM_MODEM_LOCATION_PROPERTY_CAPABILITIES));
0126         if (it != properties.constEnd()) {
0127             capabilities = (ModemManager::ModemLocation::LocationSources)it->toUInt();
0128             Q_EMIT q->capabilitiesChanged(capabilities);
0129         }
0130         it = properties.constFind(QLatin1String(MM_MODEM_LOCATION_PROPERTY_ENABLED));
0131         if (it != properties.constEnd()) {
0132             enabledCapabilities = (ModemManager::ModemLocation::LocationSources)it->toUInt();
0133             Q_EMIT q->enabledCapabilitiesChanged(enabledCapabilities);
0134         }
0135         it = properties.constFind(QLatin1String(MM_MODEM_LOCATION_PROPERTY_SIGNALSLOCATION));
0136         if (it != properties.constEnd()) {
0137             signalsLocation = it->toBool();
0138             Q_EMIT q->signalsLocationChanged(signalsLocation);
0139         }
0140         it = properties.constFind(QLatin1String(MM_MODEM_LOCATION_PROPERTY_LOCATION));
0141         if (it != properties.constEnd()) {
0142             location = qdbus_cast<ModemManager::LocationInformationMap>(*it);
0143             Q_EMIT q->locationChanged(location);
0144         }
0145     }
0146 }
0147 
0148 #include "moc_modemlocation.cpp"