From d30e03b7021ea35ff00c1a1c1273e2bb8f149898 Mon Sep 17 00:00:00 2001 From: Luis Garcia Date: Mon, 15 Jul 2024 03:01:53 -0600 Subject: [PATCH] Jellyfin: Skip partial on version lower than 10.9 --- requirements.txt | Bin 57 -> 150 bytes src/jellyfin_emby.py | 109 ++++++++++++++++++++++++------------------- 2 files changed, 61 insertions(+), 48 deletions(-) diff --git a/requirements.txt b/requirements.txt index 1a8abf38a6d6a05e118366f7e8b31b8d7816dae1..ba302df70d60108bbc864df05023a202a1919db9 100644 GIT binary patch literal 150 zcmXYq%L;=~3`Ebm;HM})an*&(?)(K&QK?wp*q^V?y_JwjV9q4xZ=|5)Ep6x+q)$~y zj7NaOgPfk4gG}4Yx_>Vbky>Kp%Sy{fd6!CaRbpVbbRf>RZLZC7CN}9JYPr98MEYqs F!(6Gk7dHR^ literal 57 zcmWH@Nv&`U@U*ox(K9sFGw0 str: + def info(self, version=False) -> str: try: query_string = "/System/Info/Public" response = self.query(query_string, "get") if response: + # Return version only if requested + if version: + return response['Version'] + return f"{self.server_type} {response['ServerName']}: {response['Version']}" else: return None @@ -561,28 +566,32 @@ class JellyfinEmby: jellyfin_video.get("Name"), ) else: - msg = f"{self.server_type}: {jellyfin_video.get('Name')} as partially watched for {floor(movie_status['time'] / 60_000)} minutes for {user_name} in {library}" - - if not dryrun: - logger(msg, 5) - playback_position_payload = { - "PlaybackPositionTicks": movie_status["time"] - * 10_000, - } - self.query( - f"/Users/{user_id}/Items/{jellyfin_video_id}/UserData", - "post", - json=playback_position_payload, - ) + # Handle partially watched movies not supported in jellyfin < 10.9.0 + if self.server_type == "Jellyfin" and self.version < version.parse("10.9.0"): + logger(f"{self.server_type}: Skipping movie {jellyfin_video.get('Name')} as partially watched not supported in Jellyfin < 10.9.0", 4) else: - logger(msg, 6) + msg = f"{self.server_type}: {jellyfin_video.get('Name')} as partially watched for {floor(movie_status['time'] / 60_000)} minutes for {user_name} in {library}" - log_marked( - user_name, - library, - jellyfin_video.get("Name"), - duration=floor(movie_status["time"] / 60_000), - ) + if not dryrun: + logger(msg, 5) + playback_position_payload = { + "PlaybackPositionTicks": movie_status["time"] + * 10_000, + } + self.query( + f"/Users/{user_id}/Items/{jellyfin_video_id}/UserData", + "post", + json=playback_position_payload, + ) + else: + logger(msg, 6) + + log_marked( + user_name, + library, + jellyfin_video.get("Name"), + duration=floor(movie_status["time"] / 60_000), + ) else: logger( f"{self.server_type}: Skipping movie {jellyfin_video.get('Name')} as it is not in mark list for {user_name}", @@ -690,34 +699,38 @@ class JellyfinEmby: jellyfin_episode.get("Name"), ) else: - msg = ( - f"{self.server_type}: {jellyfin_episode['SeriesName']} {jellyfin_episode['SeasonName']} Episode {jellyfin_episode.get('IndexNumber')} {jellyfin_episode.get('Name')}" - + f" as partially watched for {floor(episode_status['time'] / 60_000)} minutes for {user_name} in {library}" - ) - - if not dryrun: - logger(msg, 5) - playback_position_payload = { - "PlaybackPositionTicks": episode_status[ - "time" - ] - * 10_000, - } - self.query( - f"/Users/{user_id}/Items/{jellyfin_episode_id}/UserData", - "post", - json=playback_position_payload, - ) + # Handle partially watched episodes not supported in jellyfin < 10.9.0 + if self.server_type == "Jellyfin" and self.version < version.parse("10.9.0"): + logger(f"{self.server_type}: Skipping episode {jellyfin_episode.get('Name')} as partially watched not supported in Jellyfin < 10.9.0", 4) else: - logger(msg, 6) + msg = ( + f"{self.server_type}: {jellyfin_episode['SeriesName']} {jellyfin_episode['SeasonName']} Episode {jellyfin_episode.get('IndexNumber')} {jellyfin_episode.get('Name')}" + + f" as partially watched for {floor(episode_status['time'] / 60_000)} minutes for {user_name} in {library}" + ) - log_marked( - user_name, - library, - jellyfin_episode.get("SeriesName"), - jellyfin_episode.get("Name"), - duration=floor(episode_status["time"] / 60_000), - ) + if not dryrun: + logger(msg, 5) + playback_position_payload = { + "PlaybackPositionTicks": episode_status[ + "time" + ] + * 10_000, + } + self.query( + f"/Users/{user_id}/Items/{jellyfin_episode_id}/UserData", + "post", + json=playback_position_payload, + ) + else: + logger(msg, 6) + + log_marked( + user_name, + library, + jellyfin_episode.get("SeriesName"), + jellyfin_episode.get("Name"), + duration=floor(episode_status["time"] / 60_000), + ) else: logger( f"{self.server_type}: Skipping episode {jellyfin_episode.get('Name')} as it is not in mark list for {user_name}",