1 """Xbox friends binary sensors."""
3 from __future__
import annotations
5 from functools
import partial
13 from .const
import DOMAIN
14 from .coordinator
import XboxUpdateCoordinator
15 from .entity
import XboxBaseEntity
17 SENSOR_ATTRIBUTES = [
"status",
"gamer_score",
"account_tier",
"gold_tenure"]
22 config_entry: ConfigEntry,
23 async_add_entities: AddEntitiesCallback,
25 """Set up Xbox Live friends."""
26 coordinator: XboxUpdateCoordinator = hass.data[DOMAIN][config_entry.entry_id][
30 update_friends = partial(async_update_friends, coordinator, {}, async_add_entities)
32 unsub = coordinator.async_add_listener(update_friends)
33 hass.data[DOMAIN][config_entry.entry_id][
"sensor_unsub"] = unsub
38 """Representation of a Xbox presence state."""
42 """Return the state of the requested attribute."""
43 if not self.coordinator.last_update_success:
51 coordinator: XboxUpdateCoordinator,
52 current: dict[str, list[XboxSensorEntity]],
56 new_ids = set(coordinator.data.presence)
57 current_ids = set(current)
60 new_entities: list[XboxSensorEntity] = []
61 for xuid
in new_ids - current_ids:
64 for attribute
in SENSOR_ATTRIBUTES
66 new_entities = new_entities + current[xuid]
71 for xuid
in current_ids - new_ids:
72 coordinator.hass.async_create_task(
79 coordinator: XboxUpdateCoordinator,
80 current: dict[str, list[XboxSensorEntity]],
82 """Remove friend sensors from Home Assistant."""
83 registry = er.async_get(coordinator.hass)
84 entities = current[xuid]
85 for entity
in entities:
86 if entity.entity_id
in registry.entities:
87 registry.async_remove(entity.entity_id)
PresenceData|None data(self)
None async_remove_entities(str xuid, XboxUpdateCoordinator coordinator, dict[str, list[XboxSensorEntity]] current)
None async_update_friends(XboxUpdateCoordinator coordinator, dict[str, list[XboxSensorEntity]] current, async_add_entities)
None async_setup_entry(HomeAssistant hass, ConfigEntry config_entry, AddEntitiesCallback async_add_entities)