You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
libcutefish/bluez/declarativeadapter.cpp

199 lines
5.9 KiB
C++

/*
* BluezQt - Asynchronous Bluez wrapper library
*
* SPDX-FileCopyrightText: 2015 David Rosca <nowrep@gmail.com>
*
* SPDX-License-Identifier: LGPL-2.1-only OR LGPL-3.0-only OR LicenseRef-KDE-Accepted-LGPL
*/
#include "declarativeadapter.h"
#include "declarativedevice.h"
static int devicesCountDeclarativeAdapterFunction(QQmlListProperty<DeclarativeDevice> *property)
{
Q_ASSERT(qobject_cast<DeclarativeAdapter *>(property->object));
DeclarativeAdapter *adapter = static_cast<DeclarativeAdapter *>(property->object);
return adapter->m_devices.count();
}
static DeclarativeDevice *devicesAtDeclarativeAdapterFunction(QQmlListProperty<DeclarativeDevice> *property, int index)
{
Q_ASSERT(qobject_cast<DeclarativeAdapter *>(property->object));
DeclarativeAdapter *adapter = static_cast<DeclarativeAdapter *>(property->object);
return adapter->m_devices.values().at(index);
}
DeclarativeAdapter::DeclarativeAdapter(BluezQt::AdapterPtr adapter, QObject *parent)
: QObject(parent)
, m_adapter(adapter)
{
connect(m_adapter.data(), &BluezQt::Adapter::nameChanged, this, &DeclarativeAdapter::nameChanged);
connect(m_adapter.data(), &BluezQt::Adapter::systemNameChanged, this, &DeclarativeAdapter::systemNameChanged);
connect(m_adapter.data(), &BluezQt::Adapter::adapterClassChanged, this, &DeclarativeAdapter::adapterClassChanged);
connect(m_adapter.data(), &BluezQt::Adapter::poweredChanged, this, &DeclarativeAdapter::poweredChanged);
connect(m_adapter.data(), &BluezQt::Adapter::discoverableChanged, this, &DeclarativeAdapter::discoverableChanged);
connect(m_adapter.data(), &BluezQt::Adapter::discoverableTimeoutChanged, this, &DeclarativeAdapter::discoverableTimeoutChanged);
connect(m_adapter.data(), &BluezQt::Adapter::pairableChanged, this, &DeclarativeAdapter::pairableChanged);
connect(m_adapter.data(), &BluezQt::Adapter::pairableTimeoutChanged, this, &DeclarativeAdapter::pairableTimeoutChanged);
connect(m_adapter.data(), &BluezQt::Adapter::discoveringChanged, this, &DeclarativeAdapter::discoveringChanged);
connect(m_adapter.data(), &BluezQt::Adapter::uuidsChanged, this, &DeclarativeAdapter::uuidsChanged);
connect(m_adapter.data(), &BluezQt::Adapter::modaliasChanged, this, &DeclarativeAdapter::modaliasChanged);
connect(m_adapter.data(), &BluezQt::Adapter::deviceAdded, this, &DeclarativeAdapter::slotDeviceAdded);
connect(m_adapter.data(), &BluezQt::Adapter::deviceRemoved, this, &DeclarativeAdapter::slotDeviceRemoved);
connect(m_adapter.data(), &BluezQt::Adapter::adapterRemoved, this, [this]() {
Q_EMIT adapterRemoved(this);
});
connect(m_adapter.data(), &BluezQt::Adapter::adapterChanged, this, [this]() {
Q_EMIT adapterChanged(this);
});
connect(m_adapter.data(), &BluezQt::Adapter::deviceChanged, this, [this](const BluezQt::DevicePtr &device) {
Q_EMIT deviceChanged(declarativeDeviceFromPtr(device));
});
}
QString DeclarativeAdapter::ubi() const
{
return m_adapter->ubi();
}
QString DeclarativeAdapter::address() const
{
return m_adapter->address();
}
QString DeclarativeAdapter::name() const
{
return m_adapter->name();
}
void DeclarativeAdapter::setName(const QString &name)
{
m_adapter->setName(name);
}
QString DeclarativeAdapter::systemName() const
{
return m_adapter->systemName();
}
quint32 DeclarativeAdapter::adapterClass() const
{
return m_adapter->adapterClass();
}
bool DeclarativeAdapter::isPowered() const
{
return m_adapter->isPowered();
}
void DeclarativeAdapter::setPowered(bool powered)
{
m_adapter->setPowered(powered);
}
bool DeclarativeAdapter::isDiscoverable() const
{
return m_adapter->isDiscoverable();
}
void DeclarativeAdapter::setDiscoverable(bool discoverable)
{
m_adapter->setDiscoverable(discoverable);
}
quint32 DeclarativeAdapter::discoverableTimeout() const
{
return m_adapter->discoverableTimeout();
}
void DeclarativeAdapter::setDiscoverableTimeout(quint32 timeout)
{
m_adapter->setDiscoverableTimeout(timeout);
}
bool DeclarativeAdapter::isPairable() const
{
return m_adapter->isPairable();
}
void DeclarativeAdapter::setPairable(bool pairable)
{
m_adapter->setPairable(pairable);
}
quint32 DeclarativeAdapter::pairableTimeout() const
{
return m_adapter->pairableTimeout();
}
void DeclarativeAdapter::setPairableTimeout(quint32 timeout)
{
m_adapter->setPairableTimeout(timeout);
}
bool DeclarativeAdapter::isDiscovering()
{
return m_adapter->isDiscovering();
}
QStringList DeclarativeAdapter::uuids() const
{
return m_adapter->uuids();
}
QString DeclarativeAdapter::modalias() const
{
return m_adapter->modalias();
}
QQmlListProperty<DeclarativeDevice> DeclarativeAdapter::devices()
{
return QQmlListProperty<DeclarativeDevice>(this, nullptr, devicesCountDeclarativeAdapterFunction, devicesAtDeclarativeAdapterFunction);
}
DeclarativeDevice *DeclarativeAdapter::deviceForAddress(const QString &address) const
{
return declarativeDeviceFromPtr(m_adapter->deviceForAddress(address));
}
BluezQt::PendingCall *DeclarativeAdapter::startDiscovery()
{
return m_adapter->startDiscovery();
}
BluezQt::PendingCall *DeclarativeAdapter::stopDiscovery()
{
return m_adapter->stopDiscovery();
}
BluezQt::PendingCall *DeclarativeAdapter::removeDevice(DeclarativeDevice *device)
{
return m_adapter->removeDevice(m_adapter->deviceForAddress(device->address()));
}
void DeclarativeAdapter::slotDeviceAdded(BluezQt::DevicePtr device)
{
Q_EMIT deviceFound(declarativeDeviceFromPtr(device));
Q_EMIT devicesChanged(devices());
}
void DeclarativeAdapter::slotDeviceRemoved(BluezQt::DevicePtr device)
{
Q_EMIT deviceRemoved(declarativeDeviceFromPtr(device));
Q_EMIT devicesChanged(devices());
}
DeclarativeDevice *DeclarativeAdapter::declarativeDeviceFromPtr(BluezQt::DevicePtr ptr) const
{
if (!ptr) {
return nullptr;
}
return m_devices.value(ptr->ubi());
}