Skip to content

Commit 784195c

Browse files
update algorithm used to detect capability changes
1 parent 73fa6d3 commit 784195c

File tree

1 file changed

+31
-26
lines changed
  • drivers/SmartThings/matter-switch/src/sub_drivers/camera/camera_utils

1 file changed

+31
-26
lines changed

drivers/SmartThings/matter-switch/src/sub_drivers/camera/camera_utils/utils.lua

Lines changed: 31 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -120,43 +120,48 @@ function CameraUtils.profile_changed(synced_components, prev_components)
120120
return false
121121
end
122122

123-
local function has_component_capability_differences(source_list, target_list)
124-
for _, source_component_capabilities in pairs(source_list) do
125-
local component_index
126-
for target_component_idx, target_component_capabilities in pairs(target_list) do
127-
if target_component_capabilities[1] == source_component_capabilities[1] then
128-
component_index = target_component_idx
129-
break
123+
function CameraUtils.optional_capabilities_list_changed(new_component_capability_list, previous_component_capability_list)
124+
local previous_capability_map = {}
125+
local component_sizes = {}
126+
127+
local previous_component_count = 0
128+
for component_name, component in pairs(previous_component_capability_list or {}) do
129+
previous_capability_map[component_name] = {}
130+
component_sizes[component_name] = 0
131+
for _, capability in pairs(component.capabilities or {}) do
132+
if capability.id ~= "firmwareUpdate" and capability.id ~= "refresh" then
133+
previous_capability_map[component_name][capability.id] = true
134+
component_sizes[component_name] = component_sizes[component_name] + 1
130135
end
131136
end
132-
if not component_index or not target_list[component_index] or not target_list[component_index][2] then
137+
previous_component_count = previous_component_count + 1
138+
end
139+
140+
local number_of_components_counted = 0
141+
for _, new_component_capabilities in pairs(new_component_capability_list or {}) do
142+
local component_name = new_component_capabilities[1]
143+
local capability_list = new_component_capabilities[2]
144+
145+
number_of_components_counted = number_of_components_counted + 1
146+
147+
if not previous_capability_map[component_name] then
133148
return true
134149
end
135-
for _, capability in ipairs(source_component_capabilities[2]) do
136-
if not switch_utils.tbl_contains(target_list[component_index][2], capability) then
150+
151+
local capabilities_in_component = 0
152+
for _, capability in ipairs(capability_list) do
153+
if not previous_capability_map[component_name][capability] then
137154
return true
138155
end
156+
capabilities_in_component = capabilities_in_component + 1
139157
end
140-
end
141-
return false
142-
end
143158

144-
function CameraUtils.optional_capabilities_list_changed(new_component_capability_list, previous_component_capability_list)
145-
-- Convert previous_component_capability_list into a table with the same structure as new_component_capability_list:
146-
-- {{comp1, {cap1, cap2, ...}, {comp2, {cap1, cap2, ...}, ...}
147-
local previous_optional_capabilities = {}
148-
for component_name, component in pairs(previous_component_capability_list or {}) do
149-
local capability_list = {}
150-
for _, capability in pairs(component.capabilities or {}) do
151-
if capability.id ~= "firmwareUpdate" and capability.id ~= "refresh" then
152-
table.insert(capability_list, capability.id)
153-
end
159+
if capabilities_in_component ~= component_sizes[component_name] then
160+
return true
154161
end
155-
table.insert(previous_optional_capabilities, {component_name, capability_list})
156162
end
157163

158-
if has_component_capability_differences(new_component_capability_list, previous_optional_capabilities) or
159-
has_component_capability_differences(previous_optional_capabilities, new_component_capability_list) then
164+
if number_of_components_counted ~= previous_component_count then
160165
return true
161166
end
162167

0 commit comments

Comments
 (0)