Merge pull request #1039 from adamcik/bug/923/duration-as-int-or-none
core: Correctly handle missing duration in seek.
This commit is contained in:
commit
0f21e7425e
@ -361,6 +361,9 @@ class PlaybackController(object):
|
|||||||
if not self.core.tracklist.tracks:
|
if not self.core.tracklist.tracks:
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
if self.current_track and self.current_track.length is None:
|
||||||
|
return False
|
||||||
|
|
||||||
if self.get_state() == PlaybackState.STOPPED:
|
if self.get_state() == PlaybackState.STOPPED:
|
||||||
self.play()
|
self.play()
|
||||||
|
|
||||||
|
|||||||
@ -325,7 +325,7 @@ class Track(ImmutableObject):
|
|||||||
:param date: track release date (YYYY or YYYY-MM-DD)
|
:param date: track release date (YYYY or YYYY-MM-DD)
|
||||||
:type date: string
|
:type date: string
|
||||||
:param length: track length in milliseconds
|
:param length: track length in milliseconds
|
||||||
:type length: integer
|
:type length: integer or :class:`None` if there is no duration
|
||||||
:param bitrate: bitrate in kbit/s
|
:param bitrate: bitrate in kbit/s
|
||||||
:type bitrate: integer
|
:type bitrate: integer
|
||||||
:param comment: track comment
|
:param comment: track comment
|
||||||
|
|||||||
@ -34,6 +34,8 @@ def track_to_mpd_format(track, position=None, stream_title=None):
|
|||||||
|
|
||||||
result = [
|
result = [
|
||||||
('file', track.uri or ''),
|
('file', track.uri or ''),
|
||||||
|
# TODO: only show length if not none, see:
|
||||||
|
# https://github.com/mopidy/mopidy/issues/923#issuecomment-79584110
|
||||||
('Time', track.length and (track.length // 1000) or 0),
|
('Time', track.length and (track.length // 1000) or 0),
|
||||||
('Artist', artists_to_mpd_format(track.artists)),
|
('Artist', artists_to_mpd_format(track.artists)),
|
||||||
('Title', track.name or ''),
|
('Title', track.name or ''),
|
||||||
|
|||||||
@ -38,6 +38,7 @@ class CorePlaybackTest(unittest.TestCase):
|
|||||||
Track(uri='dummy2:a', length=40000),
|
Track(uri='dummy2:a', length=40000),
|
||||||
Track(uri='dummy3:a', length=40000), # Unplayable
|
Track(uri='dummy3:a', length=40000), # Unplayable
|
||||||
Track(uri='dummy1:b', length=40000),
|
Track(uri='dummy1:b', length=40000),
|
||||||
|
Track(uri='dummy1:c', length=None), # No duration
|
||||||
]
|
]
|
||||||
|
|
||||||
self.core = core.Core(mixer=None, backends=[
|
self.core = core.Core(mixer=None, backends=[
|
||||||
@ -46,6 +47,7 @@ class CorePlaybackTest(unittest.TestCase):
|
|||||||
|
|
||||||
self.tl_tracks = self.core.tracklist.tl_tracks
|
self.tl_tracks = self.core.tracklist.tl_tracks
|
||||||
self.unplayable_tl_track = self.tl_tracks[2]
|
self.unplayable_tl_track = self.tl_tracks[2]
|
||||||
|
self.duration_less_tl_track = self.tl_tracks[4]
|
||||||
|
|
||||||
def test_get_current_tl_track_none(self):
|
def test_get_current_tl_track_none(self):
|
||||||
self.core.playback.set_current_tl_track(None)
|
self.core.playback.set_current_tl_track(None)
|
||||||
@ -478,6 +480,15 @@ class CorePlaybackTest(unittest.TestCase):
|
|||||||
self.assertFalse(self.playback1.seek.called)
|
self.assertFalse(self.playback1.seek.called)
|
||||||
self.assertFalse(self.playback2.seek.called)
|
self.assertFalse(self.playback2.seek.called)
|
||||||
|
|
||||||
|
def test_seek_fails_for_track_without_duration(self):
|
||||||
|
self.core.playback.current_tl_track = self.duration_less_tl_track
|
||||||
|
self.core.playback.state = core.PlaybackState.PLAYING
|
||||||
|
success = self.core.playback.seek(1000)
|
||||||
|
|
||||||
|
self.assertFalse(success)
|
||||||
|
self.assertFalse(self.playback1.seek.called)
|
||||||
|
self.assertFalse(self.playback2.seek.called)
|
||||||
|
|
||||||
def test_seek_play_stay_playing(self):
|
def test_seek_play_stay_playing(self):
|
||||||
self.core.playback.play(self.tl_tracks[0])
|
self.core.playback.play(self.tl_tracks[0])
|
||||||
self.core.playback.state = core.PlaybackState.PLAYING
|
self.core.playback.state = core.PlaybackState.PLAYING
|
||||||
|
|||||||
@ -34,6 +34,8 @@ class TrackMpdFormatTest(unittest.TestCase):
|
|||||||
mtime.undo_fake()
|
mtime.undo_fake()
|
||||||
|
|
||||||
def test_track_to_mpd_format_for_empty_track(self):
|
def test_track_to_mpd_format_for_empty_track(self):
|
||||||
|
# TODO: this is likely wrong, see:
|
||||||
|
# https://github.com/mopidy/mopidy/issues/923#issuecomment-79584110
|
||||||
result = translator.track_to_mpd_format(Track())
|
result = translator.track_to_mpd_format(Track())
|
||||||
self.assertIn(('file', ''), result)
|
self.assertIn(('file', ''), result)
|
||||||
self.assertIn(('Time', 0), result)
|
self.assertIn(('Time', 0), result)
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user