diff --git a/mopidy/backends/__init__.py b/mopidy/backends/__init__.py index bbb85598..44d82545 100644 --- a/mopidy/backends/__init__.py +++ b/mopidy/backends/__init__.py @@ -377,7 +377,7 @@ class BasePlaybackController(object): """ The previous :class:`mopidy.models.Track` in the playlist. - For normal playback this is the next track in the playlist. If random + For normal playback this is the previous track in the playlist. If random and/or consume is enabled it should return the current track instead. """ if self.repeat or self.consume or self.random: @@ -386,11 +386,8 @@ class BasePlaybackController(object): if self.current_track is None or self.playlist_position == 0: return None - try: - return self.backend.current_playlist.playlist.tracks[ - self.playlist_position - 1] - except IndexError: - return None + return self.backend.current_playlist.playlist.tracks[ + self.playlist_position - 1] @property def state(self): diff --git a/mopidy/backends/gstreamer.py b/mopidy/backends/gstreamer.py index ffa72cc8..e39593af 100644 --- a/mopidy/backends/gstreamer.py +++ b/mopidy/backends/gstreamer.py @@ -3,11 +3,13 @@ gobject.threads_init() # FIXME make sure we don't get hit by # http://jameswestby.net/weblog/tech/14-caution-python-multiprocessing-and-glib-dont-mix.html +import pygst +pygst.require('0.10') + import gst import logging import threading -from mopidy.models import Track, Playlist from mopidy.backends import (BaseBackend, BasePlaybackController, BaseCurrentPlaylistController) @@ -91,7 +93,7 @@ class GStreamerPlaybackController(BasePlaybackController): try: return self._bin.query_position(gst.FORMAT_TIME)[0] // gst.MSECOND except gst.QueryError, e: - logger.error('time_position failed: %s',e ) + logger.error('time_position failed: %s', e) return 0 def destroy(self): diff --git a/tests/backends/gstreamer_test.py b/tests/backends/gstreamer_test.py index 1836fb46..6672dd96 100644 --- a/tests/backends/gstreamer_test.py +++ b/tests/backends/gstreamer_test.py @@ -10,7 +10,7 @@ from tests.backends.base import (BasePlaybackControllerTest, folder = os.path.dirname(__file__) folder = os.path.join(folder, '..', 'data') folder = os.path.abspath(folder) -song = os.path.join(folder, 'song%s.mp3') +song = os.path.join(folder, 'song%s.wav') song = 'file://' + song # FIXME can be switched to generic test @@ -24,3 +24,23 @@ class GStreamerPlaybackControllerTest(BasePlaybackControllerTest, unittest.TestCase): tracks = [Track(uri=song % i, id=i, length=4464) for i in range(1, 4)] backend_class = GStreamerBackend + + def add_track(self, file): + uri = 'file://' + os.path.join(folder, file) + track = Track(uri=uri, id=1, length=4464) + self.backend.current_playlist.add(track) + + def test_play_mp3(self): + self.add_track('blank.mp3') + self.playback.play() + self.assertEqual(self.playback.state, self.playback.PLAYING) + + def test_play_ogg(self): + self.add_track('blank.ogg') + self.playback.play() + self.assertEqual(self.playback.state, self.playback.PLAYING) + + def test_play_flac(self): + self.add_track('blank.flac') + self.playback.play() + self.assertEqual(self.playback.state, self.playback.PLAYING)