From 60a2e34a6f3175ed7164ffad7d2e4b63d6f55dc7 Mon Sep 17 00:00:00 2001 From: meisnate12 Date: Mon, 3 May 2021 00:10:12 -0400 Subject: [PATCH] #174 added mass_audience_rating_update --- modules/builder.py | 2 +- modules/config.py | 49 ++++++++++++++++++++++++++++++++++++++++------ modules/plex.py | 19 +++++++++--------- 3 files changed, 54 insertions(+), 16 deletions(-) diff --git a/modules/builder.py b/modules/builder.py index 48bda622..f23e77c8 100644 --- a/modules/builder.py +++ b/modules/builder.py @@ -1284,7 +1284,7 @@ class CollectionBuilder: if len(edits) > 0: logger.debug(edits) - self.library.collection_edit_query(collection, edits) + self.library.edit_query(collection, edits) logger.info("Details: have been updated") if self.library.asset_directory: diff --git a/modules/config.py b/modules/config.py index b9ff0e7a..f22965b4 100644 --- a/modules/config.py +++ b/modules/config.py @@ -47,7 +47,7 @@ sonarr_series_types = { "daily": "Episodes released daily or less frequently that use year-month-day (2017-05-25)", "anime": "Episodes released using an absolute episode number" } -mass_genre_update_options = {"tmdb": "Use TMDb Metadata", "omdb": "Use IMDb Metadata through OMDb"} +mass_update_options = {"tmdb": "Use TMDb Metadata", "omdb": "Use IMDb Metadata through OMDb"} library_types = {"movie": "For Movie Libraries", "show": "For Show Libraries"} class Config: @@ -367,13 +367,20 @@ class Config: params["save_missing"] = check_for_attribute(lib, "save_missing", var_type="bool", default=self.general["save_missing"], do_print=False, save=False) if lib and "mass_genre_update" in lib and lib["mass_genre_update"]: - params["mass_genre_update"] = check_for_attribute(lib, "mass_genre_update", test_list=mass_genre_update_options, default_is_none=True, save=False) + params["mass_genre_update"] = check_for_attribute(lib, "mass_genre_update", test_list=mass_update_options, default_is_none=True, save=False) + if self.OMDb is None and params["mass_genre_update"] == "omdb": + params["mass_genre_update"] = None + logger.error("Config Error: mass_genre_update cannot be omdb without a successful OMDb Connection") else: params["mass_genre_update"] = None - if params["mass_genre_update"] == "omdb" and self.OMDb is None: - params["mass_genre_update"] = None - logger.error("Config Error: mass_genre_update cannot be omdb without a successful OMDb Connection") + if lib and "mass_audience_rating_update" in lib and lib["mass_audience_rating_update"]: + params["mass_audience_rating_update"] = check_for_attribute(lib, "mass_audience_rating_update", test_list=mass_update_options, default_is_none=True, save=False) + if self.OMDb is None and params["mass_audience_rating_update"] == "omdb": + params["mass_audience_rating_update"] = None + logger.error("Config Error: mass_audience_rating_update cannot be omdb without a successful OMDb Connection") + else: + params["mass_audience_rating_update"] = None try: params["metadata_path"] = check_for_attribute(lib, "metadata_path", var_type="path", default=os.path.join(default_dir, f"{library_name}.yml"), throw=True) @@ -468,7 +475,7 @@ class Config: logger.info("") movie_map, show_map = self.map_guids(library) if not test and not resume_from: - if library.mass_genre_update: + if library.mass_update: self.mass_metadata(library, movie_map, show_map) try: library.update_metadata(self.TMDb, test) except Failed as e: logger.error(e) @@ -688,6 +695,36 @@ class Config: display_str += f"{', ' if len(display_str) > 0 else ''}+{genre}" if len(display_str) > 0: util.print_end(length, f"{item.title[:25]:<25} | Genres | {display_str}") + if library.mass_audience_rating_update: + if library.mass_audience_rating_update == "tmdb": + if "tmdb" not in ids: + util.print_end(length, f"{item.title[:25]:<25} | No TMDb for Guid: {item.guid}") + continue + try: + tmdb_item = self.TMDb.get_movie(ids["tmdb"]) if library.is_movie else self.TMDb.get_show(ids["tmdb"]) + except Failed as e: + util.print_end(length, str(e)) + continue + new_rating = tmdb_item.vote_average + elif library.mass_audience_rating_update in ["omdb", "imdb"]: + if self.OMDb.limit is True: + break + if "imdb" not in ids: + util.print_end(length, f"{item.title[:25]:<25} | No IMDb for Guid: {item.guid}") + continue + try: + omdb_item = self.OMDb.get_omdb(ids["imdb"]) + except Failed as e: + util.print_end(length, str(e)) + continue + new_rating = omdb_item.imdb_rating + else: + raise Failed + if new_rating is None: + util.print_end(length, f"{item.title[:25]:<25} | No Rating Found") + elif str(item.audienceRating) != str(new_rating): + library.edit_query(item, {"audienceRating.value": new_rating, "audienceRating.locked": 1}) + util.print_end(length, f"{item.title[:25]:<25} | Audience Rating | {new_rating}") def map_guids(self, library): movie_map = {} diff --git a/modules/plex.py b/modules/plex.py index c7b68146..1c56927c 100644 --- a/modules/plex.py +++ b/modules/plex.py @@ -214,6 +214,8 @@ class PlexAPI: self.show_missing = params["show_missing"] self.save_missing = params["save_missing"] self.mass_genre_update = params["mass_genre_update"] + self.mass_audience_rating_update = params["mass_audience_rating_update"] + self.mass_update = self.mass_genre_update or self.mass_audience_rating_update self.plex = params["plex"] self.url = params["plex"]["url"] self.token = params["plex"]["token"] @@ -261,9 +263,12 @@ class PlexAPI: collection.sortUpdate(sort=data) @retry(stop_max_attempt_number=6, wait_fixed=10000) - def collection_edit_query(self, collection, data): - collection.edit(**data) - collection.reload() + def edit_query(self, item, edits, advance=False): + if advance: + item.editAdvanced(**edits) + else: + item.edit(**edits) + item.reload() @retry(stop_max_attempt_number=6, wait_fixed=10000) def upload_image(self, item, location, poster=True, url=True): @@ -451,7 +456,7 @@ class PlexAPI: for i, item in enumerate(all_items, 1): length = util.print_return(length, f"Processing: {i}/{len(all_items)} {item.title}") add_item = True - item.reload() + self.query(item.reload) for collection in item.collections: if collection.id in good_collections: add_item = False @@ -622,11 +627,7 @@ class PlexAPI: if len(edits) > 0: logger.debug(f"Details Update: {edits}") try: - if advanced: - item.editAdvanced(**edits) - else: - item.edit(**edits) - item.reload() + self.edit_query(item, edits, advanced=advanced) if advanced and "languageOverride" in edits: self.query(item.refresh) logger.info(f"{item_type}: {name}{' Advanced' if advanced else ''} Details Update Successful")