diff --git a/modules/builder.py b/modules/builder.py index 01c282b6..ac681da9 100644 --- a/modules/builder.py +++ b/modules/builder.py @@ -170,11 +170,12 @@ custom_sort_builders = [ "mal_all", "mal_airing", "mal_upcoming", "mal_tv", "mal_movie", "mal_ova", "mal_special", "mal_popular", "mal_favorite", "mal_suggested", "mal_userlist", "mal_season", "mal_genre", "mal_studio" ] +episode_parts_only = ["plex_pilots"] parts_collection_valid = [ - "plex_all", "plex_search", "trakt_list", "trakt_list_details", "collection_mode", "label", "visible_library", "changes_webhooks" - "visible_home", "visible_shared", "show_missing", "save_missing", "missing_only_released", "server_preroll", + "plex_all", "plex_search", "trakt_list", "trakt_list_details", "collection_mode", "label", "visible_library", + "visible_home", "visible_shared", "show_missing", "save_missing", "missing_only_released", "server_preroll", "changes_webhooks", "item_lock_background", "item_lock_poster", "item_lock_title", "item_refresh", "item_refresh_delay", "imdb_list" -] + summary_details + poster_details + background_details + string_details +] + episode_parts_only + summary_details + poster_details + background_details + string_details playlist_attributes = [ "filters", "name_mapping", "show_filtered", "show_missing", "save_missing", "missing_only_released", "only_filter_missing", "delete_below_minimum", "ignore_ids", "ignore_imdb_ids", @@ -505,6 +506,8 @@ class CollectionBuilder: raise Failed(f"{self.Type} Error: {method_final} attribute only allowed for album collections") elif not self.library.is_music and method_name in music_only_builders: raise Failed(f"{self.Type} Error: {method_final} attribute only allowed for music libraries") + elif self.collection_level != "episode" and method_name in episode_parts_only: + raise Failed(f"{self.Type} Error: {method_final} attribute only allowed with Collection Level: episode") elif self.parts_collection and method_name not in parts_collection_valid: raise Failed(f"{self.Type} Error: {method_final} attribute not allowed with Collection Level: {self.collection_level.capitalize()}") elif self.smart and method_name in smart_invalid: @@ -1057,7 +1060,7 @@ class CollectionBuilder: })) def _plex(self, method_name, method_data): - if method_name == "plex_all": + if method_name in ["plex_all", "plex_pilots"]: self.builders.append((method_name, self.collection_level)) elif method_name in ["plex_search", "plex_collectionless"]: for dict_data, dict_methods in self._parse(method_name, method_data, datatype="dictlist"): @@ -2091,12 +2094,13 @@ class CollectionBuilder: path = path[:-1] if path.endswith(('/', '\\')) else path tvdb_paths.append((self.library.show_rating_key_map[item.ratingKey], path)) advance_edits = {} - prefs = [p.id for p in item.preferences()] - for method_name, method_data in self.item_details.items(): - if method_name in plex.item_advance_keys: - key, options = plex.item_advance_keys[method_name] - if key in prefs and getattr(item, key) != options[method_data]: - advance_edits[key] = options[method_data] + if hasattr(item, "preferences"): + prefs = [p.id for p in item.preferences()] + for method_name, method_data in self.item_details.items(): + if method_name in plex.item_advance_keys: + key, options = plex.item_advance_keys[method_name] + if key in prefs and getattr(item, key) != options[method_data]: + advance_edits[key] = options[method_data] self.library.edit_item(item, item.title, self.collection_level.capitalize(), advance_edits, advanced=True) if "item_tmdb_season_titles" in self.item_details and item.ratingKey in self.library.show_rating_key_map: diff --git a/modules/plex.py b/modules/plex.py index a46a6f7f..92c5fce2 100644 --- a/modules/plex.py +++ b/modules/plex.py @@ -16,7 +16,7 @@ from xml.etree.ElementTree import ParseError logger = logging.getLogger("Plex Meta Manager") -builders = ["plex_all", "plex_collectionless", "plex_search"] +builders = ["plex_all", "plex_pilots", "plex_collectionless", "plex_search"] search_translation = { "episode_title": "episode.title", "network": "show.network", @@ -701,6 +701,14 @@ class Plex(Library): if method == "plex_all": logger.info(f"Processing Plex All {data.capitalize()}s") items = self.get_all(collection_level=data) + elif method == "plex_pilots": + logger.info(f"Processing Plex Pilot {data.capitalize()}s") + items = [] + for item in self.get_all(): + try: + items.append(item.episode(season=1, episode=1)) + except NotFound: + logger.warning(f"Plex Warning: {item.title} has no Season 1 Episode 1 ") elif method == "plex_search": util.print_multiline(data[1], info=True) items = self.get_filter_items(data[2]) diff --git a/plex_meta_manager.py b/plex_meta_manager.py index 62c8f023..3dd19c10 100644 --- a/plex_meta_manager.py +++ b/plex_meta_manager.py @@ -1001,7 +1001,16 @@ def run_playlists(config): logger.debug(f"Builder: {method}: {value}") logger.info("") items = [] - ids = builder.gather_ids(method, value) + if "plex" in method: + ids = [] + for pl_library in pl_libraries: + ids.extend(pl_library.get_rating_keys(method, value)) + elif "tautulli" in method: + ids = [] + for pl_library in pl_libraries: + ids.extend(pl_library.Tautulli.get_rating_keys(pl_library, value, True)) + else: + ids = builder.gather_ids(method, value) if len(ids) > 0: total_ids = len(ids)