Fix basic browse_media support in forked-daapd (#77595)
parent
aa57594d21
commit
b3830d0f17
|
@ -1,6 +1,17 @@
|
||||||
"""Const for forked-daapd."""
|
"""Const for forked-daapd."""
|
||||||
from homeassistant.components.media_player import MediaPlayerEntityFeature
|
from homeassistant.components.media_player import MediaPlayerEntityFeature
|
||||||
|
|
||||||
|
CAN_PLAY_TYPE = {
|
||||||
|
"audio/mp4",
|
||||||
|
"audio/aac",
|
||||||
|
"audio/mpeg",
|
||||||
|
"audio/flac",
|
||||||
|
"audio/ogg",
|
||||||
|
"audio/x-ms-wma",
|
||||||
|
"audio/aiff",
|
||||||
|
"audio/wav",
|
||||||
|
}
|
||||||
|
|
||||||
CALLBACK_TIMEOUT = 8 # max time between command and callback from forked-daapd server
|
CALLBACK_TIMEOUT = 8 # max time between command and callback from forked-daapd server
|
||||||
CONF_LIBRESPOT_JAVA_PORT = "librespot_java_port"
|
CONF_LIBRESPOT_JAVA_PORT = "librespot_java_port"
|
||||||
CONF_MAX_PLAYLISTS = "max_playlists"
|
CONF_MAX_PLAYLISTS = "max_playlists"
|
||||||
|
|
|
@ -1,4 +1,6 @@
|
||||||
"""This library brings support for forked_daapd to Home Assistant."""
|
"""This library brings support for forked_daapd to Home Assistant."""
|
||||||
|
from __future__ import annotations
|
||||||
|
|
||||||
import asyncio
|
import asyncio
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
import logging
|
import logging
|
||||||
|
@ -8,7 +10,7 @@ from pyforked_daapd import ForkedDaapdAPI
|
||||||
from pylibrespot_java import LibrespotJavaAPI
|
from pylibrespot_java import LibrespotJavaAPI
|
||||||
|
|
||||||
from homeassistant.components import media_source
|
from homeassistant.components import media_source
|
||||||
from homeassistant.components.media_player import MediaPlayerEntity
|
from homeassistant.components.media_player import BrowseMedia, MediaPlayerEntity
|
||||||
from homeassistant.components.media_player.browse_media import (
|
from homeassistant.components.media_player.browse_media import (
|
||||||
async_process_play_media_url,
|
async_process_play_media_url,
|
||||||
)
|
)
|
||||||
|
@ -35,6 +37,7 @@ from homeassistant.util.dt import utcnow
|
||||||
|
|
||||||
from .const import (
|
from .const import (
|
||||||
CALLBACK_TIMEOUT,
|
CALLBACK_TIMEOUT,
|
||||||
|
CAN_PLAY_TYPE,
|
||||||
CONF_LIBRESPOT_JAVA_PORT,
|
CONF_LIBRESPOT_JAVA_PORT,
|
||||||
CONF_MAX_PLAYLISTS,
|
CONF_MAX_PLAYLISTS,
|
||||||
CONF_TTS_PAUSE_TIME,
|
CONF_TTS_PAUSE_TIME,
|
||||||
|
@ -769,6 +772,18 @@ class ForkedDaapdMaster(MediaPlayerEntity):
|
||||||
)()
|
)()
|
||||||
_LOGGER.warning("No pipe control available for %s", pipe_name)
|
_LOGGER.warning("No pipe control available for %s", pipe_name)
|
||||||
|
|
||||||
|
async def async_browse_media(
|
||||||
|
self,
|
||||||
|
media_content_type: str | None = None,
|
||||||
|
media_content_id: str | None = None,
|
||||||
|
) -> BrowseMedia:
|
||||||
|
"""Implement the websocket media browsing helper."""
|
||||||
|
return await media_source.async_browse_media(
|
||||||
|
self.hass,
|
||||||
|
media_content_id,
|
||||||
|
content_filter=lambda bm: bm.media_content_type in CAN_PLAY_TYPE,
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
class ForkedDaapdUpdater:
|
class ForkedDaapdUpdater:
|
||||||
"""Manage updates for the forked-daapd device."""
|
"""Manage updates for the forked-daapd device."""
|
||||||
|
@ -885,11 +900,3 @@ class ForkedDaapdUpdater:
|
||||||
self._api,
|
self._api,
|
||||||
outputs_to_add,
|
outputs_to_add,
|
||||||
)
|
)
|
||||||
|
|
||||||
async def async_browse_media(self, media_content_type=None, media_content_id=None):
|
|
||||||
"""Implement the websocket media browsing helper."""
|
|
||||||
return await media_source.async_browse_media(
|
|
||||||
self.hass,
|
|
||||||
media_content_id,
|
|
||||||
content_filter=lambda item: item.media_content_type.startswith("audio/"),
|
|
||||||
)
|
|
||||||
|
|
Loading…
Reference in New Issue