@@ -120,43 +120,48 @@ function CameraUtils.profile_changed(synced_components, prev_components)
120120 return false
121121end
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