diff --git a/modules/builder.py b/modules/builder.py index 7159dcf8..be3a8ae0 100644 --- a/modules/builder.py +++ b/modules/builder.py @@ -87,8 +87,7 @@ ignored_details = [ "smart_filter", "smart_label", "smart_url", "run_again", "schedule", "sync_mode", "template", "test", "tmdb_person", "build_collection", "collection_order", "collection_level", "validate_builders", "collection_name" ] -notification_details = ["collection_creation_webhooks", "collection_addition_webhooks", "collection_removal_webhooks"] -details = ["collection_mode", "collection_order", "collection_level", "collection_minimum", "label"] + boolean_details + string_details + notification_details +details = ["collection_changes_webhooks", "collection_mode", "collection_order", "collection_level", "collection_minimum", "label"] + boolean_details + string_details collectionless_details = ["collection_order", "plex_collectionless", "label", "label_sync_mode", "test"] + \ poster_details + background_details + summary_details + string_details item_bool_details = ["item_assets", "revert_overlay", "item_lock_background", "item_lock_poster", "item_lock_title", "item_refresh"] @@ -183,9 +182,7 @@ class CollectionBuilder: "create_asset_folders": self.library.create_asset_folders, "delete_below_minimum": self.library.delete_below_minimum, "delete_not_scheduled": self.library.delete_not_scheduled, - "collection_creation_webhooks": self.library.collection_creation_webhooks, - "collection_addition_webhooks": self.library.collection_addition_webhooks, - "collection_removal_webhooks": self.library.collection_removal_webhooks, + "collection_changes_webhooks": self.library.collection_changes_webhooks } self.item_details = {} self.radarr_details = {} @@ -748,7 +745,7 @@ class CollectionBuilder: self.details["label.sync"] = util.get_list(method_data) if method_data else [] else: self.details[method_final] = util.get_list(method_data) if method_data else [] - elif method_name in notification_details: + elif method_name == "collection_changes_webhooks": self.details[method_name] = util.parse(method_name, method_data, datatype="list") elif method_name in boolean_details: default = self.details[method_name] if method_name in self.details else None @@ -1596,7 +1593,7 @@ class CollectionBuilder: else: self.library.alter_collection(current, name, smart_label_collection=self.smart_label_collection) amount_added += 1 - if self.details["collection_addition_webhooks"]: + if self.details["collection_changes_webhooks"]: if self.library.is_movie and current.ratingKey in self.library.movie_rating_key_map: add_id = self.library.movie_rating_key_map[current.ratingKey] elif self.library.is_show and current.ratingKey in self.library.show_rating_key_map: @@ -1620,7 +1617,7 @@ class CollectionBuilder: self.library.reload(item) logger.info(f"{self.name} Collection | - | {self.item_title(item)}") self.library.alter_collection(item, self.name, smart_label_collection=self.smart_label_collection, add=False) - if self.details["collection_removal_webhooks"]: + if self.details["collection_changes_webhooks"]: if self.library.is_movie and item.ratingKey in self.library.movie_rating_key_map: remove_id = self.library.movie_rating_key_map[item.ratingKey] elif self.library.is_show and item.ratingKey in self.library.show_rating_key_map: @@ -2147,17 +2144,12 @@ class CollectionBuilder: previous = key def send_notifications(self): - if self.obj and ( - (self.details["collection_creation_webhooks"] and self.created) or - (self.details["collection_addition_webhooks"] and len(self.notification_additions) > 0) or - (self.details["collection_removal_webhooks"] and len(self.notification_removals) > 0) - ): + if self.obj and self.details["collection_changes_webhooks"] and \ + (self.created or len(self.notification_additions) > 0 or len(self.notification_removals) > 0): self.obj.reload() try: self.library.Webhooks.collection_hooks( - self.details["collection_creation_webhooks"] + - self.details["collection_addition_webhooks"] + - self.details["collection_removal_webhooks"], + self.details["collection_changes_webhooks"], self.obj, created=self.created, additions=self.notification_additions, diff --git a/modules/config.py b/modules/config.py index 11dbe5ca..b4f1dd74 100644 --- a/modules/config.py +++ b/modules/config.py @@ -84,9 +84,28 @@ class Config: replace_attr(new_config["libraries"][library], "show_filtered", "plex") replace_attr(new_config["libraries"][library], "show_missing", "plex") replace_attr(new_config["libraries"][library], "save_missing", "plex") + if new_config["libraries"][library] and "webhooks" in new_config["libraries"][library] and "collection_changes" not in new_config["libraries"][library]["webhooks"]: + changes = [] + def hooks(attr): + if attr in new_config["libraries"][library]["webhooks"]: + changes.extend([w for w in util.get_list(new_config["libraries"][library]["webhooks"].pop(attr), split=False) if w not in changes]) + hooks("collection_creation") + hooks("collection_addition") + hooks("collection_removal") + new_config["libraries"][library]["webhooks"]["collection_changes"] = changes if changes else None if "libraries" in new_config: new_config["libraries"] = new_config.pop("libraries") if "settings" in new_config: new_config["settings"] = new_config.pop("settings") - if "webhooks" in new_config: new_config["webhooks"] = new_config.pop("webhooks") + if "webhooks" in new_config: + temp = new_config.pop("webhooks") + changes = [] + def hooks(attr): + if attr in temp: + changes.extend([w for w in util.get_list(temp.pop(attr), split=False) if w not in changes]) + hooks("collection_creation") + hooks("collection_addition") + hooks("collection_removal") + temp["collection_changes"] = changes if changes else None + new_config["webhooks"] = temp if "plex" in new_config: new_config["plex"] = new_config.pop("plex") if "tmdb" in new_config: new_config["tmdb"] = new_config.pop("tmdb") if "tautulli" in new_config: new_config["tautulli"] = new_config.pop("tautulli") @@ -215,9 +234,7 @@ class Config: "error": check_for_attribute(self.data, "error", parent="webhooks", var_type="list", default_is_none=True), "run_start": check_for_attribute(self.data, "run_start", parent="webhooks", var_type="list", default_is_none=True), "run_end": check_for_attribute(self.data, "run_end", parent="webhooks", var_type="list", default_is_none=True), - "collection_creation": check_for_attribute(self.data, "collection_creation", parent="webhooks", var_type="list", default_is_none=True), - "collection_addition": check_for_attribute(self.data, "collection_addition", parent="webhooks", var_type="list", default_is_none=True), - "collection_removal": check_for_attribute(self.data, "collection_removal", parent="webhooks", var_type="list", default_is_none=True), + "collection_changes": check_for_attribute(self.data, "collection_changes", parent="webhooks", var_type="list", default_is_none=True) } if self.general["cache"]: util.separator() @@ -429,9 +446,7 @@ class Config: params["delete_unmanaged_collections"] = check_for_attribute(lib, "delete_unmanaged_collections", parent="settings", var_type="bool", default=False, do_print=False, save=False) params["delete_collections_with_less"] = check_for_attribute(lib, "delete_collections_with_less", parent="settings", var_type="int", default_is_none=True, do_print=False, save=False) params["error_webhooks"] = check_for_attribute(lib, "error", parent="webhooks", var_type="list", default=self.webhooks["error"], do_print=False, save=False, default_is_none=True) - params["collection_creation_webhooks"] = check_for_attribute(lib, "collection_creation", parent="webhooks", var_type="list", default=self.webhooks["collection_creation"], do_print=False, save=False, default_is_none=True) - params["collection_addition_webhooks"] = check_for_attribute(lib, "collection_addition", parent="webhooks", var_type="list", default=self.webhooks["collection_addition"], do_print=False, save=False, default_is_none=True) - params["collection_removal_webhooks"] = check_for_attribute(lib, "collection_removal", parent="webhooks", var_type="list", default=self.webhooks["collection_removal"], do_print=False, save=False, default_is_none=True) + params["collection_changes_webhooks"] = check_for_attribute(lib, "collection_creation", parent="webhooks", var_type="list", default=self.webhooks["collection_changes"], do_print=False, save=False, default_is_none=True) params["assets_for_all"] = check_for_attribute(lib, "assets_for_all", parent="settings", var_type="bool", default=self.general["assets_for_all"], do_print=False, save=False) params["mass_genre_update"] = check_for_attribute(lib, "mass_genre_update", test_list=mass_update_options, default_is_none=True, save=False, do_print=False) params["mass_audience_rating_update"] = check_for_attribute(lib, "mass_audience_rating_update", test_list=mass_update_options, default_is_none=True, save=False, do_print=False) diff --git a/modules/library.py b/modules/library.py index 1e75984a..ed44ef22 100644 --- a/modules/library.py +++ b/modules/library.py @@ -63,9 +63,7 @@ class Library(ABC): self.radarr_add_all = params["radarr_add_all"] self.sonarr_add_all = params["sonarr_add_all"] self.error_webhooks = params["error_webhooks"] - self.collection_creation_webhooks = params["collection_creation_webhooks"] - self.collection_addition_webhooks = params["collection_addition_webhooks"] - self.collection_removal_webhooks = params["collection_removal_webhooks"] + self.collection_changes_webhooks = params["collection_changes_webhooks"] self.split_duplicates = params["split_duplicates"] # TODO: Here or just in Plex? self.clean_bundles = params["plex"]["clean_bundles"] # TODO: Here or just in Plex? self.empty_trash = params["plex"]["empty_trash"] # TODO: Here or just in Plex?