File indexing completed on 2024-05-12 03:53:11

0001 /*
0002  * BluezQt - Asynchronous Bluez wrapper library
0003  *
0004  * SPDX-FileCopyrightText: 2015 David Rosca <nowrep@gmail.com>
0005  *
0006  * SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
0007  */
0008 
0009 #include "declarativeadapter.h"
0010 #include "declarativedevice.h"
0011 static qsizetype devicesCountDeclarativeAdapterFunction(QQmlListProperty<DeclarativeDevice> *property)
0012 {
0013     Q_ASSERT(qobject_cast<DeclarativeAdapter *>(property->object));
0014     DeclarativeAdapter *adapter = static_cast<DeclarativeAdapter *>(property->object);
0015 
0016     return adapter->m_devices.count();
0017 }
0018 
0019 static DeclarativeDevice *devicesAtDeclarativeAdapterFunction(QQmlListProperty<DeclarativeDevice> *property, qsizetype index)
0020 {
0021     Q_ASSERT(qobject_cast<DeclarativeAdapter *>(property->object));
0022     DeclarativeAdapter *adapter = static_cast<DeclarativeAdapter *>(property->object);
0023 
0024     return adapter->m_devices.values().at(index);
0025 }
0026 
0027 DeclarativeAdapter::DeclarativeAdapter(BluezQt::AdapterPtr adapter, QObject *parent)
0028     : QObject(parent)
0029     , m_adapter(adapter)
0030 {
0031     connect(m_adapter.data(), &BluezQt::Adapter::nameChanged, this, &DeclarativeAdapter::nameChanged);
0032     connect(m_adapter.data(), &BluezQt::Adapter::systemNameChanged, this, &DeclarativeAdapter::systemNameChanged);
0033     connect(m_adapter.data(), &BluezQt::Adapter::adapterClassChanged, this, &DeclarativeAdapter::adapterClassChanged);
0034     connect(m_adapter.data(), &BluezQt::Adapter::poweredChanged, this, &DeclarativeAdapter::poweredChanged);
0035     connect(m_adapter.data(), &BluezQt::Adapter::discoverableChanged, this, &DeclarativeAdapter::discoverableChanged);
0036     connect(m_adapter.data(), &BluezQt::Adapter::discoverableTimeoutChanged, this, &DeclarativeAdapter::discoverableTimeoutChanged);
0037     connect(m_adapter.data(), &BluezQt::Adapter::pairableChanged, this, &DeclarativeAdapter::pairableChanged);
0038     connect(m_adapter.data(), &BluezQt::Adapter::pairableTimeoutChanged, this, &DeclarativeAdapter::pairableTimeoutChanged);
0039     connect(m_adapter.data(), &BluezQt::Adapter::discoveringChanged, this, &DeclarativeAdapter::discoveringChanged);
0040     connect(m_adapter.data(), &BluezQt::Adapter::uuidsChanged, this, &DeclarativeAdapter::uuidsChanged);
0041     connect(m_adapter.data(), &BluezQt::Adapter::modaliasChanged, this, &DeclarativeAdapter::modaliasChanged);
0042 
0043     connect(m_adapter.data(), &BluezQt::Adapter::deviceAdded, this, &DeclarativeAdapter::slotDeviceAdded);
0044     connect(m_adapter.data(), &BluezQt::Adapter::deviceRemoved, this, &DeclarativeAdapter::slotDeviceRemoved);
0045 
0046     connect(m_adapter.data(), &BluezQt::Adapter::adapterRemoved, this, [this]() {
0047         Q_EMIT adapterRemoved(this);
0048     });
0049 
0050     connect(m_adapter.data(), &BluezQt::Adapter::adapterChanged, this, [this]() {
0051         Q_EMIT adapterChanged(this);
0052     });
0053 
0054     connect(m_adapter.data(), &BluezQt::Adapter::deviceChanged, this, [this](const BluezQt::DevicePtr &device) {
0055         Q_EMIT deviceChanged(declarativeDeviceFromPtr(device));
0056     });
0057 }
0058 
0059 QString DeclarativeAdapter::ubi() const
0060 {
0061     return m_adapter->ubi();
0062 }
0063 
0064 QString DeclarativeAdapter::address() const
0065 {
0066     return m_adapter->address();
0067 }
0068 
0069 QString DeclarativeAdapter::name() const
0070 {
0071     return m_adapter->name();
0072 }
0073 
0074 void DeclarativeAdapter::setName(const QString &name)
0075 {
0076     m_adapter->setName(name);
0077 }
0078 
0079 QString DeclarativeAdapter::systemName() const
0080 {
0081     return m_adapter->systemName();
0082 }
0083 
0084 quint32 DeclarativeAdapter::adapterClass() const
0085 {
0086     return m_adapter->adapterClass();
0087 }
0088 
0089 bool DeclarativeAdapter::isPowered() const
0090 {
0091     return m_adapter->isPowered();
0092 }
0093 
0094 void DeclarativeAdapter::setPowered(bool powered)
0095 {
0096     m_adapter->setPowered(powered);
0097 }
0098 
0099 bool DeclarativeAdapter::isDiscoverable() const
0100 {
0101     return m_adapter->isDiscoverable();
0102 }
0103 
0104 void DeclarativeAdapter::setDiscoverable(bool discoverable)
0105 {
0106     m_adapter->setDiscoverable(discoverable);
0107 }
0108 
0109 quint32 DeclarativeAdapter::discoverableTimeout() const
0110 {
0111     return m_adapter->discoverableTimeout();
0112 }
0113 
0114 void DeclarativeAdapter::setDiscoverableTimeout(quint32 timeout)
0115 {
0116     m_adapter->setDiscoverableTimeout(timeout);
0117 }
0118 
0119 bool DeclarativeAdapter::isPairable() const
0120 {
0121     return m_adapter->isPairable();
0122 }
0123 
0124 void DeclarativeAdapter::setPairable(bool pairable)
0125 {
0126     m_adapter->setPairable(pairable);
0127 }
0128 
0129 quint32 DeclarativeAdapter::pairableTimeout() const
0130 {
0131     return m_adapter->pairableTimeout();
0132 }
0133 
0134 void DeclarativeAdapter::setPairableTimeout(quint32 timeout)
0135 {
0136     m_adapter->setPairableTimeout(timeout);
0137 }
0138 
0139 bool DeclarativeAdapter::isDiscovering()
0140 {
0141     return m_adapter->isDiscovering();
0142 }
0143 
0144 QStringList DeclarativeAdapter::uuids() const
0145 {
0146     return m_adapter->uuids();
0147 }
0148 
0149 QString DeclarativeAdapter::modalias() const
0150 {
0151     return m_adapter->modalias();
0152 }
0153 
0154 QQmlListProperty<DeclarativeDevice> DeclarativeAdapter::devices()
0155 {
0156     return QQmlListProperty<DeclarativeDevice>(this, nullptr, devicesCountDeclarativeAdapterFunction, devicesAtDeclarativeAdapterFunction);
0157 }
0158 
0159 DeclarativeDevice *DeclarativeAdapter::deviceForAddress(const QString &address) const
0160 {
0161     return declarativeDeviceFromPtr(m_adapter->deviceForAddress(address));
0162 }
0163 
0164 BluezQt::PendingCall *DeclarativeAdapter::startDiscovery()
0165 {
0166     return m_adapter->startDiscovery();
0167 }
0168 
0169 BluezQt::PendingCall *DeclarativeAdapter::stopDiscovery()
0170 {
0171     return m_adapter->stopDiscovery();
0172 }
0173 
0174 BluezQt::PendingCall *DeclarativeAdapter::removeDevice(DeclarativeDevice *device)
0175 {
0176     return m_adapter->removeDevice(m_adapter->deviceForAddress(device->address()));
0177 }
0178 
0179 void DeclarativeAdapter::slotDeviceAdded(BluezQt::DevicePtr device)
0180 {
0181     Q_EMIT deviceFound(declarativeDeviceFromPtr(device));
0182     Q_EMIT devicesChanged(devices());
0183 }
0184 
0185 void DeclarativeAdapter::slotDeviceRemoved(BluezQt::DevicePtr device)
0186 {
0187     Q_EMIT deviceRemoved(declarativeDeviceFromPtr(device));
0188     Q_EMIT devicesChanged(devices());
0189 }
0190 
0191 DeclarativeDevice *DeclarativeAdapter::declarativeDeviceFromPtr(BluezQt::DevicePtr ptr) const
0192 {
0193     if (!ptr) {
0194         return nullptr;
0195     }
0196     return m_devices.value(ptr->ubi());
0197 }
0198 
0199 #include "moc_declarativeadapter.cpp"