YTMusic fixes (#1145)
authorMarvin Schenkel <marvinschenkel@gmail.com>
Sat, 16 Mar 2024 01:05:21 +0000 (02:05 +0100)
committerGitHub <noreply@github.com>
Sat, 16 Mar 2024 01:05:21 +0000 (02:05 +0100)
* Add guard while adding playlist + use discnumber from YTMusic for album songs

* Change log message to positional arguments

* Change log message to positional arguments

* Change log message to positional arguments

* Change log message to positional arguments

music_assistant/server/providers/slimproto/manifest.json
music_assistant/server/providers/ytmusic/__init__.py

index 179c3256931c753c11ba10911f3035f16f44d21e..47ad234181ccf191d195a72f47e89c4a5cf46aab 100644 (file)
@@ -13,4 +13,4 @@
   "multi_instance": false,
   "builtin": false,
   "load_by_default": false
-}
\ No newline at end of file
+}
index 159478df5169fcd4b6747d3d493a9a952a1a94b1..dec528f85d4d6c86030d9900a00387e9184ac931 100644 (file)
@@ -299,7 +299,7 @@ class YoutubeMusicProvider(MusicProvider):
         tracks = []
         for idx, track_obj in enumerate(album_obj["tracks"], 1):
             track_obj["disc_number"] = 0
-            track_obj["track_number"] = idx
+            track_obj["track_number"] = track_obj.get("trackNumber", idx)
             try:
                 track = await self._parse_track(track_obj=track_obj)
             except InvalidDataError:
@@ -346,7 +346,14 @@ class YoutubeMusicProvider(MusicProvider):
         # Grab the playlist id from the full url in case of personal playlists
         if YT_PLAYLIST_ID_DELIMITER in prov_playlist_id:
             prov_playlist_id = prov_playlist_id.split(YT_PLAYLIST_ID_DELIMITER)[0]
-        playlist_obj = await get_playlist(prov_playlist_id=prov_playlist_id, headers=self._headers)
+        # Add a try to prevent MA from stopping syncing whenever we fail a single playlist
+        try:
+            playlist_obj = await get_playlist(
+                prov_playlist_id=prov_playlist_id, headers=self._headers
+            )
+        except KeyError as ke:
+            self.logger.warning("Could not load playlist: %s: %s", prov_playlist_id, ke)
+            return
         if "tracks" not in playlist_obj:
             return
         for index, track_obj in enumerate(playlist_obj["tracks"]):