Add 'play -1' support when playing
This commit is contained in:
parent
15c992e06a
commit
163ead53da
@ -19,7 +19,9 @@ No description yet.
|
||||
commands. This makes media library browsing in ncmpcpp work, though very
|
||||
slow due to all the meta data requests to Spotify.
|
||||
|
||||
- Add support for ``play "-1"``, which fixes resume in MPoD.
|
||||
- Add support for ``play "-1"`` when in playing or paused state, which fixes
|
||||
resume and addition of tracks to the current playlist while playing for the
|
||||
MPoD client.
|
||||
|
||||
- Settings:
|
||||
|
||||
|
||||
@ -134,6 +134,7 @@ def playid(frontend, cpid):
|
||||
|
||||
*Clarifications:*
|
||||
|
||||
- ``playid "-1"`` when playing is ignored.
|
||||
- ``playid "-1"`` when paused resumes playback.
|
||||
- ``playid "-1"`` when stopped with a current track starts playback at the
|
||||
current track.
|
||||
@ -141,15 +142,10 @@ def playid(frontend, cpid):
|
||||
replacement, starts playback at the first track.
|
||||
"""
|
||||
cpid = int(cpid)
|
||||
paused = (frontend.backend.playback.state ==
|
||||
frontend.backend.playback.PAUSED)
|
||||
if cpid == -1 and paused:
|
||||
return frontend.backend.playback.resume()
|
||||
if cpid == -1:
|
||||
return _play_minus_one(frontend)
|
||||
try:
|
||||
if cpid == -1:
|
||||
cp_track = _get_cp_track_for_play_minus_one(frontend)
|
||||
else:
|
||||
cp_track = frontend.backend.current_playlist.get(cpid=cpid)
|
||||
cp_track = frontend.backend.current_playlist.get(cpid=cpid)
|
||||
return frontend.backend.playback.play(cp_track)
|
||||
except LookupError:
|
||||
raise MpdNoExistError(u'No such song', command=u'playid')
|
||||
@ -166,6 +162,7 @@ def playpos(frontend, songpos):
|
||||
|
||||
*Clarifications:*
|
||||
|
||||
- ``playid "-1"`` when playing is ignored.
|
||||
- ``playid "-1"`` when paused resumes playback.
|
||||
- ``playid "-1"`` when stopped with a current track starts playback at the
|
||||
current track.
|
||||
@ -177,26 +174,27 @@ def playpos(frontend, songpos):
|
||||
- issues ``play 6`` without quotes around the argument.
|
||||
"""
|
||||
songpos = int(songpos)
|
||||
paused = (frontend.backend.playback.state ==
|
||||
frontend.backend.playback.PAUSED)
|
||||
if songpos == -1 and paused:
|
||||
return frontend.backend.playback.resume()
|
||||
if songpos == -1:
|
||||
return _play_minus_one(frontend)
|
||||
try:
|
||||
if songpos == -1:
|
||||
cp_track = _get_cp_track_for_play_minus_one(frontend)
|
||||
else:
|
||||
cp_track = frontend.backend.current_playlist.cp_tracks[songpos]
|
||||
cp_track = frontend.backend.current_playlist.cp_tracks[songpos]
|
||||
return frontend.backend.playback.play(cp_track)
|
||||
except IndexError:
|
||||
raise MpdArgError(u'Bad song index', command=u'play')
|
||||
|
||||
def _get_cp_track_for_play_minus_one(frontend):
|
||||
if not frontend.backend.current_playlist.cp_tracks:
|
||||
return # Fail silently
|
||||
cp_track = frontend.backend.playback.current_cp_track
|
||||
if cp_track is None:
|
||||
def _play_minus_one(frontend):
|
||||
if (frontend.backend.playback.state == frontend.backend.playback.PLAYING):
|
||||
return # Nothing to do
|
||||
elif (frontend.backend.playback.state == frontend.backend.playback.PAUSED):
|
||||
return frontend.backend.playback.resume()
|
||||
elif frontend.backend.playback.current_cp_track is not None:
|
||||
cp_track = frontend.backend.playback.current_cp_track
|
||||
return frontend.backend.playback.play(cp_track)
|
||||
elif frontend.backend.current_playlist.cp_tracks:
|
||||
cp_track = frontend.backend.current_playlist.cp_tracks[0]
|
||||
return cp_track
|
||||
return frontend.backend.playback.play(cp_track)
|
||||
else:
|
||||
return # Fail silently
|
||||
|
||||
@handle_pattern(r'^previous$')
|
||||
def previous(frontend):
|
||||
|
||||
@ -257,6 +257,16 @@ class PlaybackControlHandlerTest(unittest.TestCase):
|
||||
self.assertEqual(self.b.playback.STOPPED, self.b.playback.state)
|
||||
self.assertEqual(self.b.playback.current_track, None)
|
||||
|
||||
def test_play_minus_is_ignored_if_playing(self):
|
||||
self.b.current_playlist.append([Track(length=40000)])
|
||||
self.b.playback.seek(30000)
|
||||
self.assert_(self.b.playback.time_position >= 30000)
|
||||
self.assertEquals(self.b.playback.PLAYING, self.b.playback.state)
|
||||
result = self.h.handle_request(u'play "-1"')
|
||||
self.assert_(u'OK' in result)
|
||||
self.assertEqual(self.b.playback.PLAYING, self.b.playback.state)
|
||||
self.assert_(self.b.playback.time_position >= 30000)
|
||||
|
||||
def test_play_minus_one_resumes_if_paused(self):
|
||||
self.b.current_playlist.append([Track(length=40000)])
|
||||
self.b.playback.seek(30000)
|
||||
@ -302,6 +312,16 @@ class PlaybackControlHandlerTest(unittest.TestCase):
|
||||
self.assertEqual(self.b.playback.STOPPED, self.b.playback.state)
|
||||
self.assertEqual(self.b.playback.current_track, None)
|
||||
|
||||
def test_playid_minus_is_ignored_if_playing(self):
|
||||
self.b.current_playlist.append([Track(length=40000)])
|
||||
self.b.playback.seek(30000)
|
||||
self.assert_(self.b.playback.time_position >= 30000)
|
||||
self.assertEquals(self.b.playback.PLAYING, self.b.playback.state)
|
||||
result = self.h.handle_request(u'playid "-1"')
|
||||
self.assert_(u'OK' in result)
|
||||
self.assertEqual(self.b.playback.PLAYING, self.b.playback.state)
|
||||
self.assert_(self.b.playback.time_position >= 30000)
|
||||
|
||||
def test_playid_minus_one_resumes_if_paused(self):
|
||||
self.b.current_playlist.append([Track(length=40000)])
|
||||
self.b.playback.seek(30000)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user