mirror of
https://github.com/home-assistant/core.git
synced 2025-08-03 18:48:22 +00:00
Fix initialisation of Apps and Radios list for Squeezebox (#149834)
This commit is contained in:
parent
018197e41a
commit
fa476d4e34
@ -4,6 +4,7 @@ from __future__ import annotations
|
||||
|
||||
import contextlib
|
||||
from dataclasses import dataclass, field
|
||||
import logging
|
||||
from typing import Any
|
||||
|
||||
from pysqueezebox import Player
|
||||
@ -21,6 +22,8 @@ from homeassistant.helpers.network import is_internal_request
|
||||
|
||||
from .const import DOMAIN, UNPLAYABLE_TYPES
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
LIBRARY = [
|
||||
"favorites",
|
||||
"artists",
|
||||
@ -138,18 +141,42 @@ class BrowseData:
|
||||
self.squeezebox_id_by_type.update(SQUEEZEBOX_ID_BY_TYPE)
|
||||
self.media_type_to_squeezebox.update(MEDIA_TYPE_TO_SQUEEZEBOX)
|
||||
|
||||
|
||||
def _add_new_command_to_browse_data(
|
||||
browse_data: BrowseData, cmd: str | MediaType, type: str
|
||||
) -> None:
|
||||
def add_new_command(self, cmd: str | MediaType, type: str) -> None:
|
||||
"""Add items to maps for new apps or radios."""
|
||||
browse_data.media_type_to_squeezebox[cmd] = cmd
|
||||
browse_data.squeezebox_id_by_type[cmd] = type
|
||||
browse_data.content_type_media_class[cmd] = {
|
||||
self.known_apps_radios.add(cmd)
|
||||
self.media_type_to_squeezebox[cmd] = cmd
|
||||
self.squeezebox_id_by_type[cmd] = type
|
||||
self.content_type_media_class[cmd] = {
|
||||
"item": MediaClass.DIRECTORY,
|
||||
"children": MediaClass.TRACK,
|
||||
}
|
||||
browse_data.content_type_to_child_type[cmd] = MediaType.TRACK
|
||||
self.content_type_to_child_type[cmd] = MediaType.TRACK
|
||||
|
||||
async def async_init(self, player: Player, browse_limit: int) -> None:
|
||||
"""Initialize known apps and radios from the player."""
|
||||
|
||||
cmd = ["apps", 0, browse_limit]
|
||||
result = await player.async_query(*cmd)
|
||||
for app in result["appss_loop"]:
|
||||
app_cmd = "app-" + app["cmd"]
|
||||
if app_cmd not in self.known_apps_radios:
|
||||
self.add_new_command(app_cmd, "item_id")
|
||||
_LOGGER.debug(
|
||||
"Adding new command %s to browse data for player %s",
|
||||
app_cmd,
|
||||
player.player_id,
|
||||
)
|
||||
cmd = ["radios", 0, browse_limit]
|
||||
result = await player.async_query(*cmd)
|
||||
for app in result["radioss_loop"]:
|
||||
app_cmd = "app-" + app["cmd"]
|
||||
if app_cmd not in self.known_apps_radios:
|
||||
self.add_new_command(app_cmd, "item_id")
|
||||
_LOGGER.debug(
|
||||
"Adding new command %s to browse data for player %s",
|
||||
app_cmd,
|
||||
player.player_id,
|
||||
)
|
||||
|
||||
|
||||
def _build_response_apps_radios_category(
|
||||
@ -292,8 +319,7 @@ async def build_item_response(
|
||||
app_cmd = "app-" + item["cmd"]
|
||||
|
||||
if app_cmd not in browse_data.known_apps_radios:
|
||||
browse_data.known_apps_radios.add(app_cmd)
|
||||
_add_new_command_to_browse_data(browse_data, app_cmd, "item_id")
|
||||
browse_data.add_new_command(app_cmd, "item_id")
|
||||
|
||||
child_media = _build_response_apps_radios_category(
|
||||
browse_data=browse_data, cmd=app_cmd, item=item
|
||||
|
@ -311,6 +311,11 @@ class SqueezeBoxMediaPlayerEntity(SqueezeboxEntity, MediaPlayerEntity):
|
||||
)
|
||||
return None
|
||||
|
||||
async def async_added_to_hass(self) -> None:
|
||||
"""Call when entity is added to hass."""
|
||||
await super().async_added_to_hass()
|
||||
await self._browse_data.async_init(self._player, self.browse_limit)
|
||||
|
||||
async def async_will_remove_from_hass(self) -> None:
|
||||
"""Remove from list of known players when removed from hass."""
|
||||
self.coordinator.config_entry.runtime_data.known_player_ids.remove(
|
||||
|
@ -765,9 +765,7 @@ async def test_squeezebox_call_query(
|
||||
},
|
||||
blocking=True,
|
||||
)
|
||||
configured_player.async_query.assert_called_once_with(
|
||||
"test_command", "param1", "param2"
|
||||
)
|
||||
configured_player.async_query.assert_called_with("test_command", "param1", "param2")
|
||||
|
||||
|
||||
async def test_squeezebox_call_method(
|
||||
@ -784,9 +782,7 @@ async def test_squeezebox_call_method(
|
||||
},
|
||||
blocking=True,
|
||||
)
|
||||
configured_player.async_query.assert_called_once_with(
|
||||
"test_command", "param1", "param2"
|
||||
)
|
||||
configured_player.async_query.assert_called_with("test_command", "param1", "param2")
|
||||
|
||||
|
||||
async def test_squeezebox_invalid_state(
|
||||
|
Loading…
x
Reference in New Issue
Block a user