from __future__ import annotations
import asyncio
+import urllib.parse
from contextlib import suppress
from music_assistant.common.helpers.datetime import utc_timestamp
if preview := track.metadata.preview:
return preview
# fallback to a preview/sample hosted by our own webserver
- return self.mass.streams.get_preview_url(provider_instance_id_or_domain, item_id)
+ enc_track_id = urllib.parse.quote(item_id)
+ return (
+ f"{self.mass.webserver.base_url}/preview?"
+ f"provider={provider_instance_id_or_domain}&item_id={enc_track_id}"
+ )
async def _match(self, db_track: Track) -> None:
"""Try to find matching track on all providers for the provided (database) track_id.
url += "?" + urllib.parse.urlencode(query_params)
return url
- def resolve_preview_url(self, provider_instance_id_or_domain: str, track_id: str) -> str:
- """Return url to short preview sample."""
- enc_track_id = urllib.parse.quote(track_id)
- return (
- f"{self._server.base_url}/preview?"
- f"provider={provider_instance_id_or_domain}&item_id={enc_track_id}"
- )
-
async def create_multi_client_stream_job(
self,
queue_id: str,
routes.append(("GET", "/ws", self._handle_ws_client))
# also host the image proxy on the webserver
routes.append(("GET", "/imageproxy", self.mass.metadata.handle_imageproxy))
+ # also host the audio preview service
+ routes.append(("GET", "/preview", self.mass.streams.serve_preview_stream))
# start the webserver
await self._server.setup(
bind_ip=config.get_value(CONF_BIND_IP),