From de619de92355e5e59f9c32853a95409e1877e90f Mon Sep 17 00:00:00 2001 From: Luigi311 Date: Tue, 5 Jul 2022 16:35:22 -0600 Subject: [PATCH] Add more logging, fix username in jellyfin mark. --- src/jellyfin.py | 28 +++++++++++++++++++--------- src/main.py | 6 +++--- src/plex.py | 26 ++++++++++++-------------- 3 files changed, 34 insertions(+), 26 deletions(-) diff --git a/src/jellyfin.py b/src/jellyfin.py index f16ac3c..07c5f71 100644 --- a/src/jellyfin.py +++ b/src/jellyfin.py @@ -162,9 +162,9 @@ class Jellyfin(): logger(f"Jellyfin: Failed to get watched, Error: {e}", 2) raise Exception(e) - def update_user_watched(self, user, user_id, library, library_id, videos, dryrun): + def update_user_watched(self, user_name, user_id, library, library_id, videos, dryrun): try: - logger(f"Jellyfin: Updating watched for {user} in library {library}", 1) + logger(f"Jellyfin: Updating watched for {user_name} in library {library}", 1) library_search = self.query(f"/Users/{user_id}/Items?SortBy=SortName&SortOrder=Ascending&Recursive=true&ParentId={library_id}&limit=1", "get") library_type = library_search["Items"][0]["Type"] @@ -191,7 +191,7 @@ class Jellyfin(): if movie_found: jellyfin_video_id = jellyfin_video["Id"] - msg = f"{jellyfin_video['Name']} as watched for {user} in {library} for Jellyfin" + msg = f"{jellyfin_video['Name']} as watched for {user_name} in {library} for Jellyfin" if not dryrun: logger(f"Marking {msg}", 0) self.query(f"/Users/{user_id}/PlayedItems/{jellyfin_video_id}", "post") @@ -203,15 +203,14 @@ class Jellyfin(): if library_type == "Episode": videos_shows_ids, videos_episode_ids, _ = generate_library_guids_dict(videos, 3) + logger(f"Jellyfin: shows to mark {videos_shows_ids}\nepisodes to mark {videos_episode_ids}", 1) + jellyfin_search = self.query(f"/Users/{user_id}/Items?SortBy=SortName&SortOrder=Ascending&Recursive=false&ParentId={library_id}&isPlayed=false&Fields=ItemCounts,ProviderIds,Path", "get") jellyfin_shows = [x for x in jellyfin_search["Items"]] for jellyfin_show in jellyfin_shows: show_found = False - if jellyfin_show["Name"] == "The 13 Ghosts of Scooby-Doo": - print(jellyfin_show) - if "Path" in jellyfin_show: if jellyfin_show["Path"].split("/")[-1] in videos_shows_ids["locations"]: show_found = True @@ -224,6 +223,7 @@ class Jellyfin(): break if show_found: + logger(f"Jellyfin: Updating watched for {user_name} in library {library} for show {jellyfin_show['Name']}", 1) jellyfin_show_id = jellyfin_show["Id"] jellyfin_episodes = self.query(f"/Shows/{jellyfin_show_id}/Episodes?userId={user_id}&Fields=ItemCounts,ProviderIds,MediaSources", "get") @@ -245,15 +245,21 @@ class Jellyfin(): if episode_found: jellyfin_episode_id = jellyfin_episode["Id"] - msg = f"{jellyfin_episode['SeriesName']} {jellyfin_episode['SeasonName']} Episode {jellyfin_episode['IndexNumber']} {jellyfin_episode['Name']} as watched for {user} in {library} for Jellyfin" + msg = f"{jellyfin_episode['SeriesName']} {jellyfin_episode['SeasonName']} Episode {jellyfin_episode['IndexNumber']} {jellyfin_episode['Name']} as watched for {user_name} in {library} for Jellyfin" if not dryrun: logger(f"Marked {msg}", 0) self.query(f"/Users/{user_id}/PlayedItems/{jellyfin_episode_id}", "post") else: logger(f"Dryrun {msg}", 0) + else: + logger(f"Jellyfin: Skipping episode {jellyfin_episode['SeriesName']} {jellyfin_episode['SeasonName']} Episode {jellyfin_episode['IndexNumber']} {jellyfin_episode['Name']} as it is not in mark list for {user_name}", 1) + else: + logger(f"Jellyfin: Skipping show {jellyfin_show['Name']} as it is not in mark list for {user_name}", 1) + else: + logger(f"Jellyfin: Library {library} is not a TV Show or Movie, skipping", 2) except Exception as e: - logger(f"Jellyfin: Error updating watched for {user} in library {library}", 2) + logger(f"Jellyfin: Error updating watched for {user_name} in library {library}", 2) raise Exception(e) @@ -261,7 +267,9 @@ class Jellyfin(): try: args = [] for user, libraries in watched_list.items(): + logger(f"Jellyfin: Updating for entry {user}, {libraries}", 1) user_other = None + user_name = None if user_mapping: if user in user_mapping.keys(): user_other = user_mapping[user] @@ -272,9 +280,11 @@ class Jellyfin(): for key in self.users.keys(): if user.lower() == key.lower(): user_id = self.users[key] + user_name = key break elif user_other and user_other.lower() == key.lower(): user_id = self.users[key] + user_name = key break if not user_id: @@ -311,7 +321,7 @@ class Jellyfin(): continue if library_id: - args.append([self.update_user_watched, user, user_id, library, library_id, videos, dryrun]) + args.append([self.update_user_watched, user_name, user_id, library, library_id, videos, dryrun]) future_thread_executor(args) except Exception as e: diff --git a/src/main.py b/src/main.py index a4cffdb..63c4144 100644 --- a/src/main.py +++ b/src/main.py @@ -63,7 +63,7 @@ def cleanup_watched(watched_list_1, watched_list_2, user_mapping=None, library_m # TV Shows elif isinstance(watched_list_1[user_1][library_1], dict): # Generate full list of provider ids for episodes in watch_list_2 to easily compare if they exist in watch_list_1 - show_watched_list_2_keys_dict, episode_watched_list_2_keys_dict, _ = generate_library_guids_dict(watched_list_2[user_2][library_2], 3) + _, episode_watched_list_2_keys_dict, _ = generate_library_guids_dict(watched_list_2[user_2][library_2], 1) for show_key_1 in watched_list_1[user_1][library_1].keys(): show_key_dict = dict(show_key_1) @@ -85,14 +85,14 @@ def cleanup_watched(watched_list_1, watched_list_2, user_mapping=None, library_m if episode_found: if episode in modified_watched_list_1[user_1][library_1][show_key_1][season]: - logger(f"Removing {show_key_dict['title']} {episode} from {library_1}", 3) + logger(f"Removing {episode} from {show_key_dict['title']}", 3) modified_watched_list_1[user_1][library_1][show_key_1][season].remove(episode) break # Remove empty seasons if len(modified_watched_list_1[user_1][library_1][show_key_1][season]) == 0: if season in modified_watched_list_1[user_1][library_1][show_key_1]: - logger(f"Removing {season} from {library_1} because it is empty", 3) + logger(f"Removing {season} from {show_key_dict['title']} because it is empty", 3) del modified_watched_list_1[user_1][library_1][show_key_1][season] # If the show is empty, remove the show diff --git a/src/plex.py b/src/plex.py index 825c3a0..ec8c5f1 100644 --- a/src/plex.py +++ b/src/plex.py @@ -185,13 +185,12 @@ class Plex: break if movie_found: - if movies_search.viewCount == 0: - msg = f"{movies_search.title} as watched for {user.title} in {library} for Plex" - if not dryrun: - logger(f"Marked {msg}", 0) - movies_search.markWatched() - else: - logger(f"Dryrun {msg}", 0) + msg = f"{movies_search.title} as watched for {user.title} in {library} for Plex" + if not dryrun: + logger(f"Marked {msg}", 0) + movies_search.markWatched() + else: + logger(f"Dryrun {msg}", 0) elif library_videos.type == "show": @@ -236,13 +235,12 @@ class Plex: break if episode_found: - if episode_search.viewCount == 0: - msg = f"{show_search.title} {episode_search.title} as watched for {user.title} in {library} for Plex" - if not dryrun: - logger(f"Marked {msg}", 0) - episode_search.markWatched() - else: - logger(f"Dryrun {msg}", 0) + msg = f"{show_search.title} {episode_search.title} as watched for {user.title} in {library} for Plex" + if not dryrun: + logger(f"Marked {msg}", 0) + episode_search.markWatched() + else: + logger(f"Dryrun {msg}", 0) except Exception as e: logger(f"Plex: Failed to update watched for {user.title} in library {library}, Error: {e}", 2) raise Exception(e)