Fix Life360 unload (#74263)

* Fix life360 async_unload_entry

* Update tracked_members when unloading config entry
This commit is contained in:
Phil Bruckner 2022-06-30 12:10:05 -05:00 committed by GitHub
parent f311d53c60
commit 1bdd93cc77
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 15 additions and 9 deletions

View File

@ -124,11 +124,11 @@ class IntegData:
"""Integration data."""
cfg_options: dict[str, Any] | None = None
# ConfigEntry.unique_id: Life360DataUpdateCoordinator
# ConfigEntry.entry_id: Life360DataUpdateCoordinator
coordinators: dict[str, Life360DataUpdateCoordinator] = field(
init=False, default_factory=dict
)
# member_id: ConfigEntry.unique_id
# member_id: ConfigEntry.entry_id
tracked_members: dict[str, str] = field(init=False, default_factory=dict)
logged_circles: list[str] = field(init=False, default_factory=list)
logged_places: list[str] = field(init=False, default_factory=list)
@ -171,7 +171,13 @@ async def async_setup_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
"""Unload config entry."""
del hass.data[DOMAIN].coordinators[entry.entry_id]
# Unload components for our platforms.
return await hass.config_entries.async_unload_platforms(entry, PLATFORMS)
if unload_ok := await hass.config_entries.async_unload_platforms(entry, PLATFORMS):
del hass.data[DOMAIN].coordinators[entry.entry_id]
# Remove any members that were tracked by this entry.
for member_id, entry_id in hass.data[DOMAIN].tracked_members.copy().items():
if entry_id == entry.entry_id:
del hass.data[DOMAIN].tracked_members[member_id]
return unload_ok

View File

@ -78,13 +78,13 @@ async def async_setup_entry(
new_entities = []
for member_id, member in coordinator.data.members.items():
tracked_by_account = tracked_members.get(member_id)
if new_member := not tracked_by_account:
tracked_members[member_id] = entry.unique_id
LOGGER.debug("Member: %s", member.name)
tracked_by_entry = tracked_members.get(member_id)
if new_member := not tracked_by_entry:
tracked_members[member_id] = entry.entry_id
LOGGER.debug("Member: %s (%s)", member.name, entry.unique_id)
if (
new_member
or tracked_by_account == entry.unique_id
or tracked_by_entry == entry.entry_id
and not new_members_only
):
new_entities.append(Life360DeviceTracker(coordinator, member_id))