diff --git a/modules/builder.py b/modules/builder.py index 9617e4d1..67c4c602 100644 --- a/modules/builder.py +++ b/modules/builder.py @@ -87,7 +87,7 @@ ignored_details = [ "smart_filter", "smart_label", "smart_url", "run_again", "schedule", "sync_mode", "template", "test", "delete_not_scheduled", "tmdb_person", "build_collection", "collection_order", "collection_level", "validate_builders", "collection_name" ] -details = ["collection_changes_webhooks", "collection_mode", "collection_order", "collection_level", "collection_minimum", "label"] + boolean_details + string_details +details = ["server_preroll", "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"] @@ -205,6 +205,7 @@ class CollectionBuilder: self.summaries = {} self.schedule = "" self.minimum = self.library.collection_minimum + self.server_preroll = None self.current_time = datetime.now() self.current_year = self.current_time.year self.exists = False @@ -743,6 +744,8 @@ class CollectionBuilder: raise Failed(f"Collection Error: {method_data} collection_mode invalid\n\tdefault (Library default)\n\thide (Hide Collection)\n\thide_items (Hide Items in this Collection)\n\tshow_items (Show this Collection and its Items)") elif method_name == "collection_minimum": self.minimum = util.parse(method_name, method_data, datatype="int", minimum=1) + elif method_name == "server_preroll": + self.server_preroll = util.parse(method_name, method_data) elif method_name == "label": if "label" in methods and "label.sync" in methods: raise Failed("Collection Error: Cannot use label and label.sync together") diff --git a/modules/config.py b/modules/config.py index 3952d4ad..bb3c7be9 100644 --- a/modules/config.py +++ b/modules/config.py @@ -214,21 +214,21 @@ class Config: "cache_expiration": check_for_attribute(self.data, "cache_expiration", parent="settings", var_type="int", default=60), "asset_directory": check_for_attribute(self.data, "asset_directory", parent="settings", var_type="list_path", default=[os.path.join(default_dir, "assets")], default_is_none=True), "asset_folders": check_for_attribute(self.data, "asset_folders", parent="settings", var_type="bool", default=True), - "assets_for_all": check_for_attribute(self.data, "assets_for_all", parent="settings", var_type="bool", default=False, save=False, do_print=False), + "create_asset_folders": check_for_attribute(self.data, "create_asset_folders", parent="settings", var_type="bool", default=False), "sync_mode": check_for_attribute(self.data, "sync_mode", parent="settings", default="append", test_list=sync_modes), + "collection_minimum": check_for_attribute(self.data, "collection_minimum", parent="settings", var_type="int", default=1), + "delete_below_minimum": check_for_attribute(self.data, "delete_below_minimum", parent="settings", var_type="bool", default=False), + "delete_not_scheduled": check_for_attribute(self.data, "delete_not_scheduled", parent="settings", var_type="bool", default=False), "run_again_delay": check_for_attribute(self.data, "run_again_delay", parent="settings", var_type="int", default=0), + "missing_only_released": check_for_attribute(self.data, "missing_only_released", parent="settings", var_type="bool", default=False), + "only_filter_missing": check_for_attribute(self.data, "only_filter_missing", parent="settings", var_type="bool", default=False), "show_unmanaged": check_for_attribute(self.data, "show_unmanaged", parent="settings", var_type="bool", default=True), "show_filtered": check_for_attribute(self.data, "show_filtered", parent="settings", var_type="bool", default=False), "show_missing": check_for_attribute(self.data, "show_missing", parent="settings", var_type="bool", default=True), "show_missing_assets": check_for_attribute(self.data, "show_missing_assets", parent="settings", var_type="bool", default=True), "save_missing": check_for_attribute(self.data, "save_missing", parent="settings", var_type="bool", default=True), - "missing_only_released": check_for_attribute(self.data, "missing_only_released", parent="settings", var_type="bool", default=False), - "only_filter_missing": check_for_attribute(self.data, "only_filter_missing", parent="settings", var_type="bool", default=False), - "create_asset_folders": check_for_attribute(self.data, "create_asset_folders", parent="settings", var_type="bool", default=False), - "collection_minimum": check_for_attribute(self.data, "collection_minimum", parent="settings", var_type="int", default=1), - "delete_below_minimum": check_for_attribute(self.data, "delete_below_minimum", parent="settings", var_type="bool", default=False), - "delete_not_scheduled": check_for_attribute(self.data, "delete_not_scheduled", parent="settings", var_type="bool", default=False), - "tvdb_language": check_for_attribute(self.data, "tvdb_language", parent="settings", default="default") + "tvdb_language": check_for_attribute(self.data, "tvdb_language", parent="settings", default="default"), + "assets_for_all": check_for_attribute(self.data, "assets_for_all", parent="settings", var_type="bool", default=False, save=False, do_print=False) } self.webhooks = { "error": check_for_attribute(self.data, "error", parent="webhooks", var_type="list", default_is_none=True), diff --git a/modules/plex.py b/modules/plex.py index 3137437a..c7194551 100644 --- a/modules/plex.py +++ b/modules/plex.py @@ -264,6 +264,10 @@ class Plex(Library): self.tmdb_collections = None logger.error("Config Error: tmdb_collections only work with Movie Libraries.") + def set_server_preroll(self, preroll): + self.PlexServer.settings.get('cinemaTrailersPrerollID').set(preroll) + self.PlexServer.settings.save() + def get_all_collections(self): return self.search(libtype="collection") diff --git a/plex_meta_manager.py b/plex_meta_manager.py index f79c0f3c..7b06e942 100644 --- a/plex_meta_manager.py +++ b/plex_meta_manager.py @@ -640,7 +640,7 @@ def run_collection(config, library, metadata, requested_collections): builder = CollectionBuilder(config, library, metadata, mapping_name, no_missing, collection_attrs) logger.info("") - util.separator(f"Building {mapping_name} Collection", space=False, border=False) + util.separator(f"Running {mapping_name} Collection", space=False, border=False) if len(builder.schedule) > 0: util.print_multiline(builder.schedule, info=True) @@ -651,7 +651,7 @@ def run_collection(config, library, metadata, requested_collections): items_added = 0 items_removed = 0 - if not builder.smart_url: + if not builder.smart_url and builder.builders: logger.info("") logger.info(f"Sync Mode: {'sync' if builder.sync else 'append'}") @@ -693,7 +693,7 @@ def run_collection(config, library, metadata, requested_collections): stats["sonarr"] += sonarr_add run_item_details = True - if builder.build_collection: + if builder.build_collection and builder.builders: try: builder.load_collection() if builder.created: @@ -711,9 +711,14 @@ def run_collection(config, library, metadata, requested_collections): library.run_sort.append(builder) # builder.sort_collection() + if builder.server_preroll is not None: + library.set_server_preroll(builder.server_preroll) + logger.info("") + logger.info(f"Plex Server Movie pre-roll video updated to {builder.server_preroll}") + builder.send_notifications() - if builder.item_details and run_item_details: + if builder.item_details and run_item_details and builder.builders: try: builder.load_collection_items() except Failed: