From 4ef6ca7c2141b054cbc5455340e9d8da1b91f950 Mon Sep 17 00:00:00 2001 From: meisnate12 Date: Sat, 20 Feb 2021 01:41:40 -0500 Subject: [PATCH] added show_missing and save_missing --- modules/builder.py | 29 +++++++++++++++++++---------- modules/config.py | 22 ++++++++++++++++++++++ modules/plex.py | 2 ++ modules/util.py | 9 ++++++++- 4 files changed, 51 insertions(+), 11 deletions(-) diff --git a/modules/builder.py b/modules/builder.py index e22c59e1..1ef551de 100644 --- a/modules/builder.py +++ b/modules/builder.py @@ -11,7 +11,12 @@ class CollectionBuilder: self.library = library self.name = name self.data = data - self.details = {"arr_tag": None} + self.details = { + "arr_tag": None, + "show_filtered": library.show_filtered, + "show_missing": library.show_missing, + "save_missing": library.save_missing + } self.methods = [] self.filters = [] self.posters = [] @@ -242,11 +247,11 @@ class CollectionBuilder: elif method_name == "file_background": if os.path.exists(data[m]): self.backgrounds.append(("file", os.path.abspath(data[m]), method_name)) else: raise Failed("Collection Error: Background Path Does Not Exist: {}".format(os.path.abspath(data[m]))) - elif method_name in ["add_to_arr", "show_filtered"]: - if isinstance(data[m], bool): self.details[method_name] = data[m] - else: raise Failed("Collection Error: {} must be either true or false".format(method_name)) elif method_name == "arr_tag": self.details[method_name] = util.get_list(data[m]) + elif method_name in util.boolean_details: + if isinstance(data[m], bool): self.details[method_name] = data[m] + else: raise Failed("Collection Error: {} must be either true or false".format(method_name)) elif method_name in util.all_details: self.details[method_name] = data[m] elif method_name in ["year", "year.not"]: @@ -604,7 +609,7 @@ class CollectionBuilder: elif "trakt" in method: items_found += check_map(self.config.Trakt.get_items(method, value, self.library.is_movie)) else: logger.error("Collection Error: {} method not supported".format(method)) - if len(items) > 0: map = self.library.add_to_collection(collection_obj if collection_obj else collection_name, items, self.filters, self.library.show_filtered, map, movie_map, show_map) + if len(items) > 0: map = self.library.add_to_collection(collection_obj if collection_obj else collection_name, items, self.filters, self.details["show_filtered"], map, movie_map, show_map) else: logger.error("No items found to add to this collection ") if len(missing_movies) > 0 or len(missing_shows) > 0: @@ -625,13 +630,15 @@ class CollectionBuilder: title = str(movie.title) if not_lang is None or (not_lang is True and movie.original_language not in terms) or (not_lang is False and movie.original_language in terms): missing_movies_with_names.append((title, missing_id)) - logger.info("{} Collection | ? | {} (TMDb: {})".format(collection_name, title, missing_id)) - elif self.library.show_filtered is True: + if self.details["show_missing"] is True: + logger.info("{} Collection | ? | {} (TMDb: {})".format(collection_name, title, missing_id)) + elif self.details["show_filtered"] is True: logger.info("{} Collection | X | {} (TMDb: {})".format(collection_name, title, missing_id)) except Failed as e: logger.error(e) logger.info("{} Movie{} Missing".format(len(missing_movies_with_names), "s" if len(missing_movies_with_names) > 1 else "")) - self.library.add_missing(collection_name, missing_movies_with_names, True) + if self.details["save_missing"] is True: + self.library.add_missing(collection_name, missing_movies_with_names, True) if self.do_arr and self.library.Radarr: self.library.Radarr.add_tmdb([missing_id for title, missing_id in missing_movies_with_names], tag=self.details["arr_tag"]) if len(missing_shows) > 0 and self.library.is_show: @@ -640,11 +647,13 @@ class CollectionBuilder: try: title = str(self.config.TVDb.get_series(self.library.Plex.language, tvdb_id=missing_id).title.encode("ascii", "replace").decode()) missing_shows_with_names.append((title, missing_id)) - logger.info("{} Collection | ? | {} (TVDB: {})".format(collection_name, title, missing_id)) + if self.details["show_missing"] is True: + logger.info("{} Collection | ? | {} (TVDB: {})".format(collection_name, title, missing_id)) except Failed as e: logger.error(e) logger.info("{} Show{} Missing".format(len(missing_shows_with_names), "s" if len(missing_shows_with_names) > 1 else "")) - self.library.add_missing(c, missing_shows_with_names, False) + if self.details["save_missing"] is True: + self.library.add_missing(c, missing_shows_with_names, False) if self.do_arr and self.library.Sonarr: self.library.Sonarr.add_tvdb([missing_id for title, missing_id in missing_shows_with_names], tag=self.details["arr_tag"]) diff --git a/modules/config.py b/modules/config.py index 01074862..e3e04504 100644 --- a/modules/config.py +++ b/modules/config.py @@ -151,6 +151,8 @@ class Config: self.general["plex"]["sync_mode"] = check_for_attribute(self.data, "sync_mode", parent="plex", default="append", test_list=["append", "sync"], options="| \tappend (Only Add Items to the Collection)\n| \tsync (Add & Remove Items from the Collection)") if "plex" in self.data else "append" self.general["plex"]["show_unmanaged"] = check_for_attribute(self.data, "show_unmanaged", parent="plex", var_type="bool", default=True) if "plex" in self.data else True self.general["plex"]["show_filtered"] = check_for_attribute(self.data, "show_filtered", parent="plex", var_type="bool", default=False) if "plex" in self.data else False + self.general["plex"]["show_missing"] = check_for_attribute(self.data, "show_missing", parent="plex", var_type="bool", default=True) if "plex" in self.data else True + self.general["plex"]["save_missing"] = check_for_attribute(self.data, "save_missing", parent="plex", var_type="bool", default=True) if "plex" in self.data else True self.general["radarr"] = {} self.general["radarr"]["url"] = check_for_attribute(self.data, "url", parent="radarr", default_is_none=True) if "radarr" in self.data else None @@ -267,6 +269,26 @@ class Config: else: logger.warning("Config Warning: plex sub-attribute show_filtered is blank using general value: {}".format(self.general["plex"]["show_filtered"])) + params["show_missing"] = self.general["plex"]["show_missing"] + if "plex" in libs[lib] and "show_missing" in libs[lib]["plex"]: + if libs[lib]["plex"]["show_missing"]: + if isinstance(libs[lib]["plex"]["show_missing"], bool): + params["plex"]["show_missing"] = libs[lib]["plex"]["show_missing"] + else: + logger.warning("Config Warning: plex sub-attribute show_missing must be either true or false using general value: {}".format(self.general["plex"]["show_missing"])) + else: + logger.warning("Config Warning: plex sub-attribute show_missing is blank using general value: {}".format(self.general["plex"]["show_missing"])) + + params["save_missing"] = self.general["plex"]["save_missing"] + if "plex" in libs[lib] and "save_missing" in libs[lib]["plex"]: + if libs[lib]["plex"]["save_missing"]: + if isinstance(libs[lib]["plex"]["save_missing"], bool): + params["plex"]["save_missing"] = libs[lib]["plex"]["save_missing"] + else: + logger.warning("Config Warning: plex sub-attribute save_missing must be either true or false using general value: {}".format(self.general["plex"]["save_missing"])) + else: + logger.warning("Config Warning: plex sub-attribute save_missing is blank using general value: {}".format(self.general["plex"]["save_missing"])) + params["tmdb"] = self.TMDb params["tvdb"] = self.TVDb diff --git a/modules/plex.py b/modules/plex.py index 6abf0926..3a62e603 100644 --- a/modules/plex.py +++ b/modules/plex.py @@ -78,6 +78,8 @@ class PlexAPI: self.sync_mode = params["sync_mode"] self.show_unmanaged = params["show_unmanaged"] self.show_filtered = params["show_filtered"] + self.show_missing = params["show_missing"] + self.save_missing = params["save_missing"] self.plex = params["plex"] self.radarr = params["radarr"] self.sonarr = params["sonarr"] diff --git a/modules/util.py b/modules/util.py index e76212a9..ae5022f9 100644 --- a/modules/util.py +++ b/modules/util.py @@ -386,13 +386,20 @@ movie_only_filters = [ "video_resolution", "video_resolution.not", "writer", "writer.not" ] +boolean_details = [ + "add_to_arr", + "show_filtered", + "show_missing", + "save_missing" +] all_details = [ "sort_title", "content_rating", "summary", "tmdb_summary", "tmdb_description", "tmdb_biography", "collection_mode", "collection_order", "url_poster", "tmdb_poster", "tmdb_profile", "file_poster", "url_background", "file_background", - "name_mapping", "add_to_arr" + "name_mapping", "add_to_arr", + "show_filtered", "show_missing", "save_missing" ] discover_movie = [ "language", "with_original_language", "region", "sort_by",