Skip to content

Commit f7522af

Browse files
authored
Add lyricStreams() convenience method (#1303)
* Move videoStreams, audioStreams, lyricStreams to Playable * Add lyricStreams to Playable * Simplify returning list of streams * Add test for track.lyricStreams()
1 parent 46c20a5 commit f7522af

3 files changed

Lines changed: 28 additions & 36 deletions

File tree

plexapi/base.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -771,6 +771,30 @@ def iterParts(self):
771771
for part in item.parts:
772772
yield part
773773

774+
def videoStreams(self):
775+
""" Returns a list of :class:`~plexapi.media.videoStream` objects for all MediaParts. """
776+
if self.isPartialObject():
777+
self.reload()
778+
return sum((part.videoStreams() for part in self.iterParts()), [])
779+
780+
def audioStreams(self):
781+
""" Returns a list of :class:`~plexapi.media.AudioStream` objects for all MediaParts. """
782+
if self.isPartialObject():
783+
self.reload()
784+
return sum((part.audioStreams() for part in self.iterParts()), [])
785+
786+
def subtitleStreams(self):
787+
""" Returns a list of :class:`~plexapi.media.SubtitleStream` objects for all MediaParts. """
788+
if self.isPartialObject():
789+
self.reload()
790+
return sum((part.subtitleStreams() for part in self.iterParts()), [])
791+
792+
def lyricStreams(self):
793+
""" Returns a list of :class:`~plexapi.media.LyricStream` objects for all MediaParts. """
794+
if self.isPartialObject():
795+
self.reload()
796+
return sum((part.lyricStreams() for part in self.iterParts()), [])
797+
774798
def play(self, client):
775799
""" Start playback on the specified client.
776800

plexapi/video.py

Lines changed: 0 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -97,42 +97,6 @@ def _defaultSyncTitle(self):
9797
""" Returns str, default title for a new syncItem. """
9898
return self.title
9999

100-
def videoStreams(self):
101-
""" Returns a list of :class:`~plexapi.media.videoStream` objects for all MediaParts. """
102-
streams = []
103-
104-
if self.isPartialObject():
105-
self.reload()
106-
107-
parts = self.iterParts()
108-
for part in parts:
109-
streams += part.videoStreams()
110-
return streams
111-
112-
def audioStreams(self):
113-
""" Returns a list of :class:`~plexapi.media.AudioStream` objects for all MediaParts. """
114-
streams = []
115-
116-
if self.isPartialObject():
117-
self.reload()
118-
119-
parts = self.iterParts()
120-
for part in parts:
121-
streams += part.audioStreams()
122-
return streams
123-
124-
def subtitleStreams(self):
125-
""" Returns a list of :class:`~plexapi.media.SubtitleStream` objects for all MediaParts. """
126-
streams = []
127-
128-
if self.isPartialObject():
129-
self.reload()
130-
131-
parts = self.iterParts()
132-
for part in parts:
133-
streams += part.subtitleStreams()
134-
return streams
135-
136100
def uploadSubtitles(self, filepath):
137101
""" Upload Subtitle file for video. """
138102
url = f'{self.key}/subtitles'

tests/test_audio.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -394,6 +394,10 @@ def test_audio_Track_artist(album, artist):
394394
assert tracks[0].artist() == artist
395395

396396

397+
def test_audio_Track_lyricStreams(track):
398+
assert not track.lyricStreams()
399+
400+
397401
def test_audio_Track_mixins_images(track):
398402
test_mixins.attr_artUrl(track)
399403
test_mixins.attr_posterUrl(track)

0 commit comments

Comments
 (0)