status/bluetooth: Use JS Set for tracking signal connections

We can make things a bit fancier here and use a JS Set instead of an
object for tracking which devices we're having a signal handler
connected to.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2188>
This commit is contained in:
Jonas Dreßler 2021-12-02 11:44:47 +01:00 committed by Marge Bot
parent 5068c15a9d
commit 34dcf2f7b1

View File

@ -55,10 +55,14 @@ class Indicator extends PanelMenu.SystemIndicator {
this._syncId = 0;
this._adapter = null;
this._store = this._client.get_devices();
this._deviceNotifyConnected = [];
this._deviceNotifyConnected = new Set();
const deviceStore = this._client.get_devices();
for (let i = 0; i < deviceStore.get_n_items(); i++)
this._connectDeviceNotify(deviceStore.get_item(i));
this._client.connect('device-removed', (c, path) => {
this._deviceNotifyConnected[path] = false;
this._deviceNotifyConnected.delete(path);
this._queueSync.bind(this);
});
this._client.connect('device-added', (c, device) => {
@ -79,21 +83,25 @@ class Indicator extends PanelMenu.SystemIndicator {
}
_connectDeviceNotify(device) {
if (this._deviceNotifyConnected[device.get_object_path()] !== true)
const path = device.get_object_path();
if (this._deviceNotifyConnected.has(path))
return;
device.connect('notify::alias', this._queueSync.bind(this));
device.connect('notify::paired', this._queueSync.bind(this));
device.connect('notify::trusted', this._queueSync.bind(this));
device.connect('notify::connected', this._queueSync.bind(this));
this._deviceNotifyConnected.push([device.get_object_path(), true]);
this._deviceNotifyConnected.add(path);
}
_getDeviceInfos() {
const deviceStore = this._client.get_devices();
let deviceInfos = [];
const numDevices = this._store.get_n_items();
for (let i = 0; i < numDevices; i++) {
const device = this._store.get_item(i);
for (let i = 0; i < deviceStore.get_n_items(); i++) {
const device = deviceStore.get_item(i);
if (device.paired || device.trusted) {
deviceInfos.push({
@ -101,7 +109,6 @@ class Indicator extends PanelMenu.SystemIndicator {
name: device.alias,
});
}
this._connectDeviceNotify(device);
}
return deviceInfos;