From ac92069dd5a9e86e33bcf426b16891f702d1f095 Mon Sep 17 00:00:00 2001 From: ismailof Date: Mon, 6 Jun 2016 21:45:18 +0200 Subject: [PATCH 1/7] Add nextsong/nextsongid to mpd status --- mopidy/mpd/protocol/status.py | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) mode change 100644 => 100755 mopidy/mpd/protocol/status.py diff --git a/mopidy/mpd/protocol/status.py b/mopidy/mpd/protocol/status.py old mode 100644 new mode 100755 index 16e9d013..27ce59f4 --- a/mopidy/mpd/protocol/status.py +++ b/mopidy/mpd/protocol/status.py @@ -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.next_tlid() futures = { 'tracklist.length': context.core.tracklist.get_length(), @@ -185,6 +186,8 @@ 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(next_tlid.get()), 'playback.time_position': context.core.playback.get_time_position(), } pykka.get_all(futures.values()) @@ -199,10 +202,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))) @@ -247,6 +252,10 @@ def _status_single(futures): return int(futures['tracklist.single'].get()) +def _status_songpos(futures): + return futures['tracklist.index'].get() + + def _status_songid(futures): current_tl_track = futures['playback.current_tl_track'].get() if current_tl_track is not None: @@ -255,8 +264,12 @@ def _status_songid(futures): return _status_songpos(futures) -def _status_songpos(futures): - return futures['tracklist.index'].get() +def _status_nextsongpos(futures): + return futures['tracklist.next_index'].get() + + +def _status_nextsongid(futures): + return futures['tracklist.next_tlid'].get() def _status_state(futures): From a1c219e25d67af8b94e970296f1a1ff4ee04b431 Mon Sep 17 00:00:00 2001 From: ismailof Date: Mon, 6 Jun 2016 22:59:59 +0200 Subject: [PATCH 2/7] Add nextsong/nextsongid to mpd status --- mopidy/mpd/protocol/status.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mopidy/mpd/protocol/status.py b/mopidy/mpd/protocol/status.py index 27ce59f4..d4aeb36f 100755 --- a/mopidy/mpd/protocol/status.py +++ b/mopidy/mpd/protocol/status.py @@ -173,7 +173,7 @@ def status(context): decimal places for millisecond precision. """ tl_track = context.core.playback.get_current_tl_track() - next_tlid = context.core.tracklist.next_tlid() + next_tlid = context.core.tracklist.get_next_tlid() futures = { 'tracklist.length': context.core.tracklist.get_length(), @@ -187,7 +187,8 @@ def status(context): '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(next_tlid.get()), + '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()) From 19818d3f68a57d06d9251ba2371156878ef926f4 Mon Sep 17 00:00:00 2001 From: ismailof Date: Mon, 6 Jun 2016 23:20:13 +0200 Subject: [PATCH 3/7] Add MPD nextsong/nextsongid test case --- tests/mpd/test_status.py | 35 ++++++++++++++++++++++++----------- 1 file changed, 24 insertions(+), 11 deletions(-) mode change 100644 => 100755 tests/mpd/test_status.py diff --git a/tests/mpd/test_status.py b/tests/mpd/test_status.py old mode 100644 new mode 100755 index 25b8dd72..9450808c --- a/tests/mpd/test_status.py +++ b/tests/mpd/test_status.py @@ -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) From 6787a044fc9679440fb40e4d50fddad89b93346f Mon Sep 17 00:00:00 2001 From: ismailof Date: Mon, 6 Jun 2016 23:20:49 +0200 Subject: [PATCH 4/7] Add MPD nextsong/nextsongid test case --- mopidy/mpd/protocol/status.py | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/mopidy/mpd/protocol/status.py b/mopidy/mpd/protocol/status.py index d4aeb36f..3d76d35f 100755 --- a/mopidy/mpd/protocol/status.py +++ b/mopidy/mpd/protocol/status.py @@ -253,10 +253,6 @@ def _status_single(futures): return int(futures['tracklist.single'].get()) -def _status_songpos(futures): - return futures['tracklist.index'].get() - - def _status_songid(futures): current_tl_track = futures['playback.current_tl_track'].get() if current_tl_track is not None: @@ -265,14 +261,18 @@ def _status_songid(futures): return _status_songpos(futures) -def _status_nextsongpos(futures): - return futures['tracklist.next_index'].get() +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: From fc26b7304ce99db643ba09fac9368a23d9e93bdc Mon Sep 17 00:00:00 2001 From: ismailof Date: Mon, 6 Jun 2016 23:22:40 +0200 Subject: [PATCH 5/7] chmod correction --- mopidy/mpd/protocol/status.py | 0 tests/mpd/test_status.py | 0 2 files changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 mopidy/mpd/protocol/status.py mode change 100755 => 100644 tests/mpd/test_status.py diff --git a/mopidy/mpd/protocol/status.py b/mopidy/mpd/protocol/status.py old mode 100755 new mode 100644 diff --git a/tests/mpd/test_status.py b/tests/mpd/test_status.py old mode 100755 new mode 100644 From 95ac2714ffc3e585abb5acf56e885fe75814bdca Mon Sep 17 00:00:00 2001 From: ismailof Date: Sun, 26 Jun 2016 11:18:34 +0200 Subject: [PATCH 6/7] Add changelog entry --- docs/changelog.rst | 2 ++ 1 file changed, 2 insertions(+) mode change 100644 => 100755 docs/changelog.rst diff --git a/docs/changelog.rst b/docs/changelog.rst old mode 100644 new mode 100755 index e47ba9af..1411d347 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -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) =================== From 65498485fea09f6ef947160ad81a4f6d56462e69 Mon Sep 17 00:00:00 2001 From: ismailof Date: Sun, 26 Jun 2016 11:19:08 +0200 Subject: [PATCH 7/7] Add changelog entry --- docs/changelog.rst | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100755 => 100644 docs/changelog.rst diff --git a/docs/changelog.rst b/docs/changelog.rst old mode 100755 new mode 100644