#174 added mass_audience_rating_update

This commit is contained in:
meisnate12 2021-05-03 00:10:12 -04:00
parent 48c211887c
commit 60a2e34a6f
3 changed files with 54 additions and 16 deletions

View file

@ -1284,7 +1284,7 @@ class CollectionBuilder:
if len(edits) > 0: if len(edits) > 0:
logger.debug(edits) logger.debug(edits)
self.library.collection_edit_query(collection, edits) self.library.edit_query(collection, edits)
logger.info("Details: have been updated") logger.info("Details: have been updated")
if self.library.asset_directory: if self.library.asset_directory:

View file

@ -47,7 +47,7 @@ sonarr_series_types = {
"daily": "Episodes released daily or less frequently that use year-month-day (2017-05-25)", "daily": "Episodes released daily or less frequently that use year-month-day (2017-05-25)",
"anime": "Episodes released using an absolute episode number" "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"} library_types = {"movie": "For Movie Libraries", "show": "For Show Libraries"}
class Config: 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) 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"]: 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: else:
params["mass_genre_update"] = None params["mass_genre_update"] = None
if params["mass_genre_update"] == "omdb" and self.OMDb is None: if lib and "mass_audience_rating_update" in lib and lib["mass_audience_rating_update"]:
params["mass_genre_update"] = None params["mass_audience_rating_update"] = check_for_attribute(lib, "mass_audience_rating_update", test_list=mass_update_options, default_is_none=True, save=False)
logger.error("Config Error: mass_genre_update cannot be omdb without a successful OMDb Connection") 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: 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) 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("") logger.info("")
movie_map, show_map = self.map_guids(library) movie_map, show_map = self.map_guids(library)
if not test and not resume_from: if not test and not resume_from:
if library.mass_genre_update: if library.mass_update:
self.mass_metadata(library, movie_map, show_map) self.mass_metadata(library, movie_map, show_map)
try: library.update_metadata(self.TMDb, test) try: library.update_metadata(self.TMDb, test)
except Failed as e: logger.error(e) except Failed as e: logger.error(e)
@ -688,6 +695,36 @@ class Config:
display_str += f"{', ' if len(display_str) > 0 else ''}+{genre}" display_str += f"{', ' if len(display_str) > 0 else ''}+{genre}"
if len(display_str) > 0: if len(display_str) > 0:
util.print_end(length, f"{item.title[:25]:<25} | Genres | {display_str}") 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): def map_guids(self, library):
movie_map = {} movie_map = {}

View file

@ -214,6 +214,8 @@ class PlexAPI:
self.show_missing = params["show_missing"] self.show_missing = params["show_missing"]
self.save_missing = params["save_missing"] self.save_missing = params["save_missing"]
self.mass_genre_update = params["mass_genre_update"] 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.plex = params["plex"]
self.url = params["plex"]["url"] self.url = params["plex"]["url"]
self.token = params["plex"]["token"] self.token = params["plex"]["token"]
@ -261,9 +263,12 @@ class PlexAPI:
collection.sortUpdate(sort=data) collection.sortUpdate(sort=data)
@retry(stop_max_attempt_number=6, wait_fixed=10000) @retry(stop_max_attempt_number=6, wait_fixed=10000)
def collection_edit_query(self, collection, data): def edit_query(self, item, edits, advance=False):
collection.edit(**data) if advance:
collection.reload() item.editAdvanced(**edits)
else:
item.edit(**edits)
item.reload()
@retry(stop_max_attempt_number=6, wait_fixed=10000) @retry(stop_max_attempt_number=6, wait_fixed=10000)
def upload_image(self, item, location, poster=True, url=True): def upload_image(self, item, location, poster=True, url=True):
@ -451,7 +456,7 @@ class PlexAPI:
for i, item in enumerate(all_items, 1): for i, item in enumerate(all_items, 1):
length = util.print_return(length, f"Processing: {i}/{len(all_items)} {item.title}") length = util.print_return(length, f"Processing: {i}/{len(all_items)} {item.title}")
add_item = True add_item = True
item.reload() self.query(item.reload)
for collection in item.collections: for collection in item.collections:
if collection.id in good_collections: if collection.id in good_collections:
add_item = False add_item = False
@ -622,11 +627,7 @@ class PlexAPI:
if len(edits) > 0: if len(edits) > 0:
logger.debug(f"Details Update: {edits}") logger.debug(f"Details Update: {edits}")
try: try:
if advanced: self.edit_query(item, edits, advanced=advanced)
item.editAdvanced(**edits)
else:
item.edit(**edits)
item.reload()
if advanced and "languageOverride" in edits: if advanced and "languageOverride" in edits:
self.query(item.refresh) self.query(item.refresh)
logger.info(f"{item_type}: {name}{' Advanced' if advanced else ''} Details Update Successful") logger.info(f"{item_type}: {name}{' Advanced' if advanced else ''} Details Update Successful")