mopidy/mopidy/backends/__init__.py
2010-02-07 20:57:18 +01:00

94 lines
2.2 KiB
Python

import logging
import random
import time
from mopidy.exceptions import MpdNotImplemented
from mopidy.models import Playlist
logger = logging.getLogger('backends.base')
class BaseBackend(object):
current_playlist = None
library = None
playback = None
stored_playlists = None
uri_handlers = []
class BaseCurrentPlaylistController(object):
def __init__(self, backend):
self.backend = backend
self.version = 0
self.playlist = Playlist()
def get_playlist(self):
return self._playlist
def set_playlist(self, playlist):
self._playlist = playlist
self.version += 1
playlist = property(get_playlist, set_playlist)
def add(self, uri, at_position=None):
raise NotImplementedError
def clear(self):
self.backend.playback.stop()
self.playlist = Playlist()
def load(self, playlist):
self.playlist = playlist
self.version = 0
def move(self, start, end, to_position):
tracks = self.playlist.tracks
if start == end:
end += 1
new_tracks = tracks[:start] + tracks[end:]
for track in tracks[start:end]:
new_tracks.insert(to_position, track)
to_position += 1
self.playlist = Playlist(tracks=new_tracks)
def remove(self, position):
tracks = self.playlist.tracks
del tracks[position]
self.playlist = Playlist(tracks=tracks)
def shuffle(self, start=None, end=None):
tracks = self.playlist.tracks
before = tracks[:start or 0]
shuffled = tracks[start:end]
after = tracks[end or len(tracks):]
random.shuffle(shuffled)
self.playlist = Playlist(tracks=before+shuffled+after)
class BasePlaybackController(object):
PAUSED = 'paused'
PLAYING = 'playing'
STOPPED = 'stopped'
state = STOPPED
def __init__(self, backend):
self.backend = backend
self.current_track = None
self.playlist_position = 0
def play(self, id=None, position=None):
raise NotImplementedError
def stop(self):
raise NotImplementedError
def next(self):
raise NotImplementedError