From 9c30afc199df49bafd14cebae3ed2f036a345711 Mon Sep 17 00:00:00 2001 From: Marcel van der Veldt Date: Tue, 4 Feb 2025 12:12:42 +0100 Subject: [PATCH] Chore: unifi streamdetails function --- music_assistant/models/music_provider.py | 4 +--- music_assistant/models/plugin.py | 7 ++----- .../_template_music_provider/__init__.py | 4 +--- music_assistant/providers/apple_music/__init__.py | 4 +--- music_assistant/providers/audible/__init__.py | 4 +--- .../providers/audiobookshelf/__init__.py | 4 +--- music_assistant/providers/builtin/__init__.py | 4 +--- music_assistant/providers/deezer/__init__.py | 4 +--- music_assistant/providers/ibroadcast/__init__.py | 4 +--- music_assistant/providers/jellyfin/__init__.py | 4 +--- .../providers/opensubsonic/sonic_provider.py | 4 +--- music_assistant/providers/plex/__init__.py | 4 +--- music_assistant/providers/podcastfeed/__init__.py | 4 +--- music_assistant/providers/qobuz/__init__.py | 4 +--- .../providers/radiobrowser/__init__.py | 4 +--- music_assistant/providers/siriusxm/__init__.py | 4 +--- music_assistant/providers/soundcloud/__init__.py | 4 +--- music_assistant/providers/spotify/__init__.py | 4 +--- .../providers/spotify_connect/__init__.py | 4 +--- music_assistant/providers/test/__init__.py | 4 +--- music_assistant/providers/tidal/__init__.py | 15 +++------------ music_assistant/providers/tunein/__init__.py | 4 +--- music_assistant/providers/ytmusic/__init__.py | 4 +--- 23 files changed, 26 insertions(+), 80 deletions(-) diff --git a/music_assistant/models/music_provider.py b/music_assistant/models/music_provider.py index 49fa8862..3afaed20 100644 --- a/music_assistant/models/music_provider.py +++ b/music_assistant/models/music_provider.py @@ -310,9 +310,7 @@ class MusicProvider(Provider): if ProviderFeature.SIMILAR_TRACKS in self.supported_features: raise NotImplementedError - async def get_stream_details( - self, item_id: str, media_type: MediaType = MediaType.TRACK - ) -> StreamDetails: + async def get_stream_details(self, item_id: str, media_type: MediaType) -> StreamDetails: """Get streamdetails for a track/radio/chapter/episode.""" raise NotImplementedError diff --git a/music_assistant/models/plugin.py b/music_assistant/models/plugin.py index 5978cfa9..d7009bd6 100644 --- a/music_assistant/models/plugin.py +++ b/music_assistant/models/plugin.py @@ -5,11 +5,10 @@ from __future__ import annotations from collections.abc import AsyncGenerator from typing import TYPE_CHECKING -from music_assistant_models.enums import MediaType - from .provider import Provider if TYPE_CHECKING: + from music_assistant_models.enums import MediaType from music_assistant_models.media_items import PluginSource from music_assistant_models.streamdetails import StreamDetails @@ -33,9 +32,7 @@ class PluginProvider(Provider): # Will only be called if ProviderFeature.AUDIO_SOURCE is declared raise NotImplementedError - async def get_stream_details( - self, item_id: str, media_type: MediaType = MediaType.TRACK - ) -> StreamDetails: + async def get_stream_details(self, item_id: str, media_type: MediaType) -> StreamDetails: """Return the streamdetails to stream an (audio)source provided by this plugin.""" # Will only be called if ProviderFeature.AUDIO_SOURCE is declared raise NotImplementedError diff --git a/music_assistant/providers/_template_music_provider/__init__.py b/music_assistant/providers/_template_music_provider/__init__.py index 2e3226d5..ce6b9b08 100644 --- a/music_assistant/providers/_template_music_provider/__init__.py +++ b/music_assistant/providers/_template_music_provider/__init__.py @@ -368,9 +368,7 @@ class MyDemoMusicprovider(MusicProvider): # Get a list of similar tracks based on the provided track. # This is only called if the provider supports the SIMILAR_TRACKS feature. - async def get_stream_details( - self, item_id: str, media_type: MediaType = MediaType.TRACK - ) -> StreamDetails: + async def get_stream_details(self, item_id: str, media_type: MediaType) -> StreamDetails: """Get streamdetails for a track/radio.""" # Get stream details for a track or radio. # Implementing this method is MANDATORY to allow playback. diff --git a/music_assistant/providers/apple_music/__init__.py b/music_assistant/providers/apple_music/__init__.py index f39bec99..fdda7cc0 100644 --- a/music_assistant/providers/apple_music/__init__.py +++ b/music_assistant/providers/apple_music/__init__.py @@ -352,9 +352,7 @@ class AppleMusicProvider(MusicProvider): found_tracks.append(self._parse_track(track)) return found_tracks - async def get_stream_details( - self, item_id: str, media_type: MediaType = MediaType.TRACK - ) -> StreamDetails: + async def get_stream_details(self, item_id: str, media_type: MediaType) -> StreamDetails: """Return the content details for the given track when it will be streamed.""" stream_metadata = await self._fetch_song_stream_metadata(item_id) license_url = stream_metadata["hls-key-server-url"] diff --git a/music_assistant/providers/audible/__init__.py b/music_assistant/providers/audible/__init__.py index e7d8820f..b9f05e32 100644 --- a/music_assistant/providers/audible/__init__.py +++ b/music_assistant/providers/audible/__init__.py @@ -275,9 +275,7 @@ class Audibleprovider(MusicProvider): raise ValueError(f"Audiobook with id {prov_audiobook_id} not found") return audiobook - async def get_stream_details( - self, item_id: str, media_type: MediaType = MediaType.AUDIOBOOK - ) -> StreamDetails: + async def get_stream_details(self, item_id: str, media_type: MediaType) -> StreamDetails: """Get streamdetails for a audiobook based of asin.""" return await self.helper.get_stream(asin=item_id) diff --git a/music_assistant/providers/audiobookshelf/__init__.py b/music_assistant/providers/audiobookshelf/__init__.py index 0078fae7..fa8f454c 100644 --- a/music_assistant/providers/audiobookshelf/__init__.py +++ b/music_assistant/providers/audiobookshelf/__init__.py @@ -447,9 +447,7 @@ class Audiobookshelf(MusicProvider): path=stream_url, ) - async def get_stream_details( - self, item_id: str, media_type: MediaType = MediaType.TRACK - ) -> StreamDetails: + async def get_stream_details(self, item_id: str, media_type: MediaType) -> StreamDetails: """Get stream of item.""" # self.logger.debug(f"Streamdetails: {item_id}") if media_type == MediaType.PODCAST_EPISODE: diff --git a/music_assistant/providers/builtin/__init__.py b/music_assistant/providers/builtin/__init__.py index 4c47536a..1f2170a8 100644 --- a/music_assistant/providers/builtin/__init__.py +++ b/music_assistant/providers/builtin/__init__.py @@ -541,9 +541,7 @@ class BuiltinProvider(MusicProvider): ) return media_info - async def get_stream_details( - self, item_id: str, media_type: MediaType = MediaType.TRACK - ) -> StreamDetails: + async def get_stream_details(self, item_id: str, media_type: MediaType) -> StreamDetails: """Get streamdetails for a track/radio.""" media_info = await self._get_media_info(item_id) is_radio = media_info.get("icy-name") or not media_info.duration diff --git a/music_assistant/providers/deezer/__init__.py b/music_assistant/providers/deezer/__init__.py index fcf12d12..d435063b 100644 --- a/music_assistant/providers/deezer/__init__.py +++ b/music_assistant/providers/deezer/__init__.py @@ -427,9 +427,7 @@ class DeezerProvider(MusicProvider): ]["data"][:limit] return [await self.get_track(track["SNG_ID"]) for track in tracks] - async def get_stream_details( - self, item_id: str, media_type: MediaType = MediaType.TRACK - ) -> StreamDetails: + async def get_stream_details(self, item_id: str, media_type: MediaType) -> StreamDetails: """Return the content details for the given track when it will be streamed.""" url_details, song_data = await self.gw_client.get_deezer_track_urls(item_id) url = url_details["sources"][0]["url"] diff --git a/music_assistant/providers/ibroadcast/__init__.py b/music_assistant/providers/ibroadcast/__init__.py index 6954326e..0e044092 100644 --- a/music_assistant/providers/ibroadcast/__init__.py +++ b/music_assistant/providers/ibroadcast/__init__.py @@ -230,9 +230,7 @@ class IBroadcastProvider(MusicProvider): return tracks return await self._get_tracks(playlist_obj["tracks"], True) - async def get_stream_details( - self, item_id: str, media_type: MediaType = MediaType.TRACK - ) -> StreamDetails: + async def get_stream_details(self, item_id: str, media_type: MediaType) -> StreamDetails: """Return the content details for the given track when it will be streamed.""" # How to buildup a stream url: # [streaming_server]/[url]?Expires=[now]&Signature=[user token]&file_id=[file ID] diff --git a/music_assistant/providers/jellyfin/__init__.py b/music_assistant/providers/jellyfin/__init__.py index f3e53ac6..a4309ca4 100644 --- a/music_assistant/providers/jellyfin/__init__.py +++ b/music_assistant/providers/jellyfin/__init__.py @@ -435,9 +435,7 @@ class JellyfinProvider(MusicProvider): for album in albums["Items"] ] - async def get_stream_details( - self, item_id: str, media_type: MediaType = MediaType.TRACK - ) -> StreamDetails: + async def get_stream_details(self, item_id: str, media_type: MediaType) -> StreamDetails: """Return the content details for the given track when it will be streamed.""" jellyfin_track = await self._client.get_track(item_id) url = self._client.audio_url( diff --git a/music_assistant/providers/opensubsonic/sonic_provider.py b/music_assistant/providers/opensubsonic/sonic_provider.py index ecc72dd9..aba98849 100644 --- a/music_assistant/providers/opensubsonic/sonic_provider.py +++ b/music_assistant/providers/opensubsonic/sonic_provider.py @@ -732,9 +732,7 @@ class OpenSonicProvider(MusicProvider): msg = f"Failed to remove songs from {prov_playlist_id}, check your permissions." raise ProviderPermissionDenied(msg) from ex - async def get_stream_details( - self, item_id: str, media_type: MediaType = MediaType.TRACK - ) -> StreamDetails: + async def get_stream_details(self, item_id: str, media_type: MediaType) -> StreamDetails: """Get the details needed to process a specified track.""" item: SonicSong | SonicEpisode if media_type == MediaType.TRACK: diff --git a/music_assistant/providers/plex/__init__.py b/music_assistant/providers/plex/__init__.py index e6ce7cc5..d2212195 100644 --- a/music_assistant/providers/plex/__init__.py +++ b/music_assistant/providers/plex/__init__.py @@ -890,9 +890,7 @@ class PlexProvider(MusicProvider): return albums return [] - async def get_stream_details( - self, item_id: str, media_type: MediaType = MediaType.TRACK - ) -> StreamDetails: + async def get_stream_details(self, item_id: str, media_type: MediaType) -> StreamDetails: """Get streamdetails for a track.""" plex_track = await self._get_data(item_id, PlexTrack) if not plex_track or not plex_track.media: diff --git a/music_assistant/providers/podcastfeed/__init__.py b/music_assistant/providers/podcastfeed/__init__.py index 8bbcc27c..0314ecab 100644 --- a/music_assistant/providers/podcastfeed/__init__.py +++ b/music_assistant/providers/podcastfeed/__init__.py @@ -165,9 +165,7 @@ class PodcastMusicprovider(MusicProvider): episodes.append(await self._parse_episode(episode, idx)) return episodes - async def get_stream_details( - self, item_id: str, media_type: MediaType = MediaType.TRACK - ) -> StreamDetails: + async def get_stream_details(self, item_id: str, media_type: MediaType) -> StreamDetails: """Get streamdetails for a track/radio.""" for episode in self.parsed["episodes"]: if item_id == episode["guid"]: diff --git a/music_assistant/providers/qobuz/__init__.py b/music_assistant/providers/qobuz/__init__.py index c984348f..df820fda 100644 --- a/music_assistant/providers/qobuz/__init__.py +++ b/music_assistant/providers/qobuz/__init__.py @@ -401,9 +401,7 @@ class QobuzProvider(MusicProvider): playlist_track_ids=",".join(playlist_track_ids), ) - async def get_stream_details( - self, item_id: str, media_type: MediaType = MediaType.TRACK - ) -> StreamDetails: + async def get_stream_details(self, item_id: str, media_type: MediaType) -> StreamDetails: """Return the content details for the given track when it will be streamed.""" streamdata = None for format_id in [27, 7, 6, 5]: diff --git a/music_assistant/providers/radiobrowser/__init__.py b/music_assistant/providers/radiobrowser/__init__.py index 84cd3d0b..68a8a010 100644 --- a/music_assistant/providers/radiobrowser/__init__.py +++ b/music_assistant/providers/radiobrowser/__init__.py @@ -348,9 +348,7 @@ class RadioBrowserProvider(MusicProvider): return radio - async def get_stream_details( - self, item_id: str, media_type: MediaType = MediaType.RADIO - ) -> StreamDetails: + async def get_stream_details(self, item_id: str, media_type: MediaType) -> StreamDetails: """Get streamdetails for a radio station.""" stream = await self.radios.station(uuid=item_id) if not stream: diff --git a/music_assistant/providers/siriusxm/__init__.py b/music_assistant/providers/siriusxm/__init__.py index 74fa2baa..998d26f2 100644 --- a/music_assistant/providers/siriusxm/__init__.py +++ b/music_assistant/providers/siriusxm/__init__.py @@ -211,9 +211,7 @@ class SiriusXMProvider(MusicProvider): return self._parse_radio(self._channels_by_id[prov_radio_id]) - async def get_stream_details( - self, item_id: str, media_type: MediaType = MediaType.RADIO - ) -> StreamDetails: + async def get_stream_details(self, item_id: str, media_type: MediaType) -> StreamDetails: """Get streamdetails for a track/radio.""" # There's a chance that the SiriusXM auth session has expired # by the time the user clicks to play a station. The sxm-client diff --git a/music_assistant/providers/soundcloud/__init__.py b/music_assistant/providers/soundcloud/__init__.py index 0ec5c96f..e4567654 100644 --- a/music_assistant/providers/soundcloud/__init__.py +++ b/music_assistant/providers/soundcloud/__init__.py @@ -304,9 +304,7 @@ class SoundcloudMusicProvider(MusicProvider): return tracks - async def get_stream_details( - self, item_id: str, media_type: MediaType = MediaType.TRACK - ) -> StreamDetails: + async def get_stream_details(self, item_id: str, media_type: MediaType) -> StreamDetails: """Return the content details for the given track when it will be streamed.""" url: str = await self._soundcloud.get_stream_url(track_id=item_id) return StreamDetails( diff --git a/music_assistant/providers/spotify/__init__.py b/music_assistant/providers/spotify/__init__.py index fb4711d4..6c15b72a 100644 --- a/music_assistant/providers/spotify/__init__.py +++ b/music_assistant/providers/spotify/__init__.py @@ -546,9 +546,7 @@ class SpotifyProvider(MusicProvider): items = await self._get_data(endpoint, seed_tracks=prov_track_id, limit=limit) return [self._parse_track(item) for item in items["tracks"] if (item and item["id"])] - async def get_stream_details( - self, item_id: str, media_type: MediaType = MediaType.TRACK - ) -> StreamDetails: + async def get_stream_details(self, item_id: str, media_type: MediaType) -> StreamDetails: """Return the content details for the given track when it will be streamed.""" return StreamDetails( item_id=item_id, diff --git a/music_assistant/providers/spotify_connect/__init__.py b/music_assistant/providers/spotify_connect/__init__.py index 98be2b0a..91b917ff 100644 --- a/music_assistant/providers/spotify_connect/__init__.py +++ b/music_assistant/providers/spotify_connect/__init__.py @@ -201,9 +201,7 @@ class SpotifyConnectProvider(MusicProvider): }, ) - async def get_stream_details( - self, item_id: str, media_type: MediaType = MediaType.TRACK - ) -> StreamDetails: + async def get_stream_details(self, item_id: str, media_type: MediaType) -> StreamDetails: """Return the streamdetails to stream an audiosource provided by this plugin.""" self._current_streamdetails = streamdetails = StreamDetails( item_id=CONNECT_ITEM_ID, diff --git a/music_assistant/providers/test/__init__.py b/music_assistant/providers/test/__init__.py index b1653db5..f26d8f56 100644 --- a/music_assistant/providers/test/__init__.py +++ b/music_assistant/providers/test/__init__.py @@ -338,9 +338,7 @@ class TestProvider(MusicProvider): position=int(episode_idx), ) - async def get_stream_details( - self, item_id: str, media_type: MediaType = MediaType.TRACK - ) -> StreamDetails: + async def get_stream_details(self, item_id: str, media_type: MediaType) -> StreamDetails: """Get streamdetails for a track/radio.""" return StreamDetails( provider=self.lookup_key, diff --git a/music_assistant/providers/tidal/__init__.py b/music_assistant/providers/tidal/__init__.py index 47529301..5e27d37e 100644 --- a/music_assistant/providers/tidal/__init__.py +++ b/music_assistant/providers/tidal/__init__.py @@ -11,11 +11,7 @@ from datetime import datetime, timedelta from enum import StrEnum from typing import TYPE_CHECKING, ParamSpec, TypeVar, cast -from music_assistant_models.config_entries import ( - ConfigEntry, - ConfigValueOption, - ConfigValueType, -) +from music_assistant_models.config_entries import ConfigEntry, ConfigValueOption, ConfigValueType from music_assistant_models.enums import ( AlbumType, CacheCategory, @@ -52,10 +48,7 @@ from tidalapi import exceptions as tidal_exceptions from music_assistant.helpers.auth import AuthenticationHelper from music_assistant.helpers.tags import AudioTags, async_parse_tags -from music_assistant.helpers.throttle_retry import ( - ThrottlerManager, - throttle_with_retries, -) +from music_assistant.helpers.throttle_retry import ThrottlerManager, throttle_with_retries from music_assistant.models.music_provider import MusicProvider from .helpers import ( @@ -577,9 +570,7 @@ class TidalProvider(MusicProvider): ) return self._parse_playlist(playlist_obj) - async def get_stream_details( - self, item_id: str, media_type: MediaType = MediaType.TRACK - ) -> StreamDetails: + async def get_stream_details(self, item_id: str, media_type: MediaType) -> StreamDetails: """Return the content details for the given track when it will be streamed.""" tidal_session = await self._get_tidal_session() # make sure a valid track is requested. diff --git a/music_assistant/providers/tunein/__init__.py b/music_assistant/providers/tunein/__init__.py index d2cab65c..a0e3ea8b 100644 --- a/music_assistant/providers/tunein/__init__.py +++ b/music_assistant/providers/tunein/__init__.py @@ -238,9 +238,7 @@ class TuneInProvider(MusicProvider): await self.mass.cache.set(preset_id, result, base_key=cache_base_key) return result - async def get_stream_details( - self, item_id: str, media_type: MediaType = MediaType.RADIO - ) -> StreamDetails: + async def get_stream_details(self, item_id: str, media_type: MediaType) -> StreamDetails: """Get streamdetails for a radio station.""" if item_id.startswith("http"): # custom url diff --git a/music_assistant/providers/ytmusic/__init__.py b/music_assistant/providers/ytmusic/__init__.py index 97e9f999..3a2a06da 100644 --- a/music_assistant/providers/ytmusic/__init__.py +++ b/music_assistant/providers/ytmusic/__init__.py @@ -537,9 +537,7 @@ class YoutubeMusicProvider(MusicProvider): return tracks return [] - async def get_stream_details( - self, item_id: str, media_type: MediaType = MediaType.TRACK - ) -> StreamDetails: + async def get_stream_details(self, item_id: str, media_type: MediaType) -> StreamDetails: """Return the content details for the given track when it will be streamed.""" if media_type == MediaType.PODCAST_EPISODE: item_id = item_id.split(PODCAST_EPISODE_SPLITTER)[1] -- 2.34.1