mirror of
https://github.com/home-assistant/core.git
synced 2025-07-31 17:18:23 +00:00
Merge colliding devices when loading the device registry
This commit is contained in:
parent
d77c4cda0c
commit
643003c47a
@ -1180,6 +1180,22 @@ class DeviceRegistry(BaseRegistry[dict[str, list[dict[str, Any]]]]):
|
|||||||
|
|
||||||
return main_device
|
return main_device
|
||||||
|
|
||||||
|
@callback
|
||||||
|
def _find_collision(self) -> set[str] | None:
|
||||||
|
for device in self.devices.values():
|
||||||
|
for identifier in device.identifiers:
|
||||||
|
if len(device_ids := self.devices.get_entries({identifier}, None)) > 1:
|
||||||
|
return device_ids
|
||||||
|
for connection in device.connections:
|
||||||
|
if len(device_ids := self.devices.get_entries({connection}, None)) > 1:
|
||||||
|
return device_ids
|
||||||
|
return None
|
||||||
|
|
||||||
|
@callback
|
||||||
|
def _merge_collisions(self) -> None:
|
||||||
|
while collision := self._find_collision():
|
||||||
|
self._merge_devices(collision)
|
||||||
|
|
||||||
async def async_load(self) -> None:
|
async def async_load(self) -> None:
|
||||||
"""Load the device registry."""
|
"""Load the device registry."""
|
||||||
async_setup_cleanup(self.hass, self)
|
async_setup_cleanup(self.hass, self)
|
||||||
@ -1239,6 +1255,7 @@ class DeviceRegistry(BaseRegistry[dict[str, list[dict[str, Any]]]]):
|
|||||||
self.devices = devices
|
self.devices = devices
|
||||||
self.deleted_devices = deleted_devices
|
self.deleted_devices = deleted_devices
|
||||||
self._device_data = devices.data
|
self._device_data = devices.data
|
||||||
|
self._merge_collisions()
|
||||||
|
|
||||||
@callback
|
@callback
|
||||||
def _data_to_save(self) -> dict[str, Any]:
|
def _data_to_save(self) -> dict[str, Any]:
|
||||||
|
Loading…
x
Reference in New Issue
Block a user