diff --git a/docs/changelog.rst b/docs/changelog.rst index 713ba215..6f642073 100644 --- a/docs/changelog.rst +++ b/docs/changelog.rst @@ -33,6 +33,9 @@ v0.20.0 (UNRELEASED) - Add :meth:`mopidy.core.LibraryController.get_images` for looking up images for any URI backends know about. (Fixes :issue:`973`) +- When seeking in paused state, do not change to playing state. (Fixed + :issue:`939`) + **Commands** - Make the ``mopidy`` command print a friendly error message if the diff --git a/mopidy/core/playback.py b/mopidy/core/playback.py index d4cdce0d..0d604d61 100644 --- a/mopidy/core/playback.py +++ b/mopidy/core/playback.py @@ -371,8 +371,6 @@ class PlaybackController(object): if self.get_state() == PlaybackState.STOPPED: self.play() - elif self.get_state() == PlaybackState.PAUSED: - self.resume() if time_position < 0: time_position = 0 diff --git a/tests/core/test_playback.py b/tests/core/test_playback.py index 40741e23..11d63e04 100644 --- a/tests/core/test_playback.py +++ b/tests/core/test_playback.py @@ -85,6 +85,25 @@ class CorePlaybackTest(unittest.TestCase): 'track_playback_started', tl_track=self.tl_tracks[0]), ]) + @mock.patch( + 'mopidy.core.playback.listener.CoreListener', spec=core.CoreListener) + def test_play_when_paused_emits_events(self, listener_mock): + self.core.playback.play(self.tl_tracks[0]) + self.core.playback.pause() + listener_mock.reset_mock() + + self.core.playback.play(self.tl_tracks[1]) + + self.assertListEqual( + listener_mock.send.mock_calls, + [ + mock.call( + 'playback_state_changed', + old_state='paused', new_state='playing'), + mock.call( + 'track_playback_started', tl_track=self.tl_tracks[1]), + ]) + @mock.patch( 'mopidy.core.playback.listener.CoreListener', spec=core.CoreListener) def test_play_when_playing_emits_events(self, listener_mock): @@ -389,6 +408,20 @@ class CorePlaybackTest(unittest.TestCase): self.assertFalse(self.playback1.seek.called) self.assertFalse(self.playback2.seek.called) + def test_seek_play_stay_playing(self): + self.core.playback.play(self.tl_tracks[0]) + self.core.playback.state = core.PlaybackState.PLAYING + self.core.playback.seek(1000) + + self.assertEqual(self.core.playback.state, core.PlaybackState.PLAYING) + + def test_seek_paused_stay_paused(self): + self.core.playback.play(self.tl_tracks[0]) + self.core.playback.state = core.PlaybackState.PAUSED + self.core.playback.seek(1000) + + self.assertEqual(self.core.playback.state, core.PlaybackState.PAUSED) + @mock.patch( 'mopidy.core.playback.listener.CoreListener', spec=core.CoreListener) def test_seek_emits_seeked_event(self, listener_mock): diff --git a/tests/local/test_playback.py b/tests/local/test_playback.py index 5f1ff525..3ccd8d8f 100644 --- a/tests/local/test_playback.py +++ b/tests/local/test_playback.py @@ -798,6 +798,7 @@ class LocalPlaybackProviderTest(unittest.TestCase): self.playback.pause() result = self.playback.seek(self.tracks[0].length - 1000) self.assert_(result, 'Seek return value was %s' % result) + self.assertEqual(self.playback.state, PlaybackState.PAUSED) @populate_tracklist def test_seek_when_paused_updates_position(self): @@ -808,13 +809,6 @@ class LocalPlaybackProviderTest(unittest.TestCase): position = self.playback.time_position self.assertGreaterEqual(position, length - 1010) - @populate_tracklist - def test_seek_when_paused_triggers_play(self): - self.playback.play() - self.playback.pause() - self.playback.seek(0) - self.assertEqual(self.playback.state, PlaybackState.PLAYING) - @unittest.SkipTest @populate_tracklist def test_seek_beyond_end_of_song(self):