Fix Immich media source browsing with multiple config entries (#145823)

fix media source browsing with multiple config entries
This commit is contained in:
Michael 2025-05-28 20:49:20 +02:00 committed by Bram Kragten
parent 12f8ebb3ea
commit 309acb961b

View File

@ -30,11 +30,8 @@ LOGGER = getLogger(__name__)
async def async_get_media_source(hass: HomeAssistant) -> MediaSource: async def async_get_media_source(hass: HomeAssistant) -> MediaSource:
"""Set up Immich media source.""" """Set up Immich media source."""
entries = hass.config_entries.async_entries(
DOMAIN, include_disabled=False, include_ignore=False
)
hass.http.register_view(ImmichMediaView(hass)) hass.http.register_view(ImmichMediaView(hass))
return ImmichMediaSource(hass, entries) return ImmichMediaSource(hass)
class ImmichMediaSourceIdentifier: class ImmichMediaSourceIdentifier:
@ -56,18 +53,17 @@ class ImmichMediaSource(MediaSource):
name = "Immich" name = "Immich"
def __init__(self, hass: HomeAssistant, entries: list[ConfigEntry]) -> None: def __init__(self, hass: HomeAssistant) -> None:
"""Initialize Immich media source.""" """Initialize Immich media source."""
super().__init__(DOMAIN) super().__init__(DOMAIN)
self.hass = hass self.hass = hass
self.entries = entries
async def async_browse_media( async def async_browse_media(
self, self,
item: MediaSourceItem, item: MediaSourceItem,
) -> BrowseMediaSource: ) -> BrowseMediaSource:
"""Return media.""" """Return media."""
if not self.hass.config_entries.async_loaded_entries(DOMAIN): if not (entries := self.hass.config_entries.async_loaded_entries(DOMAIN)):
raise BrowseError("Immich is not configured") raise BrowseError("Immich is not configured")
return BrowseMediaSource( return BrowseMediaSource(
domain=DOMAIN, domain=DOMAIN,
@ -79,12 +75,12 @@ class ImmichMediaSource(MediaSource):
can_expand=True, can_expand=True,
children_media_class=MediaClass.DIRECTORY, children_media_class=MediaClass.DIRECTORY,
children=[ children=[
*await self._async_build_immich(item), *await self._async_build_immich(item, entries),
], ],
) )
async def _async_build_immich( async def _async_build_immich(
self, item: MediaSourceItem self, item: MediaSourceItem, entries: list[ConfigEntry]
) -> list[BrowseMediaSource]: ) -> list[BrowseMediaSource]:
"""Handle browsing different immich instances.""" """Handle browsing different immich instances."""
if not item.identifier: if not item.identifier:
@ -99,7 +95,7 @@ class ImmichMediaSource(MediaSource):
can_play=False, can_play=False,
can_expand=True, can_expand=True,
) )
for entry in self.entries for entry in entries
] ]
identifier = ImmichMediaSourceIdentifier(item.identifier) identifier = ImmichMediaSourceIdentifier(item.identifier)
entry: ImmichConfigEntry | None = ( entry: ImmichConfigEntry | None = (