diff --git a/modules/builder.py b/modules/builder.py index 17f1bccd..7fd066be 100644 --- a/modules/builder.py +++ b/modules/builder.py @@ -248,7 +248,7 @@ class CollectionBuilder: elif method_name == "tvdb_description": self.summaries[method_name] = config.TVDb.get_list_description(method_data, 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(method_data))[0]).description + self.summaries[method_name] = config.Trakt.standard_list(config.Trakt.validate_trakt(util.get_list(method_data))[0]).description elif method_name == "letterboxd_description": self.summaries[method_name] = config.Letterboxd.get_list_description(method_data, self.library.Plex.language) elif method_name == "collection_mode": @@ -355,15 +355,15 @@ class CollectionBuilder: elif method_name in ["anilist_id", "anilist_relations", "anilist_studio"]: self.methods.append((method_name, config.AniList.validate_anilist_ids(util.get_int_list(method_data, "AniList ID"), studio=method_name == "anilist_studio"))) elif method_name == "trakt_list": - self.methods.append((method_name, config.Trakt.validate_trakt_list(util.get_list(method_data)))) + self.methods.append((method_name, config.Trakt.validate_trakt(util.get_list(method_data)))) elif method_name == "trakt_list_details": - valid_list = config.Trakt.validate_trakt_list(util.get_list(method_data)) + valid_list = config.Trakt.validate_trakt(util.get_list(method_data)) item = config.Trakt.standard_list(valid_list[0]) if hasattr(item, "description") and item.description: self.summaries[method_name] = item.description self.methods.append((method_name[:-8], valid_list)) - elif method_name == "trakt_watchlist": - self.methods.append((method_name, config.Trakt.validate_trakt_watchlist(util.get_list(method_data), self.library.is_movie))) + elif method_name in ["trakt_watchlist", "trakt_collection"]: + self.methods.append((method_name, config.Trakt.validate_trakt(method_name[6:], util.get_list(method_data), self.library.is_movie))) elif method_name == "imdb_list": new_list = [] for imdb_list in util.get_list(method_data, split=False): diff --git a/modules/trakttv.py b/modules/trakttv.py index 1c41c622..1f48479d 100644 --- a/modules/trakttv.py +++ b/modules/trakttv.py @@ -111,6 +111,11 @@ class TraktAPI: def send_request(self, url): return requests.get(url, headers={"Content-Type": "application/json", "trakt-api-version": "2", "trakt-api-key": self.client_id}).json() + def get_collection(self, username, is_movie): + items = self.send_request(f"{self.base_url}/users/{username}/collection/{'movies' if is_movie else 'shows'}") + if is_movie: return [item["movie"]["ids"]["tmdb"] for item in items], [] + else: return [], [item["show"]["ids"]["tvdb"] for item in items] + def get_pagenation(self, pagenation, amount, is_movie): items = self.send_request(f"{self.base_url}/{'movies' if is_movie else 'shows'}/{pagenation}?limit={amount}") if pagenation == "popular" and is_movie: return [item["ids"]["tmdb"] for item in items], [] @@ -118,28 +123,26 @@ class TraktAPI: elif is_movie: return [item["movie"]["ids"]["tmdb"] for item in items], [] else: return [], [item["show"]["ids"]["tvdb"] for item in items] - def validate_trakt_list(self, values): - trakt_values = [] - for value in values: - try: - self.standard_list(value) - trakt_values.append(value) - except Failed as e: - logger.error(e) - if len(trakt_values) == 0: - raise Failed(f"Trakt Error: No valid Trakt Lists in {values}") - return trakt_values - - def validate_trakt_watchlist(self, values, is_movie): + def validate_trakt(self, values, trakt_type=None, is_movie=None): trakt_values = [] for value in values: try: - self.watchlist(value, is_movie) + if trakt_type == "watchlist" and is_movie is not None: + self.watchlist(value, is_movie) + elif trakt_type == "collection" and is_movie is not None: + self.get_collection(value, is_movie) + else: + self.standard_list(value) trakt_values.append(value) except Failed as e: logger.error(e) if len(trakt_values) == 0: - raise Failed(f"Trakt Error: No valid Trakt Watchlists in {values}") + if trakt_type == "watchlist" and is_movie is not None: + raise Failed(f"Trakt Error: No valid Trakt Watchlists in {values}") + elif trakt_type == "collection" and is_movie is not None: + raise Failed(f"Trakt Error: No valid Trakt Collections in {values}") + else: + raise Failed(f"Trakt Error: No valid Trakt Lists in {values}") return trakt_values def get_items(self, method, data, is_movie, status_message=True): @@ -151,6 +154,10 @@ class TraktAPI: movie_ids, show_ids = self.get_pagenation(method[6:], data, is_movie) if status_message: logger.info(f"Processing {pretty}: {data} {media_type}{'' if data == 1 else 's'}") + elif method == "trakt_collection": + movie_ids, show_ids = self.get_collection(data, is_movie) + if status_message: + logger.info(f"Processing {pretty} {media_type}s for {data}") else: show_ids = [] movie_ids = [] diff --git a/modules/util.py b/modules/util.py index 99e45c4c..4c032273 100644 --- a/modules/util.py +++ b/modules/util.py @@ -155,6 +155,7 @@ pretty_names = { "tmdb_writer": "TMDb Writer", "tmdb_writer_details": "TMDb Writer", "trakt_collected": "Trakt Collected", + "trakt_collection": "Trakt Collection", "trakt_list": "Trakt List", "trakt_list_details": "Trakt List", "trakt_popular": "Trakt Popular", @@ -296,6 +297,7 @@ all_lists = [ "tmdb_writer", "tmdb_writer_details", "trakt_collected", + "trakt_collection", "trakt_list", "trakt_list_details", "trakt_popular",