Jellyfin: Fetch favorite userdata into library (#1353)
authorJc2k <john.carr@unrouted.co.uk>
Thu, 13 Jun 2024 12:32:34 +0000 (13:32 +0100)
committerGitHub <noreply@github.com>
Thu, 13 Jun 2024 12:32:34 +0000 (14:32 +0200)
music_assistant/server/providers/jellyfin/__init__.py
music_assistant/server/providers/jellyfin/const.py

index f94cec13adaad25162de0ee9c04d25c40d08f12f..17548dd234def53e16255e9075a2ca7039de7a94 100644 (file)
@@ -83,6 +83,7 @@ from .const import (
     ITEM_KEY_PROVIDER_IDS,\r
     ITEM_KEY_RUNTIME_TICKS,\r
     ITEM_KEY_SORT_NAME,\r
+    ITEM_KEY_USER_DATA,\r
     ITEM_TYPE_ALBUM,\r
     ITEM_TYPE_ARTIST,\r
     ITEM_TYPE_AUDIO,\r
@@ -90,6 +91,7 @@ from .const import (
     MAX_IMAGE_WIDTH,\r
     SUPPORTED_CONTAINER_FORMATS,\r
     USER_APP_NAME,\r
+    USER_DATA_KEY_IS_FAVORITE,\r
 )\r
 \r
 CONF_URL = "url"\r
@@ -345,6 +347,8 @@ class JellyfinProvider(MusicProvider):
                         artist_item[ITEM_KEY_NAME],\r
                     )\r
                 )\r
+        user_data = current_jellyfin_album.get(ITEM_KEY_USER_DATA, {})\r
+        album.favorite = user_data.get(USER_DATA_KEY_IS_FAVORITE, False)\r
         return album\r
 \r
     async def _parse_artist(self, jellyfin_artist: dict[str, Any]) -> Artist:\r
@@ -388,6 +392,8 @@ class JellyfinProvider(MusicProvider):
                     remotely_accessible=False,\r
                 )\r
             ]\r
+        user_data = current_artist.get(ITEM_KEY_USER_DATA, {})\r
+        artist.favorite = user_data.get(USER_DATA_KEY_IS_FAVORITE, False)\r
         return artist\r
 \r
     async def _parse_track(self, jellyfin_track: dict[str, Any]) -> Track:\r
@@ -494,6 +500,8 @@ class JellyfinProvider(MusicProvider):
                     track.name,\r
                     exc_info=error if self.logger.isEnabledFor(logging.DEBUG) else None,\r
                 )\r
+        user_data = current_jellyfin_track.get(ITEM_KEY_USER_DATA, {})\r
+        track.favorite = user_data.get(USER_DATA_KEY_IS_FAVORITE, False)\r
         return track\r
 \r
     async def _parse_playlist(self, jellyfin_playlist: dict[str, Any]) -> Playlist:\r
@@ -522,6 +530,8 @@ class JellyfinProvider(MusicProvider):
                     remotely_accessible=False,\r
                 )\r
             ]\r
+        user_data = jellyfin_playlist.get(ITEM_KEY_USER_DATA, {})\r
+        playlist.favorite = user_data.get(USER_DATA_KEY_IS_FAVORITE, False)\r
         playlist.is_editable = False\r
         return playlist\r
 \r
index 2d6f16d1a1b0cd807bdaf82443612cab2cae9f53..9809659b56fc580a0cc2259f9cce6111d1438490 100644 (file)
@@ -40,6 +40,7 @@ ITEM_KEY_ARTIST_ITEMS: Final = "ArtistItems"
 ITEM_KEY_CAN_DOWNLOAD: Final = "CanDownload"\r
 ITEM_KEY_PARENT_INDEX_NUM: Final = "ParentIndexNumber"\r
 ITEM_KEY_RUNTIME_TICKS: Final = "RunTimeTicks"\r
+ITEM_KEY_USER_DATA: Final = "UserData"\r
 \r
 ITEM_TYPE_ALBUM: Final = "MusicAlbum"\r
 ITEM_TYPE_ARTIST: Final = "MusicArtist"\r
@@ -47,6 +48,8 @@ ITEM_TYPE_MUSICARTISTS: Final = "MusicArtists"
 ITEM_TYPE_AUDIO: Final = "Audio"\r
 ITEM_TYPE_LIBRARY: Final = "CollectionFolder"\r
 \r
+USER_DATA_KEY_IS_FAVORITE: Final = "IsFavorite"\r
+\r
 MAX_IMAGE_WIDTH: Final = 500\r
 MAX_STREAMING_BITRATE: Final = "140000000"\r
 \r