mirror of
https://github.com/home-assistant/core.git
synced 2025-07-23 05:07:41 +00:00
Allow squeezebox to play media sources (#67561)
This commit is contained in:
parent
12a7b64e64
commit
cf1a21eb6e
@ -1,4 +1,7 @@
|
||||
"""Support for media browsing."""
|
||||
import contextlib
|
||||
|
||||
from homeassistant.components import media_source
|
||||
from homeassistant.components.media_player import BrowseError, BrowseMedia
|
||||
from homeassistant.components.media_player.const import (
|
||||
MEDIA_CLASS_ALBUM,
|
||||
@ -134,7 +137,7 @@ async def build_item_response(entity, player, payload):
|
||||
)
|
||||
|
||||
|
||||
async def library_payload(player):
|
||||
async def library_payload(hass, player):
|
||||
"""Create response payload to describe contents of library."""
|
||||
library_info = {
|
||||
"title": "Music Library",
|
||||
@ -161,13 +164,29 @@ async def library_payload(player):
|
||||
media_content_type=item,
|
||||
can_play=True,
|
||||
can_expand=True,
|
||||
thumbnail="https://brands.home-assistant.io/_/squeezebox/logo.png",
|
||||
)
|
||||
)
|
||||
|
||||
with contextlib.suppress(media_source.BrowseError):
|
||||
item = await media_source.async_browse_media(
|
||||
hass, None, content_filter=media_source_content_filter
|
||||
)
|
||||
# If domain is None, it's overview of available sources
|
||||
if item.domain is None:
|
||||
library_info["children"].extend(item.children)
|
||||
else:
|
||||
library_info["children"].append(item)
|
||||
|
||||
response = BrowseMedia(**library_info)
|
||||
return response
|
||||
|
||||
|
||||
def media_source_content_filter(item: BrowseMedia) -> bool:
|
||||
"""Content filter for media sources."""
|
||||
return item.media_content_type.startswith("audio/")
|
||||
|
||||
|
||||
async def generate_playlist(player, payload):
|
||||
"""Generate playlist from browsing payload."""
|
||||
media_type = payload["search_type"]
|
||||
|
@ -8,7 +8,11 @@ import logging
|
||||
from pysqueezebox import Server, async_discover
|
||||
import voluptuous as vol
|
||||
|
||||
from homeassistant.components import media_source
|
||||
from homeassistant.components.media_player import MediaPlayerEntity
|
||||
from homeassistant.components.media_player.browse_media import (
|
||||
async_process_play_media_url,
|
||||
)
|
||||
from homeassistant.components.media_player.const import (
|
||||
ATTR_MEDIA_ENQUEUE,
|
||||
MEDIA_TYPE_MUSIC,
|
||||
@ -53,7 +57,12 @@ from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||
from homeassistant.helpers.event import async_call_later
|
||||
from homeassistant.util.dt import utcnow
|
||||
|
||||
from .browse_media import build_item_response, generate_playlist, library_payload
|
||||
from .browse_media import (
|
||||
build_item_response,
|
||||
generate_playlist,
|
||||
library_payload,
|
||||
media_source_content_filter,
|
||||
)
|
||||
from .const import DISCOVERY_TASK, DOMAIN, KNOWN_PLAYERS, PLAYER_DISCOVERY_UNSUB
|
||||
|
||||
SERVICE_CALL_METHOD = "call_method"
|
||||
@ -460,7 +469,14 @@ class SqueezeBoxEntity(MediaPlayerEntity):
|
||||
if kwargs.get(ATTR_MEDIA_ENQUEUE):
|
||||
cmd = "add"
|
||||
|
||||
if media_type == MEDIA_TYPE_MUSIC:
|
||||
if media_source.is_media_source_id(media_id):
|
||||
media_type = MEDIA_TYPE_MUSIC
|
||||
play_item = await media_source.async_resolve_media(self.hass, media_id)
|
||||
media_id = play_item.url
|
||||
|
||||
if media_type in MEDIA_TYPE_MUSIC:
|
||||
media_id = async_process_play_media_url(self.hass, media_id)
|
||||
|
||||
await self._player.async_load_url(media_id, cmd)
|
||||
return
|
||||
|
||||
@ -554,7 +570,12 @@ class SqueezeBoxEntity(MediaPlayerEntity):
|
||||
)
|
||||
|
||||
if media_content_type in [None, "library"]:
|
||||
return await library_payload(self._player)
|
||||
return await library_payload(self.hass, self._player)
|
||||
|
||||
if media_source.is_media_source_id(media_content_id):
|
||||
return await media_source.async_browse_media(
|
||||
self.hass, media_content_id, content_filter=media_source_content_filter
|
||||
)
|
||||
|
||||
payload = {
|
||||
"search_type": media_content_type,
|
||||
|
Loading…
x
Reference in New Issue
Block a user