small tweaks
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Thu, 24 Oct 2024 16:55:19 +0000 (18:55 +0200)
committerMarcel van der Veldt <m.vanderveldt@outlook.com>
Thu, 24 Oct 2024 16:55:19 +0000 (18:55 +0200)
music_assistant/server/providers/builtin/__init__.py
music_assistant/server/providers/spotify/__init__.py

index 4b341ceb7518ce3794520564097f955997d3800d..e9583c2c55a9745bd24c92e16960adec1bc447c8 100644 (file)
@@ -40,7 +40,7 @@ from music_assistant.common.models.media_items import (
     UniqueList,
 )
 from music_assistant.common.models.streamdetails import StreamDetails
-from music_assistant.constants import MASS_LOGO, VARIOUS_ARTISTS_FANART
+from music_assistant.constants import MASS_LOGO, RESOURCES_DIR, VARIOUS_ARTISTS_FANART
 from music_assistant.server.helpers.tags import AudioTags, parse_tags
 from music_assistant.server.models.music_provider import MusicProvider
 
@@ -142,6 +142,19 @@ class BuiltinProvider(MusicProvider):
         if not await asyncio.to_thread(os.path.exists, self._playlists_dir):
             await asyncio.to_thread(os.mkdir, self._playlists_dir)
         await super().loaded_in_mass()
+        # migrate old image path
+        # TODO: remove this after 2.3+ release
+        old_path = (
+            "/usr/local/lib/python3.12/site-packages/music_assistant/server/helpers/resources"
+        )
+        new_path = str(RESOURCES_DIR)
+        query = (
+            "UPDATE playlists SET metadata = "
+            f"REPLACE (metadata, '{old_path}', '{new_path}') "
+            f"WHERE playlists.metadata LIKE '%{old_path}%'"
+        )
+        await self.mass.music.database.execute(query)
+        await self.mass.music.database.commit()
 
     @property
     def is_streaming_provider(self) -> bool:
index df6b06e51b302112b2cd73dc03ef7ae53d049d2e..a3128e5666171c1507ed2bd3c77026cb655ac27a 100644 (file)
@@ -538,13 +538,8 @@ class SpotifyProvider(MusicProvider):
 
     async def get_stream_details(self, item_id: str) -> StreamDetails:
         """Return the content details for the given track when it will be streamed."""
-        # fetch full track details
-        # this will also check if the track is available for streaming
-        # and use spotify's track linking feature to serve a substitute track
-        # if the original track is not available
-        track = await self.get_track(item_id)
         return StreamDetails(
-            item_id=track.item_id,
+            item_id=item_id,
             provider=self.instance_id,
             audio_format=AudioFormat(
                 content_type=ContentType.OGG,
@@ -906,7 +901,7 @@ class SpotifyProvider(MusicProvider):
             # so it will be retried (and the token refreshed)
             if response.status == 401:
                 self._auth_info = None
-                raise ResourceTemporarilyUnavailable("Token expired", backoff_time=0.1)
+                raise ResourceTemporarilyUnavailable("Token expired", backoff_time=0.05)
 
             # handle 404 not found, convert to MediaNotFoundError
             if response.status == 404:
@@ -933,7 +928,7 @@ class SpotifyProvider(MusicProvider):
             # so it will be retried (and the token refreshed)
             if response.status == 401:
                 self._auth_info = None
-                raise ResourceTemporarilyUnavailable("Token expired", backoff_time=0.1)
+                raise ResourceTemporarilyUnavailable("Token expired", backoff_time=0.05)
             # handle temporary server error
             if response.status in (502, 503):
                 raise ResourceTemporarilyUnavailable(backoff_time=30)
@@ -958,7 +953,7 @@ class SpotifyProvider(MusicProvider):
             # so it will be retried (and the token refreshed)
             if response.status == 401:
                 self._auth_info = None
-                raise ResourceTemporarilyUnavailable("Token expired", backoff_time=0.1)
+                raise ResourceTemporarilyUnavailable("Token expired", backoff_time=0.05)
 
             # handle temporary server error
             if response.status in (502, 503):
@@ -984,7 +979,7 @@ class SpotifyProvider(MusicProvider):
             # so it will be retried (and the token refreshed)
             if response.status == 401:
                 self._auth_info = None
-                raise ResourceTemporarilyUnavailable("Token expired", backoff_time=0.1)
+                raise ResourceTemporarilyUnavailable("Token expired", backoff_time=0.05)
             # handle temporary server error
             if response.status in (502, 503):
                 raise ResourceTemporarilyUnavailable(backoff_time=30)