forked from quickshell/quickshell
parent
87d99b866f
commit
5d7e07508a
2 changed files with 24 additions and 8 deletions
|
@ -26,6 +26,11 @@ Bluez* Bluez::instance() {
|
||||||
|
|
||||||
Bluez::Bluez() { this->init(); }
|
Bluez::Bluez() { this->init(); }
|
||||||
|
|
||||||
|
void Bluez::updateDefaultAdapter() {
|
||||||
|
const auto& adapters = this->mAdapters.valueList();
|
||||||
|
this->bDefaultAdapter = adapters.empty() ? nullptr : adapters.first();
|
||||||
|
}
|
||||||
|
|
||||||
void Bluez::init() {
|
void Bluez::init() {
|
||||||
qCDebug(logBluetooth) << "Connecting to BlueZ";
|
qCDebug(logBluetooth) << "Connecting to BlueZ";
|
||||||
|
|
||||||
|
@ -95,6 +100,7 @@ void Bluez::onInterfacesAdded(
|
||||||
|
|
||||||
this->mAdapterMap.insert(path.path(), adapter);
|
this->mAdapterMap.insert(path.path(), adapter);
|
||||||
this->mAdapters.insertObject(adapter);
|
this->mAdapters.insertObject(adapter);
|
||||||
|
this->updateDefaultAdapter();
|
||||||
} else if (interfaces.contains("org.bluez.Device1")) {
|
} else if (interfaces.contains("org.bluez.Device1")) {
|
||||||
auto* device = new BluetoothDevice(path.path(), this);
|
auto* device = new BluetoothDevice(path.path(), this);
|
||||||
|
|
||||||
|
@ -127,6 +133,7 @@ void Bluez::onInterfacesRemoved(const QDBusObjectPath& path, const QStringList&
|
||||||
|
|
||||||
this->mAdapterMap.remove(path.path());
|
this->mAdapterMap.remove(path.path());
|
||||||
this->mAdapters.removeObject(adapter);
|
this->mAdapters.removeObject(adapter);
|
||||||
|
this->updateDefaultAdapter();
|
||||||
delete adapter;
|
delete adapter;
|
||||||
}
|
}
|
||||||
} else if (auto* device = this->mDeviceMap.value(path.path())) {
|
} else if (auto* device = this->mDeviceMap.value(path.path())) {
|
||||||
|
@ -148,9 +155,8 @@ void Bluez::onInterfacesRemoved(const QDBusObjectPath& path, const QStringList&
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
BluetoothAdapter* Bluez::defaultAdapter() const {
|
BluezQml::BluezQml() {
|
||||||
const auto& adapters = this->mAdapters.valueList();
|
QObject::connect(Bluez::instance(), &Bluez::defaultAdapterChanged, this, &BluezQml::defaultAdapterChanged);
|
||||||
return adapters.isEmpty() ? nullptr : adapters.first();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
} // namespace qs::bluetooth
|
} // namespace qs::bluetooth
|
||||||
|
|
|
@ -3,6 +3,7 @@
|
||||||
#include <qcontainerfwd.h>
|
#include <qcontainerfwd.h>
|
||||||
#include <qhash.h>
|
#include <qhash.h>
|
||||||
#include <qobject.h>
|
#include <qobject.h>
|
||||||
|
#include <qproperty.h>
|
||||||
#include <qqmlintegration.h>
|
#include <qqmlintegration.h>
|
||||||
#include <qtmetamacros.h>
|
#include <qtmetamacros.h>
|
||||||
|
|
||||||
|
@ -22,7 +23,6 @@ class Bluez: public QObject {
|
||||||
public:
|
public:
|
||||||
[[nodiscard]] ObjectModel<BluetoothAdapter>* adapters() { return &this->mAdapters; }
|
[[nodiscard]] ObjectModel<BluetoothAdapter>* adapters() { return &this->mAdapters; }
|
||||||
[[nodiscard]] ObjectModel<BluetoothDevice>* devices() { return &this->mDevices; }
|
[[nodiscard]] ObjectModel<BluetoothDevice>* devices() { return &this->mDevices; }
|
||||||
[[nodiscard]] BluetoothAdapter* defaultAdapter() const;
|
|
||||||
|
|
||||||
[[nodiscard]] BluetoothAdapter* adapter(const QString& path) {
|
[[nodiscard]] BluetoothAdapter* adapter(const QString& path) {
|
||||||
return this->mAdapterMap.value(path);
|
return this->mAdapterMap.value(path);
|
||||||
|
@ -30,10 +30,14 @@ public:
|
||||||
|
|
||||||
static Bluez* instance();
|
static Bluez* instance();
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void defaultAdapterChanged();
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void
|
void
|
||||||
onInterfacesAdded(const QDBusObjectPath& path, const DBusObjectManagerInterfaces& interfaces);
|
onInterfacesAdded(const QDBusObjectPath& path, const DBusObjectManagerInterfaces& interfaces);
|
||||||
void onInterfacesRemoved(const QDBusObjectPath& path, const QStringList& interfaces);
|
void onInterfacesRemoved(const QDBusObjectPath& path, const QStringList& interfaces);
|
||||||
|
void updateDefaultAdapter();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
explicit Bluez();
|
explicit Bluez();
|
||||||
|
@ -44,6 +48,9 @@ private:
|
||||||
QHash<QString, BluetoothDevice*> mDeviceMap;
|
QHash<QString, BluetoothDevice*> mDeviceMap;
|
||||||
ObjectModel<BluetoothAdapter> mAdapters {this};
|
ObjectModel<BluetoothAdapter> mAdapters {this};
|
||||||
ObjectModel<BluetoothDevice> mDevices {this};
|
ObjectModel<BluetoothDevice> mDevices {this};
|
||||||
|
|
||||||
|
public:
|
||||||
|
Q_OBJECT_BINDABLE_PROPERTY(Bluez, BluetoothAdapter*, bDefaultAdapter, &Bluez::defaultAdapterChanged);
|
||||||
};
|
};
|
||||||
|
|
||||||
///! Bluetooth manager
|
///! Bluetooth manager
|
||||||
|
@ -51,7 +58,7 @@ private:
|
||||||
class BluezQml: public QObject {
|
class BluezQml: public QObject {
|
||||||
Q_OBJECT;
|
Q_OBJECT;
|
||||||
/// The default bluetooth adapter. Usually there is only one.
|
/// The default bluetooth adapter. Usually there is only one.
|
||||||
Q_PROPERTY(BluetoothAdapter* defaultAdapter READ defaultAdapter CONSTANT);
|
Q_PROPERTY(BluetoothAdapter* defaultAdapter READ default NOTIFY defaultAdapterChanged BINDABLE bindableDefaultAdapter);
|
||||||
QSDOC_TYPE_OVERRIDE(ObjectModel<qs::bluetooth::BluetoothAdapter>*);
|
QSDOC_TYPE_OVERRIDE(ObjectModel<qs::bluetooth::BluetoothAdapter>*);
|
||||||
/// A list of all bluetooth adapters. See @@defaultAdapter for the default.
|
/// A list of all bluetooth adapters. See @@defaultAdapter for the default.
|
||||||
Q_PROPERTY(UntypedObjectModel* adapters READ adapters CONSTANT);
|
Q_PROPERTY(UntypedObjectModel* adapters READ adapters CONSTANT);
|
||||||
|
@ -62,8 +69,11 @@ class BluezQml: public QObject {
|
||||||
QML_NAMED_ELEMENT(Bluetooth);
|
QML_NAMED_ELEMENT(Bluetooth);
|
||||||
QML_SINGLETON;
|
QML_SINGLETON;
|
||||||
|
|
||||||
|
signals:
|
||||||
|
void defaultAdapterChanged();
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit BluezQml(QObject* parent = nullptr): QObject(parent) {}
|
explicit BluezQml();
|
||||||
|
|
||||||
[[nodiscard]] static ObjectModel<BluetoothAdapter>* adapters() {
|
[[nodiscard]] static ObjectModel<BluetoothAdapter>* adapters() {
|
||||||
return Bluez::instance()->adapters();
|
return Bluez::instance()->adapters();
|
||||||
|
@ -73,8 +83,8 @@ public:
|
||||||
return Bluez::instance()->devices();
|
return Bluez::instance()->devices();
|
||||||
}
|
}
|
||||||
|
|
||||||
[[nodiscard]] static BluetoothAdapter* defaultAdapter() {
|
[[nodiscard]] static QBindable<BluetoothAdapter*> bindableDefaultAdapter() {
|
||||||
return Bluez::instance()->defaultAdapter();
|
return &Bluez::instance()->bDefaultAdapter;
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue