From 365b4930e53b1fd75af13944c1e42874106b0cbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elan=20Ruusam=C3=A4e?= Date: Thu, 29 Feb 2024 20:02:26 +0200 Subject: [PATCH 1/5] Refactor to use PublicList class --- plextraktsync/trakt/TraktUserList.py | 22 ++++++++++------------ 1 file changed, 10 insertions(+), 12 deletions(-) diff --git a/plextraktsync/trakt/TraktUserList.py b/plextraktsync/trakt/TraktUserList.py index 92b7ff8fcbe..200acaf2f08 100644 --- a/plextraktsync/trakt/TraktUserList.py +++ b/plextraktsync/trakt/TraktUserList.py @@ -4,6 +4,8 @@ from itertools import count from typing import TYPE_CHECKING +from trakt.users import PublicList + from plextraktsync.factory import factory, logging from plextraktsync.trakt.types import TraktPlayable @@ -44,19 +46,15 @@ def items(self): self.description, self._items = self.load_items() return self._items + @staticmethod + def build_dict(pl: PublicList): + return {(f"{le.type}s", le.trakt): le.rank for le in pl} + def load_items(self): - from plextraktsync.trakt_list_util import LazyUserList - - userlist = LazyUserList._get(self.name, self.trakt_id) - list_items = userlist._items - prelist = [ - (elem[0], elem[1]) - for elem in list_items - if elem[0] in ["movies", "episodes"] - ] - self.logger.info(f"Downloaded Trakt list '{self.name}' ({len(list_items)} items): https://trakt.tv/lists/{self.trakt_id}") - - return userlist.description, dict(zip(prelist, count(1))) + pl = PublicList.load(self.trakt_id) + self.logger.info(f"Downloaded Trakt list '{pl.name}' ({len(pl)} items): {pl.share_link}") + + return pl.description, self.build_dict(pl) @classmethod def from_trakt_list(cls, name: str, items: list[TraktPlayable]): From fd47b970bc21bd219c3da247b9b1e652ae262df0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elan=20Ruusam=C3=A4e?= Date: Thu, 29 Feb 2024 23:38:21 +0200 Subject: [PATCH 2/5] Delete unused trakt_list_util.py --- plextraktsync/trakt_list_util.py | 25 ------------------------- 1 file changed, 25 deletions(-) delete mode 100644 plextraktsync/trakt_list_util.py diff --git a/plextraktsync/trakt_list_util.py b/plextraktsync/trakt_list_util.py deleted file mode 100644 index 815a085e2d7..00000000000 --- a/plextraktsync/trakt_list_util.py +++ /dev/null @@ -1,25 +0,0 @@ -from __future__ import annotations - -from trakt.core import get -from trakt.users import UserList - - -class LazyUserList(UserList): - @get - def get_items(self): - data = yield f"lists/{self.trakt}/items" - for item in data: - if "type" not in item: - continue - item_type = item["type"] - item_data = item.pop(item_type) - self._items.append((item_type + "s", item_data["ids"]["trakt"])) - yield self._items - - @classmethod - @get - def _get(cls, title, id): - data = yield f"lists/{id}" - ulist = cls(creator=data["user"]["username"], **data) - ulist.get_items() - yield ulist From 8179eb3ef559b3aa96c43dc8fb357a349c1e67fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elan=20Ruusam=C3=A4e?= Date: Thu, 29 Feb 2024 23:44:44 +0200 Subject: [PATCH 3/5] Update from_trakt_list as intended --- plextraktsync/trakt/TraktUserList.py | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/plextraktsync/trakt/TraktUserList.py b/plextraktsync/trakt/TraktUserList.py index 200acaf2f08..a1746634c93 100644 --- a/plextraktsync/trakt/TraktUserList.py +++ b/plextraktsync/trakt/TraktUserList.py @@ -57,10 +57,8 @@ def load_items(self): return pl.description, self.build_dict(pl) @classmethod - def from_trakt_list(cls, name: str, items: list[TraktPlayable]): - items = zip([(item.media_type, item.trakt) for item in items], count(1)) - - return cls(name=name, items=dict(items)) + def from_trakt_list(cls, list_id: int, list_name: str): + return cls(trakt_id=list_id, name=list_name) @classmethod def from_watchlist(cls, items: list[TraktPlayable]): From 14b80826353e937f5682a12a2ffc69b8cb25a8b8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elan=20Ruusam=C3=A4e?= Date: Thu, 29 Feb 2024 23:44:52 +0200 Subject: [PATCH 4/5] Use TraktUserList.from_trakt_list method --- plextraktsync/trakt/TraktUserListCollection.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plextraktsync/trakt/TraktUserListCollection.py b/plextraktsync/trakt/TraktUserListCollection.py index ba21a80b869..dd7c2a2657d 100644 --- a/plextraktsync/trakt/TraktUserListCollection.py +++ b/plextraktsync/trakt/TraktUserListCollection.py @@ -32,7 +32,7 @@ def add_watchlist(self, items: list[TraktPlayable]): return tl def add_list(self, list_id: int, list_name: str): - tl = TraktUserList(list_id, list_name) + tl = TraktUserList.from_trakt_list(list_id, list_name) self.append(tl) return tl From c151d496482e78daf1d574404800cbd001745cd0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Elan=20Ruusam=C3=A4e?= Date: Fri, 1 Mar 2024 00:41:11 +0200 Subject: [PATCH 5/5] Accept only movie and episode PublicList types --- plextraktsync/trakt/TraktUserList.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plextraktsync/trakt/TraktUserList.py b/plextraktsync/trakt/TraktUserList.py index a1746634c93..154f566ea26 100644 --- a/plextraktsync/trakt/TraktUserList.py +++ b/plextraktsync/trakt/TraktUserList.py @@ -48,7 +48,7 @@ def items(self): @staticmethod def build_dict(pl: PublicList): - return {(f"{le.type}s", le.trakt): le.rank for le in pl} + return {(f"{le.type}s", le.trakt): le.rank for le in pl if le.type in ["movie", "episode"]} def load_items(self): pl = PublicList.load(self.trakt_id)