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