From e81ac1146622dda743b5c2eb0d00ce511fcc6c9d Mon Sep 17 00:00:00 2001 From: ptvo <33662022+ptvoinfo@users.noreply.github.com> Date: Fri, 9 Apr 2021 14:35:44 +0300 Subject: [PATCH] Allow to redefine device icon (#7013) * Device-specific icon * Updated tests. * Updated test * Updated tests * Updated tests. * Updated tests Co-authored-by: ptvoinfo --- lib/extension/bridge.js | 8 +++++++- test/bridge.test.js | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/lib/extension/bridge.js b/lib/extension/bridge.js index 72046ae9e..5006f077c 100644 --- a/lib/extension/bridge.js +++ b/lib/extension/bridge.js @@ -654,7 +654,13 @@ class Bridge extends Extension { getDefinitionPayload(definition, resolvedDevice) { if (definition) { - let icon = definition.icon; + let icon = null; + if (resolvedDevice && resolvedDevice.hasOwnProperty('settings')) { + icon = resolvedDevice.settings.icon; + } + if (!icon) { + icon = definition.icon; + } if (icon) { let zigbeeModel = ''; /* istanbul ignore else */ diff --git a/test/bridge.test.js b/test/bridge.test.js index 994ffbf23..bbeb7f908 100644 --- a/test/bridge.test.js +++ b/test/bridge.test.js @@ -1055,6 +1055,7 @@ describe('Bridge', () => { const definition = {'model': 'lumi.plug'}; const device = zigbeeHerdsman.devices.ZNCZ02LM; + const svg_icon = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDo'; const icon_link = 'https://www.zigbee2mqtt.io/images/devices/ZNCZ02LM.jpg'; definition.icon = icon_link; let payload = bridge.getDefinitionPayload(definition, {device: device}); @@ -1062,6 +1063,12 @@ describe('Bridge', () => { expect(payload['icon']).not.toBeUndefined() expect(payload.icon).toBe(icon_link); + definition.icon = icon_link; + payload = bridge.getDefinitionPayload(definition, {device: device, settings: {icon: svg_icon}}); + expect(payload).not.toBeUndefined() + expect(payload['icon']).not.toBeUndefined() + expect(payload.icon).toBe(svg_icon); + definition.icon = '_${model}_'; payload = bridge.getDefinitionPayload(definition, {device: device}); expect(payload).not.toBeUndefined() @@ -1074,7 +1081,6 @@ describe('Bridge', () => { expect(payload['icon']).not.toBeUndefined() expect(payload.icon).toBe('_lumi.plug_lumi.plug_'); - const svg_icon = 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDo'; definition.icon = svg_icon; payload = bridge.getDefinitionPayload(definition, {device: device}); expect(payload).not.toBeUndefined()