forked from Taxel/PlexTraktSync
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathpytrakt_extensions.py
117 lines (98 loc) · 3.82 KB
/
pytrakt_extensions.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
from trakt.core import get
from trakt.tv import TVEpisode
@get
def get_liked_lists():
data = yield 'users/likes/lists'
retVal = []
for lst in data:
thisList = {}
thisList['listname'] = lst['list']['name']
thisList['username'] = lst['list']['user']['ids']['slug']
retVal.append(thisList)
yield retVal
@get
def lookup_table(show):
# returns all seasons and episodes with one single call
data = yield 'shows/{}/seasons?extended=episodes'.format(show.slug)
retVal = {}
for season in data:
eps = {}
if 'episodes' in season.keys():
for episode in season['episodes']:
eps[episode['number']] = LazyEpisode(show, season['number'], episode['number'], episode['ids'])
retVal[season['number']] = eps
yield retVal
class LazyEpisode():
def __init__(self, show, season, number, ids):
self.show = show
self.season = season
self.number = number
self.ids = ids
self._instance = None
@property
def instance(self):
if self._instance is None:
self._instance = TVEpisode(self.show, self.season, number=self.number, **self.ids)
return self._instance
@get
def watched(show_slug):
# returns a ShowProgress object containing the watched states of the passed show
data = yield 'shows/{}/progress/watched'.format(show_slug)
yield ShowProgress(**data)
@get
def collected(show_slug):
# returns a ShowProgress object containing the watched states of the passed show
data = yield 'shows/{}/progress/collection'.format(show_slug)
#print(data)
yield ShowProgress(**data)
class EpisodeProgress():
def __init__(self, number=0, aired=0, completed=False, last_watched_at=None, collected_at=None):
self.number = number
self.aired = aired
self.completed = completed
self.last_watched_at = last_watched_at
self.collected_at = collected_at
#print("Episode {} completed: {}".format(number, completed))
def get_completed(self):
return self.completed
class SeasonProgress():
def __init__(self, number=0, aired=0, completed=False, episodes=None):
self.number = number
self.aired = aired
self.episodes = {}
for episode in episodes:
prog = EpisodeProgress(**episode)
self.episodes[prog.number] = prog
self.completed = completed == len(episodes)
#print("Season {} completed: {}".format(number, self.completed))
def get_completed(self, episode):
if self.completed:
return True
elif episode not in self.episodes.keys():
return False
return self.episodes[episode].get_completed()
class ShowProgress():
def __init__(self, aired=0, completed=False, last_watched_at=None, reset_at=None, seasons=None, hidden_seasons=None, next_episode=0, last_episode=0, last_collected_at=None):
self.aired = aired
self.last_watched_at = last_watched_at
self.last_collected_at = last_collected_at
self.reset_at = reset_at
self.hidden_seasons = hidden_seasons
self.next_episode = next_episode
self.last_episode = last_episode
self.seasons = {}
allCompleted = True
for season in seasons:
prog = SeasonProgress(**season)
self.seasons[prog.number] = prog
allCompleted = allCompleted and prog.completed
self.completed = allCompleted if len(seasons) > 0 else False
#print("Series completed: {}".format(self.completed))
def get_completed(self, season, episode):
if self.completed:
return True
elif season not in self.seasons.keys():
return False
return self.seasons[season].get_completed(episode)
if __name__ == "__main__":
print(get_liked_lists())