diff --git a/ogWebconsole/src/app/services/plugin.service.ts b/ogWebconsole/src/app/services/plugin.service.ts index 7667744..a9f52fb 100644 --- a/ogWebconsole/src/app/services/plugin.service.ts +++ b/ogWebconsole/src/app/services/plugin.service.ts @@ -143,16 +143,49 @@ export class PluginService { const disk = data.disk ?? data.disk_number ?? data.diskNumber; const part = data.partition ?? data.partition_number ?? data.partitionNumber; - if (data.clientId !== undefined && data.clientId !== null) { - this.setPluginStatus(data.plugin, String(data.clientId), data.status); - if (disk !== undefined && disk !== null && part !== undefined && part !== null) { - this.setPartitionPluginStatus(data.plugin, String(data.clientId), Number(disk), Number(part), data.status); + const clearEntriesForPrefix = (prefix: string) => { + for (const key of Array.from(this.clientPluginStatusMap.keys())) { + if (key.startsWith(prefix)) { + this.clientPluginStatusMap.delete(key); + } } - } - if (data.clientUuid) { - this.setPluginStatus(data.plugin, data.clientUuid, data.status); - if (disk !== undefined && disk !== null && part !== undefined && part !== null) { - this.setPartitionPluginStatus(data.plugin, data.clientUuid, Number(disk), Number(part), data.status); + }; + + if (data.status === 'NONE') { + if (data.clientId !== undefined && data.clientId !== null) { + const idStr = String(data.clientId); + if (disk !== undefined && disk !== null && part !== undefined && part !== null) { + this.clientPluginStatusMap.delete(this.getPartitionStatusKey(data.plugin, idStr, Number(disk), Number(part))); + } else if (disk !== undefined && disk !== null) { + clearEntriesForPrefix(`${data.plugin}:${idStr}:${disk}:`); + } else { + this.clientPluginStatusMap.delete(this.getStatusKey(data.plugin, idStr)); + clearEntriesForPrefix(`${data.plugin}:${idStr}:`); + } + } + if (data.clientUuid) { + const uuidStr = data.clientUuid; + if (disk !== undefined && disk !== null && part !== undefined && part !== null) { + this.clientPluginStatusMap.delete(this.getPartitionStatusKey(data.plugin, uuidStr, Number(disk), Number(part))); + } else if (disk !== undefined && disk !== null) { + clearEntriesForPrefix(`${data.plugin}:${uuidStr}:${disk}:`); + } else { + this.clientPluginStatusMap.delete(this.getStatusKey(data.plugin, uuidStr)); + clearEntriesForPrefix(`${data.plugin}:${uuidStr}:`); + } + } + } else { + if (data.clientId !== undefined && data.clientId !== null) { + this.setPluginStatus(data.plugin, String(data.clientId), data.status); + if (disk !== undefined && disk !== null && part !== undefined && part !== null) { + this.setPartitionPluginStatus(data.plugin, String(data.clientId), Number(disk), Number(part), data.status); + } + } + if (data.clientUuid) { + this.setPluginStatus(data.plugin, data.clientUuid, data.status); + if (disk !== undefined && disk !== null && part !== undefined && part !== null) { + this.setPartitionPluginStatus(data.plugin, data.clientUuid, Number(disk), Number(part), data.status); + } } } }