@@ -83,6 +83,7 @@ class MediaInfoItemModel(BaseModel):
83
83
channel_vcn : Optional [str ] = None
84
84
parts : Optional [List [PartModel ]] = None
85
85
86
+
86
87
class MarkerModel (BaseModel ):
87
88
id : Optional [int ] = None
88
89
type : Optional [str ] = None
@@ -91,6 +92,7 @@ class MarkerModel(BaseModel):
91
92
first : Optional [bool ] = None
92
93
final : Optional [bool ] = None
93
94
95
+
94
96
class MetadataModel (BaseModel ):
95
97
media_type : Optional [str ] = None
96
98
section_id : Optional [str ] = None
@@ -146,6 +148,65 @@ class MetadataModel(BaseModel):
146
148
media_info : Optional [List [MediaInfoItemModel ]] = None
147
149
edition_title : Optional [str ] = None
148
150
markers : Optional [MarkerModel ] = None
151
+ slug : Optional [str ] = None
152
+ parent_slug : Optional [str ] = None
153
+ grandparent_slug : Optional [str ] = None
154
+
155
+ @property
156
+ def is_movie (self ) -> bool :
157
+ return self .media_type == "movie"
158
+
159
+ @property
160
+ def is_show (self ) -> bool :
161
+ return self .media_type == "show"
162
+
163
+ @property
164
+ def is_season (self ) -> bool :
165
+ return self .media_type == "season"
166
+
167
+ @property
168
+ def is_episode (self ) -> bool :
169
+ return self .media_type == "episode"
170
+
171
+ @property
172
+ def is_artist (self ) -> bool :
173
+ return self .media_type == "artist"
174
+
175
+ @property
176
+ def is_album (self ) -> bool :
177
+ return self .media_type == "album"
178
+
179
+ @property
180
+ def is_track (self ) -> bool :
181
+ return self .media_type == "track"
182
+
183
+ @property
184
+ def is_clip (self ) -> bool :
185
+ return self .media_type == "clip"
149
186
187
+ @property
188
+ def _plex_watch_url_slug (self ) -> str :
189
+ if any ([self .is_movie , self .is_show , self .is_artist , self .is_clip ]):
190
+ return self .slug
191
+ elif any ([self .is_season , self .is_album ]):
192
+ return self .parent_slug
193
+ elif any ([self .is_episode , self .is_track ]):
194
+ return self .grandparent_slug
195
+ return ""
150
196
197
+ @property
198
+ def _plex_watch_url_type (self ) -> str :
199
+ if self .is_movie :
200
+ return "movie"
201
+ elif any ([self .is_show , self .is_season , self .is_episode ]):
202
+ return "show"
203
+ else :
204
+ return ""
151
205
206
+ @property
207
+ def plex_watch_url (self ) -> str :
208
+ _prefix = self ._plex_watch_url_type
209
+ _slug = self ._plex_watch_url_slug
210
+ if not _prefix or not _slug :
211
+ return ""
212
+ return f"https://watch.plex.tv/{ _prefix } /{ _slug } "
0 commit comments