Merge pull request #1523 from ismailof/fix/1133-mpd-nextsongid
mpd: Add nextsong and nextsongid to mpd status command (Fixes #1133)
This commit is contained in:
commit
068800c699
@ -41,6 +41,8 @@ Bug fix release.
|
||||
- MPD: Fix MPD protocol for ``replay_gain_status`` command. The actual command
|
||||
remains unimplemented. (PR: :issue:`1520`)
|
||||
|
||||
- MPD: Add ``nextsong`` and ``nextsongid`` to the response of MPD ``status`` command.
|
||||
(Fixes: :issue:`1133` :issue:`1516`, PR: :issue:`1523`)
|
||||
|
||||
v2.0.0 (2016-02-15)
|
||||
===================
|
||||
|
||||
@ -173,6 +173,7 @@ def status(context):
|
||||
decimal places for millisecond precision.
|
||||
"""
|
||||
tl_track = context.core.playback.get_current_tl_track()
|
||||
next_tlid = context.core.tracklist.get_next_tlid()
|
||||
|
||||
futures = {
|
||||
'tracklist.length': context.core.tracklist.get_length(),
|
||||
@ -185,6 +186,9 @@ def status(context):
|
||||
'playback.state': context.core.playback.get_state(),
|
||||
'playback.current_tl_track': tl_track,
|
||||
'tracklist.index': context.core.tracklist.index(tl_track.get()),
|
||||
'tracklist.next_tlid': next_tlid,
|
||||
'tracklist.next_index': context.core.tracklist.index(
|
||||
tlid=next_tlid.get()),
|
||||
'playback.time_position': context.core.playback.get_time_position(),
|
||||
}
|
||||
pykka.get_all(futures.values())
|
||||
@ -199,10 +203,12 @@ def status(context):
|
||||
('xfade', _status_xfade(futures)),
|
||||
('state', _status_state(futures)),
|
||||
]
|
||||
# TODO: add nextsong and nextsongid
|
||||
if futures['playback.current_tl_track'].get() is not None:
|
||||
result.append(('song', _status_songpos(futures)))
|
||||
result.append(('songid', _status_songid(futures)))
|
||||
if futures['tracklist.next_tlid'].get() is not None:
|
||||
result.append(('nextsong', _status_nextsongpos(futures)))
|
||||
result.append(('nextsongid', _status_nextsongid(futures)))
|
||||
if futures['playback.state'].get() in (
|
||||
PlaybackState.PLAYING, PlaybackState.PAUSED):
|
||||
result.append(('time', _status_time(futures)))
|
||||
@ -259,6 +265,14 @@ def _status_songpos(futures):
|
||||
return futures['tracklist.index'].get()
|
||||
|
||||
|
||||
def _status_nextsongid(futures):
|
||||
return futures['tracklist.next_tlid'].get()
|
||||
|
||||
|
||||
def _status_nextsongpos(futures):
|
||||
return futures['tracklist.next_index'].get()
|
||||
|
||||
|
||||
def _status_state(futures):
|
||||
state = futures['playback.state'].get()
|
||||
if state == PlaybackState.PLAYING:
|
||||
|
||||
@ -48,9 +48,9 @@ class StatusHandlerTest(unittest.TestCase):
|
||||
def tearDown(self): # noqa: N802
|
||||
pykka.ActorRegistry.stop_all()
|
||||
|
||||
def set_tracklist(self, track):
|
||||
self.backend.library.dummy_library = [track]
|
||||
self.core.tracklist.add(uris=[track.uri]).get()
|
||||
def set_tracklist(self, tracks):
|
||||
self.backend.library.dummy_library = tracks
|
||||
self.core.tracklist.add(uris=[track.uri for track in tracks]).get()
|
||||
|
||||
def test_stats_method(self):
|
||||
result = status.stats(self.context)
|
||||
@ -154,22 +154,35 @@ class StatusHandlerTest(unittest.TestCase):
|
||||
self.assertEqual(result['state'], 'pause')
|
||||
|
||||
def test_status_method_when_playlist_loaded_contains_song(self):
|
||||
self.set_tracklist(Track(uri='dummy:/a'))
|
||||
|
||||
self.set_tracklist([Track(uri='dummy:/a')])
|
||||
self.core.playback.play().get()
|
||||
result = dict(status.status(self.context))
|
||||
self.assertIn('song', result)
|
||||
self.assertGreaterEqual(int(result['song']), 0)
|
||||
|
||||
def test_status_method_when_playlist_loaded_contains_tlid_as_songid(self):
|
||||
self.set_tracklist(Track(uri='dummy:/a'))
|
||||
self.set_tracklist([Track(uri='dummy:/a')])
|
||||
self.core.playback.play().get()
|
||||
result = dict(status.status(self.context))
|
||||
self.assertIn('songid', result)
|
||||
self.assertEqual(int(result['songid']), 1)
|
||||
|
||||
def test_status_method_when_playlist_loaded_contains_nextsong(self):
|
||||
self.set_tracklist([Track(uri='dummy:/a'), Track(uri='dummy:/b')])
|
||||
self.core.playback.play().get()
|
||||
result = dict(status.status(self.context))
|
||||
self.assertIn('nextsong', result)
|
||||
self.assertGreaterEqual(int(result['nextsong']), 0)
|
||||
|
||||
def test_status_method_when_playlist_loaded_contains_nextsongid(self):
|
||||
self.set_tracklist([Track(uri='dummy:/a'), Track(uri='dummy:/b')])
|
||||
self.core.playback.play().get()
|
||||
result = dict(status.status(self.context))
|
||||
self.assertIn('nextsongid', result)
|
||||
self.assertEqual(int(result['nextsongid']), 2)
|
||||
|
||||
def test_status_method_when_playing_contains_time_with_no_length(self):
|
||||
self.set_tracklist(Track(uri='dummy:/a', length=None))
|
||||
self.set_tracklist([Track(uri='dummy:/a', length=None)])
|
||||
self.core.playback.play().get()
|
||||
result = dict(status.status(self.context))
|
||||
self.assertIn('time', result)
|
||||
@ -179,7 +192,7 @@ class StatusHandlerTest(unittest.TestCase):
|
||||
self.assertLessEqual(position, total)
|
||||
|
||||
def test_status_method_when_playing_contains_time_with_length(self):
|
||||
self.set_tracklist(Track(uri='dummy:/a', length=10000))
|
||||
self.set_tracklist([Track(uri='dummy:/a', length=10000)])
|
||||
self.core.playback.play()
|
||||
result = dict(status.status(self.context))
|
||||
self.assertIn('time', result)
|
||||
@ -189,7 +202,7 @@ class StatusHandlerTest(unittest.TestCase):
|
||||
self.assertLessEqual(position, total)
|
||||
|
||||
def test_status_method_when_playing_contains_elapsed(self):
|
||||
self.set_tracklist(Track(uri='dummy:/a', length=60000))
|
||||
self.set_tracklist([Track(uri='dummy:/a', length=60000)])
|
||||
self.core.playback.play().get()
|
||||
self.core.playback.pause()
|
||||
self.core.playback.seek(59123)
|
||||
@ -198,7 +211,7 @@ class StatusHandlerTest(unittest.TestCase):
|
||||
self.assertEqual(result['elapsed'], '59.123')
|
||||
|
||||
def test_status_method_when_starting_playing_contains_elapsed_zero(self):
|
||||
self.set_tracklist(Track(uri='dummy:/a', length=10000))
|
||||
self.set_tracklist([Track(uri='dummy:/a', length=10000)])
|
||||
self.core.playback.play().get()
|
||||
self.core.playback.pause()
|
||||
result = dict(status.status(self.context))
|
||||
@ -206,7 +219,7 @@ class StatusHandlerTest(unittest.TestCase):
|
||||
self.assertEqual(result['elapsed'], '0.000')
|
||||
|
||||
def test_status_method_when_playing_contains_bitrate(self):
|
||||
self.set_tracklist(Track(uri='dummy:/a', bitrate=3200))
|
||||
self.set_tracklist([Track(uri='dummy:/a', bitrate=3200)])
|
||||
self.core.playback.play().get()
|
||||
result = dict(status.status(self.context))
|
||||
self.assertIn('bitrate', result)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user