From 17be256282c48f944ed6ca40f91aacec99d570fb Mon Sep 17 00:00:00 2001 From: meisnate12 Date: Mon, 8 Mar 2021 14:53:05 -0500 Subject: [PATCH] added more collection details --- README.md | 5 +++-- modules/builder.py | 35 ++++++++++++++++++++--------------- modules/config.py | 2 +- modules/sonarr.py | 2 +- modules/tvdb.py | 37 +++++++++++++++++++------------------ modules/util.py | 6 +++--- 6 files changed, 47 insertions(+), 40 deletions(-) diff --git a/README.md b/README.md index 0d02f4b1..9cc43a5e 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,9 @@ The original concept for Plex Meta Manager is [Plex Auto Collections](https://gi The script can update many metadata fields for movies, shows, collections, seasons, and episodes and can act as a backup if your plex DB goes down. It can even update metadata the plex UI can't like Season Names. If the time is put into the metadata configuration file you can have a way to recreate your library and all its metadata changes with the click of a button. -The script is designed to work with most Metadata agents including the new Plex Movie Agent, [Hama Anime Agent](https://github.com/ZeroQI/Hama.bundle), and [MyAnimeList Anime Agent](https://github.com/Fribb/MyAnimeList.bundle). +The script is designed to work with most Metadata agents including the new Plex Movie Agent, New Plex TV Agent, [Hama Anime Agent](https://github.com/ZeroQI/Hama.bundle), and [MyAnimeList Anime Agent](https://github.com/Fribb/MyAnimeList.bundle). + +[![paypal](https://www.paypalobjects.com/en_US/i/btn/btn_donateCC_LG.gif)](https://www.paypal.com/donate?business=JTK3CVKF3ZHP2&item_name=Plex+Meta+Manager¤cy_code=USD) ## Getting Started @@ -20,4 +22,3 @@ The script is designed to work with most Metadata agents including the new Plex * To see user submitted Metadata configuration files and you could even add your own go to the [Plex Meta Manager Configs](https://github.com/meisnate12/Plex-Meta-Manager-Configs) * Pull Request are welcome but please submit them to the develop branch * If you wish to contribute to the Wiki please fork and send a pull request on the [Plex Meta Manager Wiki Repository](https://github.com/meisnate12/Plex-Meta-Manager-Wiki) -* [Buy Me a Pizza](https://www.buymeacoffee.com/meisnate12) diff --git a/modules/builder.py b/modules/builder.py index 554206e9..aaee5a0c 100644 --- a/modules/builder.py +++ b/modules/builder.py @@ -240,6 +240,12 @@ class CollectionBuilder: self.summaries[method_name] = config.TMDb.get_list(util.regex_first_int(data[m], "TMDb List ID")).description elif method_name == "tmdb_biography": self.summaries[method_name] = config.TMDb.get_person(util.regex_first_int(data[m], "TMDb Person ID")).biography + elif method_name == "tvdb_summary": + self.summaries[method_name] = config.TVDb.get_movie_or_show(data[m], self.library.Plex.language, self.library.is_movie).summary + elif method_name == "tvdb_description": + self.summaries[method_name] = config.TVDb.get_list_description(data[m], self.library.Plex.language) + elif method_name == "trakt_description": + self.summaries[method_name] = config.Trakt.standard_list(config.Trakt.validate_trakt_list(util.get_list(data[m]))[0]).description elif method_name == "collection_mode": if data[m] in ["default", "hide", "hide_items", "show_items", "hideItems", "showItems"]: if data[m] == "hide_items": self.details[method_name] = "hideItems" @@ -258,6 +264,8 @@ class CollectionBuilder: self.posters[method_name] = f"{config.TMDb.image_url}{config.TMDb.get_movie_show_or_collection(util.regex_first_int(data[m], 'TMDb ID'), self.library.is_movie).poster_path}" elif method_name == "tmdb_profile": self.posters[method_name] = f"{config.TMDb.image_url}{config.TMDb.get_person(util.regex_first_int(data[m], 'TMDb Person ID')).profile_path}" + elif method_name == "tvdb_poster": + self.posters[method_name] = f"{config.TVDb.get_movie_or_series(data[m], self.library.Plex.language, self.library.is_movie).poster_path}" elif method_name == "file_poster": if os.path.exists(data[m]): self.posters[method_name] = os.path.abspath(data[m]) else: raise Failed(f"Collection Error: Poster Path Does Not Exist: {os.path.abspath(data[m])}") @@ -265,6 +273,8 @@ class CollectionBuilder: self.backgrounds[method_name] = data[m] elif method_name == "tmdb_background": self.backgrounds[method_name] = f"{config.TMDb.image_url}{config.TMDb.get_movie_show_or_collection(util.regex_first_int(data[m], 'TMDb ID'), self.library.is_movie).poster_path}" + elif method_name == "tvdb_background": + self.posters[method_name] = f"{config.TVDb.get_movie_or_series(data[m], self.library.Plex.language, self.library.is_movie).background_path}" elif method_name == "file_background": if os.path.exists(data[m]): self.backgrounds[method_name] = os.path.abspath(data[m]) else: raise Failed(f"Collection Error: Background Path Does Not Exist: {os.path.abspath(data[m])}") @@ -533,10 +543,7 @@ class CollectionBuilder: values = util.get_list(data[m]) if method_name[-8:] == "_details": if method_name == "tvdb_movie_details": - try: - item = config.TVDb.get_movie(self.library.Plex.language, tvdb_id=int(values[0])).id - except ValueError: - item = config.TVDb.get_movie(self.library.Plex.language, tvdb_url=values[0]).id + item = config.TVDb.get_movie(self.library.Plex.language, values[0]) if hasattr(item, "description") and item.description: self.summaries[method_name] = item.description if hasattr(item, "background_path") and item.background_path: @@ -544,10 +551,7 @@ class CollectionBuilder: if hasattr(item, "poster_path") and item.poster_path: self.posters[method_name] = f"{config.TMDb.image_url}{item.poster_path}" elif method_name == "tvdb_show_details": - try: - item = config.TVDb.get_series(self.library.Plex.language, tvdb_id=int(values[0])).id - except ValueError: - item = config.TVDb.get_series(self.library.Plex.language, tvdb_url=values[0]).id + item = config.TVDb.get_series(self.library.Plex.language, values[0]) if hasattr(item, "description") and item.description: self.summaries[method_name] = item.description if hasattr(item, "background_path") and item.background_path: @@ -555,9 +559,7 @@ class CollectionBuilder: if hasattr(item, "poster_path") and item.poster_path: self.posters[method_name] = f"{config.TMDb.image_url}{item.poster_path}" elif method_name == "tvdb_list_details": - description = config.TVDb.get_list_description(self.library.Plex.language, values[0]) - if description and len(description) > 0: - self.summaries[method_name] = description + self.summaries[method_name] = config.TVDb.get_list_description(values[0], self.library.Plex.language) self.methods.append((method_name[:-8], values)) else: self.methods.append((method_name, values)) @@ -737,7 +739,7 @@ class CollectionBuilder: missing_shows_with_names = [] for missing_id in missing_shows: try: - title = str(self.config.TVDb.get_series(self.library.Plex.language, tvdb_id=missing_id).title.encode("ascii", "replace").decode()) + title = str(self.config.TVDb.get_series(self.library.Plex.language, missing_id).title.encode("ascii", "replace").decode()) except Failed as e: logger.error(e) continue @@ -782,6 +784,7 @@ class CollectionBuilder: if "summary" in self.summaries: summary = get_summary("summary", self.summaries) elif "tmdb_description" in self.summaries: summary = get_summary("tmdb_description", self.summaries) elif "tmdb_summary" in self.summaries: summary = get_summary("tmdb_summary", self.summaries) + elif "tvdb_summary" in self.summaries: summary = get_summary("tvdb_summary", self.summaries) elif "tmdb_biography" in self.summaries: summary = get_summary("tmdb_biography", self.summaries) elif "tmdb_person" in self.summaries: summary = get_summary("tmdb_person", self.summaries) elif "tmdb_collection_details" in self.summaries: summary = get_summary("tmdb_collection_details", self.summaries) @@ -893,6 +896,7 @@ class CollectionBuilder: elif "file_poster" in self.posters: set_image("file_poster", self.posters) elif "tmdb_poster" in self.posters: set_image("tmdb_poster", self.posters) elif "tmdb_profile" in self.posters: set_image("tmdb_profile", self.posters) + elif "tvdb_poster" in self.posters: set_image("tvdb_poster", self.posters) elif "asset_directory" in self.posters: set_image("asset_directory", self.posters) elif "tmdb_person" in self.posters: set_image("tmdb_person", self.posters) elif "tmdb_collection_details" in self.posters: set_image("tmdb_collection_details", self.posters) @@ -915,8 +919,9 @@ class CollectionBuilder: logger.info(f"Method: {b} Background: {self.backgrounds[b]}") if "url_background" in self.backgrounds: set_image("url_background", self.backgrounds, is_background=True) - elif "file_background" in self.backgrounds: set_image("file_poster", self.backgrounds, is_background=True) - elif "tmdb_background" in self.backgrounds: set_image("tmdb_poster", self.backgrounds, is_background=True) + elif "file_background" in self.backgrounds: set_image("file_background", self.backgrounds, is_background=True) + elif "tmdb_background" in self.backgrounds: set_image("tmdb_background", self.backgrounds, is_background=True) + elif "tvdb_background" in self.backgrounds: set_image("tvdb_background", self.backgrounds, is_background=True) elif "asset_directory" in self.backgrounds: set_image("asset_directory", self.backgrounds, is_background=True) elif "tmdb_collection_details" in self.backgrounds: set_image("tmdb_collection_details", self.backgrounds, is_background=True) elif "tmdb_movie_details" in self.backgrounds: set_image("tmdb_movie_details", self.backgrounds, is_background=True) @@ -965,7 +970,7 @@ class CollectionBuilder: for missing_id in self.missing_shows: if missing_id not in show_map: try: - title = str(self.config.TVDb.get_series(self.library.Plex.language, tvdb_id=missing_id).title.encode("ascii", "replace").decode()) + title = str(self.config.TVDb.get_series(self.library.Plex.language, missing_id).title.encode("ascii", "replace").decode()) except Failed as e: logger.error(e) continue diff --git a/modules/config.py b/modules/config.py index c58658c1..ad438961 100644 --- a/modules/config.py +++ b/modules/config.py @@ -572,7 +572,7 @@ class Config: if tmdb_id and not from_cache: self.TMDb.get_movie(tmdb_id) except Failed: tmdb_id = None try: - if tvdb_id and not from_cache: self.TVDb.get_series(language, tvdb_id=tvdb_id) + if tvdb_id and not from_cache: self.TVDb.get_series(language, tvdb_id) except Failed: tvdb_id = None if not tmdb_id and not tvdb_id: raise Failed(f"IMDb Error: No TMDb ID or TVDb ID found for IMDb: {imdb_id}") if self.Cache: diff --git a/modules/sonarr.py b/modules/sonarr.py index a2c29bd3..a13c5c27 100644 --- a/modules/sonarr.py +++ b/modules/sonarr.py @@ -57,7 +57,7 @@ class SonarrAPI: tag_nums.append(tag_cache[label]) for tvdb_id in tvdb_ids: try: - show = self.tvdb.get_series(self.language, tvdb_id=tvdb_id) + show = self.tvdb.get_series(self.language, tvdb_id) except Failed as e: logger.error(e) continue diff --git a/modules/tvdb.py b/modules/tvdb.py index d7b054d6..4d7a5b8a 100644 --- a/modules/tvdb.py +++ b/modules/tvdb.py @@ -40,7 +40,7 @@ class TVDbObj: self.background_path = results[0] if len(results) > 0 and len(results[0]) > 0 else None results = response.xpath("//div[@class='block']/div[not(@style='display:none')]/p/text()") - self.description = results[0] if len(results) > 0 and len(results[0]) > 0 else None + self.summary = results[0] if len(results) > 0 and len(results[0]) > 0 else None tmdb_id = None if is_movie: @@ -73,21 +73,24 @@ class TVDbAPI: self.series_id_url = f"{self.site_url}/dereferrer/series/" self.movie_id_url = f"{self.site_url}/dereferrer/movie/" - def get_series(self, language, tvdb_url=None, tvdb_id=None): - if not tvdb_url and not tvdb_id: - raise Failed("TVDB Error: get_series requires either tvdb_url or tvdb_id") - elif not tvdb_url and tvdb_id: - tvdb_url = f"{self.series_id_url}{tvdb_id}" + def get_movie_or_series(self, language, tvdb_url, is_movie): + return self.get_movie(language, tvdb_url) if is_movie else self.get_series(language, tvdb_url) + + def get_series(self, language, tvdb_url): + try: + tvdb_url = f"{self.series_id_url}{int(tvdb_url)}" + except ValueError: + pass return TVDbObj(tvdb_url, language, False, self) - def get_movie(self, language, tvdb_url=None, tvdb_id=None): - if not tvdb_url and not tvdb_id: - raise Failed("TVDB Error: get_movie requires either tvdb_url or tvdb_id") - elif not tvdb_url and tvdb_id: - tvdb_url = f"{self.movie_id_url}{tvdb_id}" + def get_movie(self, language, tvdb_url): + try: + tvdb_url = f"{self.movie_id_url}{int(tvdb_url)}" + except ValueError: + pass return TVDbObj(tvdb_url, language, True, self) - def get_list_description(self, language, tvdb_url): + def get_list_description(self, tvdb_url, language): description = self.send_request(tvdb_url, language).xpath("//div[@class='block']/div[not(@style='display:none')]/p/text()") return description[0] if len(description) > 0 and len(description[0]) > 0 else "" @@ -102,11 +105,11 @@ class TVDbAPI: title = item.xpath(".//div[@class='col-xs-12 col-sm-9 mt-2']//a/text()")[0] item_url = item.xpath(".//div[@class='col-xs-12 col-sm-9 mt-2']//a/@href")[0] if item_url.startswith("/series/"): - try: show_ids.append(self.get_series(language, tvdb_url=f"{self.site_url}{item_url}").id) + try: show_ids.append(self.get_series(language, f"{self.site_url}{item_url}").id) except Failed as e: logger.error(f"{e} for series {title}") elif item_url.startswith("/movies/"): try: - tmdb_id = self.get_movie(language, tvdb_url=f"{self.site_url}{item_url}").tmdb_id + tmdb_id = self.get_movie(language, f"{self.site_url}{item_url}").tmdb_id if tmdb_id: movie_ids.append(tmdb_id) else: raise Failed(f"TVDb Error: TMDb ID not found from TVDb URL: {tvdb_url}") except Failed as e: @@ -133,11 +136,9 @@ class TVDbAPI: if status_message: logger.info(f"Processing {pretty}: {data}") if method == "tvdb_show": - try: show_ids.append(self.get_series(language, tvdb_id=int(data)).id) - except ValueError: show_ids.append(self.get_series(language, tvdb_url=data).id) + show_ids.append(self.get_series(language, data).id) elif method == "tvdb_movie": - try: movie_ids.append(self.get_movie(language, tvdb_id=int(data)).id) - except ValueError: movie_ids.append(self.get_movie(language, tvdb_url=data).id) + movie_ids.append(self.get_movie(language, data).id) elif method == "tvdb_list": tmdb_ids, tvdb_ids = self.get_tvdb_ids_from_url(data, language) movie_ids.extend(tmdb_ids) diff --git a/modules/util.py b/modules/util.py index 11e6ded4..35667dea 100644 --- a/modules/util.py +++ b/modules/util.py @@ -453,10 +453,10 @@ boolean_details = [ ] all_details = [ "sort_title", "content_rating", - "summary", "tmdb_summary", "tmdb_description", "tmdb_biography", + "summary", "tmdb_summary", "tmdb_description", "tmdb_biography", "tvdb_summary", "tvdb_description", "trakt_description", "collection_mode", "collection_order", - "url_poster", "tmdb_poster", "tmdb_profile", "file_poster", - "url_background", "file_background", + "url_poster", "tmdb_poster", "tmdb_profile", "tvdb_poster", "file_poster", + "url_background", "tmdb_background", "tvdb_background", "file_background", "name_mapping", "add_to_arr", "arr_tag", "label", "show_filtered", "show_missing", "save_missing" ]