diff --git a/changelog/0.1.1.md b/changelog/0.1.1.md new file mode 100644 index 0000000..c89ec39 --- /dev/null +++ b/changelog/0.1.1.md @@ -0,0 +1,4 @@ +# 0.1.1 + +- Updated Jellyfin item fetching logic to skip items that are not `Audio`, `Episode`, or `Movie` types, preventing errors when unsupported media types are encountered +- Updated Jellyfin image fetching logic to use `ParentId` for episodes and music tracks to ensure correct artwork is displayed in Discord Rich Presence diff --git a/jellyfin/api_client.py b/jellyfin/api_client.py index 2c66427..bd1e5d1 100644 --- a/jellyfin/api_client.py +++ b/jellyfin/api_client.py @@ -16,7 +16,7 @@ class JellyfinApiClient: self.logger.info("Connecting to Jellyfin server...") self.client = JellyfinClient() - self.client.config.app('jellydisc', '0.1.0', machine_name, unique_id) + self.client.config.app('jellydisc', '0.1.1', machine_name, unique_id) self.client.config.data['auth.ssl'] = True self.last_auth_time = None @@ -50,7 +50,7 @@ class JellyfinApiClient: session_id = session.get('Id') current_item = self.client.jellyfin.get_now_playing(session_id) - if current_item: + if current_item and current_item.get('Type') in ['Audio', 'Episode', 'Movie']: self.logger.info("Current playback information fetched.") return self.to_model(current_item) @@ -71,8 +71,6 @@ class JellyfinApiClient: elif media_type == 'Movie': return self.to_movie_model(item) - raise ValueError(f"Unsupported media type: {media_type}") - def get_playback_info(self, media: dict) -> tuple[int, int]: play_state = media.get('PlayState') @@ -89,6 +87,7 @@ class JellyfinApiClient: def to_music_model(self, item: dict) -> JellyfinMediaItem: media_id = item.get('Id') + parent_id = item.get('ParentId') premiere_date = item.get('PremiereDate') premiere_year = datetime.fromisoformat(premiere_date).year if premiere_date else None @@ -99,7 +98,7 @@ class JellyfinApiClient: id=media_id, name=item.get('Name'), type=JellyfinMediaType.AUDIO, - image_url=self.get_image_url(media_id), + image_url=self.get_image_url(parent_id), start=start, end=end, metadata={ @@ -128,11 +127,13 @@ class JellyfinApiClient: def to_episode_model(self, item: dict) -> JellyfinMediaItem: media_id = item.get('Id') - seris_name = item.get('SeriesName') + parent = self.client.jellyfin.get_item(item.get('ParentId')) + parent_id = item.get('ParentId') + series_name = item.get('SeriesName') season_number = item.get('ParentIndexNumber') episode_number = item.get('IndexNumber') - subtitle=f"S{season_number:02}E{episode_number:02} of {seris_name}" + subtitle=f"S{season_number:02}E{episode_number:02} of {series_name}" (start, end) = self.get_playback_info(item) @@ -140,7 +141,7 @@ class JellyfinApiClient: id=media_id, name=item.get('Name'), type=JellyfinMediaType.EPISODE, - image_url=self.get_image_url(media_id), + image_url=self.get_image_url(parent_id), start=start, end=end, metadata={