Fix KeyError when restoring queue from cache (#276)
authorMarcel van der Veldt <m.vanderveldt@outlook.com>
Mon, 2 May 2022 06:14:30 +0000 (08:14 +0200)
committerGitHub <noreply@github.com>
Mon, 2 May 2022 06:14:30 +0000 (08:14 +0200)
music_assistant/controllers/music/tracks.py
music_assistant/models/player_queue.py

index 493a51c8abb910f1efe015fd33a28510aadc4289..e06aae69834ccbc54a1c7f20ec04aa9e1770d928 100644 (file)
@@ -136,8 +136,9 @@ class TracksController(MediaControllerBase[Track]):
             track.sort_name = create_sort_name(track.name)
         cur_item = None
         async with self.mass.database.get_db() as _db:
-            if track.album and not isinstance(track.album, ItemMapping):
-                track.album = ItemMapping.from_item(
+            track_album = track.album
+            if track_album and not isinstance(track.album, ItemMapping):
+                track_album = ItemMapping.from_item(
                     await self.get_db_item_by_prov_id(
                         track.album.provider, track.album.item_id, db=_db
                     )
@@ -175,6 +176,7 @@ class TracksController(MediaControllerBase[Track]):
                 {
                     **track.to_db_row(),
                     "artists": json_serializer(track_artists),
+                    "album": json_serializer(track_album),
                 },
                 db=_db,
             )
index 00ca63806b673ef6873a8611bc690adefdae74bd..4468041427fa53385a7399c02082c37d7966d621 100644 (file)
@@ -52,6 +52,13 @@ class QueueItem(DataClassDictMixin):
         if not self.name:
             self.name = self.uri
 
+    @classmethod
+    def __pre_deserialize__(cls, d: Dict[Any, Any]) -> Dict[Any, Any]:
+        """Run actions before serialization."""
+        # pylint: disable=invalid-name
+        d.pop("streamdetails", None)
+        return d
+
     @classmethod
     def from_media_item(cls, media_item: "Track" | "Radio"):
         """Construct QueueItem from track/radio item."""