diff --git a/web/components/sink-device-list.js b/web/components/sink-device-list.js index e27e906..1f49aca 100644 --- a/web/components/sink-device-list.js +++ b/web/components/sink-device-list.js @@ -66,6 +66,7 @@ export class SinkDeviceList extends HTMLElement { this.setFilter = this.setFilter.bind(this); this.applyFilter = this.applyFilter.bind(this); + this.sinkClearList = this.sinkClearList.bind(this); this.sinkFound = this.sinkFound.bind(this); this.sinkUpdated = this.sinkUpdated.bind(this); this.sinkDisconnected = this.sinkDisconnected.bind(this); @@ -84,6 +85,7 @@ export class SinkDeviceList extends HTMLElement { this.#model = AssistantModel.getInstance(); + this.#model.addEventListener('sink-list-cleared', this.sinkClearList) this.#model.addEventListener('sink-found', this.sinkFound) this.#model.addEventListener('sink-updated', this.sinkUpdated) this.#model.addEventListener('sink-disconnected', this.sinkDisconnected) @@ -161,6 +163,16 @@ export class SinkDeviceList extends HTMLElement { .forEach(node => { node.style.order=order++ }); } + sinkClearList(evt) { + const elements = Array.from(this.#list.querySelectorAll('sink-item')); + + elements.forEach(i => { + if (i.getModel().state !== "connected") { + i.remove(); + } + }); + } + sinkFound(evt) { // Assume that the AssistantModel has eliminated duplicates // If the addr is random and RPA changed, device will appear diff --git a/web/components/source-device-list.js b/web/components/source-device-list.js index b4392df..1d8a572 100644 --- a/web/components/source-device-list.js +++ b/web/components/source-device-list.js @@ -67,6 +67,7 @@ export class SourceDeviceList extends HTMLElement { this.setFilter = this.setFilter.bind(this); this.applyFilter = this.applyFilter.bind(this); + this.sourceClearList = this.sourceClearList.bind(this); this.sourceFound = this.sourceFound.bind(this); this.sourceUpdated = this.sourceUpdated.bind(this); this.baseUpdated = this.baseUpdated.bind(this); @@ -86,6 +87,7 @@ export class SourceDeviceList extends HTMLElement { this.#model = AssistantModel.getInstance(); + this.#model.addEventListener('source-list-cleared', this.sourceClearList) this.#model.addEventListener('source-found', this.sourceFound); this.#model.addEventListener('source-updated', this.sourceUpdated); this.#model.addEventListener('base-updated', this.baseUpdated); @@ -156,6 +158,16 @@ export class SourceDeviceList extends HTMLElement { }); } + sourceClearList(evt) { + const elements = Array.from(this.#list.querySelectorAll('source-item')); + + elements.forEach(i => { + if (i.getModel().state !== "selected") { + i.remove(); + } + }); + } + sourceFound(evt) { // Assume that the AssistantModel has eliminated duplicates // If the addr is random and RPA changed, device will appear diff --git a/web/models/assistant-model.js b/web/models/assistant-model.js index 04abc17..a3c15c0 100644 --- a/web/models/assistant-model.js +++ b/web/models/assistant-model.js @@ -769,7 +769,10 @@ class AssistantModel extends EventTarget { this.#service.sendCMD(message) } + startSinkScan() { + this.clearSinkList(); + console.log("Sending Start Sink Scan CMD") const message = { @@ -783,6 +786,8 @@ class AssistantModel extends EventTarget { } startSourceScan() { + this.clearSourceList(); + console.log("Sending Start Source Scan CMD") const message = { @@ -1106,6 +1111,20 @@ class AssistantModel extends EventTarget { this.#service.sendCMD(message); } + + clearSinkList() { + this.#sinks = this.#sinks.filter(i => (i.state === "connected")); + console.log(`Sink list cleared`); + + this.dispatchEvent(new CustomEvent('sink-list-cleared')); + } + + clearSourceList() { + this.#sources = this.#sources.filter(i => i.state === "selected"); + console.log(`Source list cleared`); + + this.dispatchEvent(new CustomEvent('source-list-cleared')); + } } let _instance = null;