diff --git a/plexapi/base.py b/plexapi/base.py index 4e6d59d8b..5373d3a96 100644 --- a/plexapi/base.py +++ b/plexapi/base.py @@ -771,6 +771,30 @@ def iterParts(self): for part in item.parts: yield part + def videoStreams(self): + """ Returns a list of :class:`~plexapi.media.videoStream` objects for all MediaParts. """ + if self.isPartialObject(): + self.reload() + return sum((part.videoStreams() for part in self.iterParts()), []) + + def audioStreams(self): + """ Returns a list of :class:`~plexapi.media.AudioStream` objects for all MediaParts. """ + if self.isPartialObject(): + self.reload() + return sum((part.audioStreams() for part in self.iterParts()), []) + + def subtitleStreams(self): + """ Returns a list of :class:`~plexapi.media.SubtitleStream` objects for all MediaParts. """ + if self.isPartialObject(): + self.reload() + return sum((part.subtitleStreams() for part in self.iterParts()), []) + + def lyricStreams(self): + """ Returns a list of :class:`~plexapi.media.LyricStream` objects for all MediaParts. """ + if self.isPartialObject(): + self.reload() + return sum((part.lyricStreams() for part in self.iterParts()), []) + def play(self, client): """ Start playback on the specified client. diff --git a/plexapi/video.py b/plexapi/video.py index e95b12ffb..45eec1f8c 100644 --- a/plexapi/video.py +++ b/plexapi/video.py @@ -97,42 +97,6 @@ def _defaultSyncTitle(self): """ Returns str, default title for a new syncItem. """ return self.title - def videoStreams(self): - """ Returns a list of :class:`~plexapi.media.videoStream` objects for all MediaParts. """ - streams = [] - - if self.isPartialObject(): - self.reload() - - parts = self.iterParts() - for part in parts: - streams += part.videoStreams() - return streams - - def audioStreams(self): - """ Returns a list of :class:`~plexapi.media.AudioStream` objects for all MediaParts. """ - streams = [] - - if self.isPartialObject(): - self.reload() - - parts = self.iterParts() - for part in parts: - streams += part.audioStreams() - return streams - - def subtitleStreams(self): - """ Returns a list of :class:`~plexapi.media.SubtitleStream` objects for all MediaParts. """ - streams = [] - - if self.isPartialObject(): - self.reload() - - parts = self.iterParts() - for part in parts: - streams += part.subtitleStreams() - return streams - def uploadSubtitles(self, filepath): """ Upload Subtitle file for video. """ url = f'{self.key}/subtitles' diff --git a/tests/test_audio.py b/tests/test_audio.py index 0968ec8ee..8887423a8 100644 --- a/tests/test_audio.py +++ b/tests/test_audio.py @@ -394,6 +394,10 @@ def test_audio_Track_artist(album, artist): assert tracks[0].artist() == artist +def test_audio_Track_lyricStreams(track): + assert not track.lyricStreams() + + def test_audio_Track_mixins_images(track): test_mixins.attr_artUrl(track) test_mixins.attr_posterUrl(track)