Move most of the playback logic to BaseBackend

This commit is contained in:
Stein Magnus Jodal 2009-12-26 15:14:37 +01:00
parent 886376b5f8
commit fbbac0c635
3 changed files with 87 additions and 48 deletions

View File

@ -1,5 +1,7 @@
import time
from mopidy.exceptions import MpdNotImplemented
class BaseBackend(object):
PLAY = u'play'
PAUSE = u'pause'
@ -65,36 +67,72 @@ class BaseBackend(object):
# Control methods
def next(self):
pass
self.stop()
if self._next():
self.state = self.PLAY
self._play_time_accumulated = 0
self._play_start = int(time.time())
def _next(self):
raise MpdNotImplemented
def pause(self):
self.state = self.PAUSE
self._play_time_accumulated += int(time.time()) - self._play_start
if self.state == self.PLAY and self._pause():
self.state = self.PAUSE
self._play_time_accumulated += (
int(time.time()) - self._play_start)
def play(self):
self.state = self.PLAY
self._play_time_accumulated = 0
self._play_start = int(time.time())
def _pause(self):
raise MpdNotImplemented
def play_pos(self, songpos):
self.state = self.PLAY
self._play_time_accumulated = 0
self._play_start = int(time.time())
def play(self, songpos=None, songid=None):
if self.state == self.PAUSE and songpos is None and songid is None:
return self.resume()
self.stop()
if songpos is not None:
result = self._play_pos(songpos)
elif songid is not None:
result = self._play_id(songid)
else:
result = self._play()
if result:
self.state = self.PLAY
self._play_time_accumulated = 0
self._play_start = int(time.time())
def play_id(self, songid):
self.state = self.PLAY
self._play_time_accumulated = 0
self._play_start = int(time.time())
def _play(self):
raise MpdNotImplemented
def _play_id(self):
raise MpdNotImplemented
def _play_pos(self):
raise MpdNotImplemented
def previous(self):
pass
self.stop()
if self._previous():
self.state = self.PLAY
self._play_time_accumulated = 0
self._play_start = int(time.time())
def _previous(self):
raise MpdNotImplemented
def resume(self):
self.state = self.PLAY
self._play_start = int(time.time())
if self.state == self.PAUSE and self._resume():
self.state = self.PLAY
self._play_start = int(time.time())
def _resume(self):
raise MpdNotImplemented
def stop(self):
self.state = self.STOP
if self.state != self.STOP and self._stop():
self.state = self.STOP
def _stop(self):
raise MpdNotImplemented
# Current/single playlist methods
def playlist_changes_since(self, version):

View File

@ -112,43 +112,44 @@ class SpotifyBackend(BaseBackend):
# Control methods
def next(self):
def _next(self):
self._current_song_pos += 1
self.play()
def pause(self):
super(SpotifyBackend, self).pause()
self.spotify.pause()
def play(self):
if self.state == self.PAUSE:
return self.resume()
if self._current_track is not None:
super(SpotifyBackend, self).play()
self.spotify.play(self._current_track)
def play_pos(self, songpos):
super(SpotifyBackend, self).play_pos(songpos)
self._current_song_pos = songpos
self.spotify.play(self._current_track)
return True
def play_id(self, songid):
super(SpotifyBackend, self).play_id(songid)
def _pause(self):
self.spotify.pause()
return True
def _play(self):
if self._current_track is not None:
self.spotify.play(self._current_track)
return True
else:
return False
def _play_id(self, songid):
self._current_song_pos = songid # XXX
self.spotify.play(self._current_track)
return True
def previous(self):
def _play_pos(self, songpos):
self._current_song_pos = songpos
self.spotify.play(self._current_track)
return True
def _previous(self):
self._current_song_pos -= 1
self.play()
self.spotify.play(self._current_track)
return True
def resume(self):
super(SpotifyBackend, self).resume()
def _resume(self):
self.spotify.resume()
return True
def stop(self):
if self.state != self.STOP:
super(SpotifyBackend, self).stop()
self.spotify.stop()
def _stop(self):
self.spotify.stop()
return True
# Unsorted

View File

@ -236,11 +236,11 @@ class MpdHandler(object):
@register(r'^play "(?P<songpos>\d+)"$')
def _playpos(self, songpos):
return self.backend.play_pos(int(songpos))
return self.backend.play(songpos=int(songpos))
@register(r'^playid "(?P<songid>\d+)"$')
def _playid(self, songid):
return self.backend.play_id(int(songid))
return self.backend.play(songid=int(songid))
@register(r'^playlist$')
def _playlist(self):