|
2 | 2 | import os |
3 | 3 | from urllib.parse import quote_plus, urlencode |
4 | 4 |
|
5 | | -from plexapi import library, media, utils |
| 5 | +from plexapi import media, utils |
6 | 6 | from plexapi.base import Playable, PlexPartialObject |
7 | 7 | from plexapi.exceptions import BadRequest |
8 | 8 | from plexapi.mixins import ( |
9 | | - AdvancedSettingsMixin, SplitMergeMixin, UnmatchMatchMixin, RatingMixin, |
| 9 | + AdvancedSettingsMixin, SplitMergeMixin, UnmatchMatchMixin, ExtrasMixin, HubsMixin, RatingMixin, |
10 | 10 | ArtUrlMixin, ArtMixin, BannerMixin, PosterUrlMixin, PosterMixin, ThemeUrlMixin, ThemeMixin, |
11 | 11 | ContentRatingMixin, OriginallyAvailableMixin, OriginalTitleMixin, SortTitleMixin, StudioMixin, |
12 | 12 | SummaryMixin, TaglineMixin, TitleMixin, |
@@ -267,7 +267,7 @@ def sync(self, videoQuality, client=None, clientId=None, limit=None, unwatched=F |
267 | 267 | @utils.registerPlexObject |
268 | 268 | class Movie( |
269 | 269 | Video, Playable, |
270 | | - AdvancedSettingsMixin, SplitMergeMixin, UnmatchMatchMixin, RatingMixin, |
| 270 | + AdvancedSettingsMixin, SplitMergeMixin, UnmatchMatchMixin, ExtrasMixin, HubsMixin, RatingMixin, |
271 | 271 | ArtMixin, PosterMixin, ThemeMixin, |
272 | 272 | ContentRatingMixin, OriginallyAvailableMixin, OriginalTitleMixin, SortTitleMixin, StudioMixin, |
273 | 273 | SummaryMixin, TaglineMixin, TitleMixin, |
@@ -377,21 +377,11 @@ def reviews(self): |
377 | 377 | data = self._server.query(self._details_key) |
378 | 378 | return self.findItems(data, media.Review, rtag='Video') |
379 | 379 |
|
380 | | - def extras(self): |
381 | | - """ Returns a list of :class:`~plexapi.video.Extra` objects. """ |
382 | | - data = self._server.query(self._details_key) |
383 | | - return self.findItems(data, Extra, rtag='Extras') |
384 | | - |
385 | | - def hubs(self): |
386 | | - """ Returns a list of :class:`~plexapi.library.Hub` objects. """ |
387 | | - data = self._server.query(self._details_key) |
388 | | - return self.findItems(data, library.Hub, rtag='Related') |
389 | | - |
390 | 380 |
|
391 | 381 | @utils.registerPlexObject |
392 | 382 | class Show( |
393 | 383 | Video, |
394 | | - AdvancedSettingsMixin, SplitMergeMixin, UnmatchMatchMixin, RatingMixin, |
| 384 | + AdvancedSettingsMixin, SplitMergeMixin, UnmatchMatchMixin, ExtrasMixin, HubsMixin, RatingMixin, |
395 | 385 | ArtMixin, BannerMixin, PosterMixin, ThemeMixin, |
396 | 386 | ContentRatingMixin, OriginallyAvailableMixin, OriginalTitleMixin, SortTitleMixin, StudioMixin, |
397 | 387 | SummaryMixin, TaglineMixin, TitleMixin, |
@@ -501,11 +491,6 @@ def isWatched(self): |
501 | 491 | """ Returns True if the show is fully watched. """ |
502 | 492 | return bool(self.viewedLeafCount == self.leafCount) |
503 | 493 |
|
504 | | - def hubs(self): |
505 | | - """ Returns a list of :class:`~plexapi.library.Hub` objects. """ |
506 | | - data = self._server.query(self._details_key) |
507 | | - return self.findItems(data, library.Hub, rtag='Related') |
508 | | - |
509 | 494 | def onDeck(self): |
510 | 495 | """ Returns show's On Deck :class:`~plexapi.video.Video` object or `None`. |
511 | 496 | If show is unwatched, return will likely be the first episode. |
@@ -594,7 +579,7 @@ def download(self, savepath=None, keep_original_name=False, subfolders=False, ** |
594 | 579 | @utils.registerPlexObject |
595 | 580 | class Season( |
596 | 581 | Video, |
597 | | - RatingMixin, |
| 582 | + ExtrasMixin, RatingMixin, |
598 | 583 | ArtMixin, PosterMixin, ThemeUrlMixin, |
599 | 584 | SummaryMixin, TitleMixin, |
600 | 585 | CollectionMixin, LabelMixin |
@@ -737,7 +722,7 @@ def _defaultSyncTitle(self): |
737 | 722 | @utils.registerPlexObject |
738 | 723 | class Episode( |
739 | 724 | Video, Playable, |
740 | | - RatingMixin, |
| 725 | + ExtrasMixin, RatingMixin, |
741 | 726 | ArtMixin, PosterMixin, ThemeUrlMixin, |
742 | 727 | ContentRatingMixin, OriginallyAvailableMixin, SortTitleMixin, SummaryMixin, TitleMixin, |
743 | 728 | CollectionMixin, DirectorMixin, LabelMixin, WriterMixin |
|
0 commit comments