def __init__(self): self.player = Player() self.playlist = Playlist() self.listenerRegistry = ListenerRegistry() self.infoListenerRegistry = ListenerRegistry() self.library = Library() self.player.onPush = self.onBufferReceived self.player.onStart = self.onPlaybackStarted self.player.onTrackFinished = self.onTrackFinished self.player.onStop = self.onPlayerStopped self.player.onTimerUpdate = self.onTimerUpdate self.playlist.onChanged = self.onPlaylistChange
def __init__(self): self.player = Player() self.playlist = Playlist() self.listenerRegistry = ListenerRegistry() self.infoListenerRegistry = ListenerRegistry() self.library = Library() self.scrobbler = getScrobbler() self.player.onPush = self.onBufferReceived self.player.onStart = self.onPlaybackStarted self.player.onTrackFinished = self.onTrackFinished self.player.onStop = self.onPlayerStopped self.player.onTimerUpdate = self.onTimerUpdate self.player.onPaused = self.onPlayerPaused self.playlist.onChanged = self.onPlaylistChange
class MainController(object): def __init__(self): self.player = Player() self.playlist = Playlist() self.listenerRegistry = ListenerRegistry() self.infoListenerRegistry = ListenerRegistry() self.library = Library() self.scrobbler = getScrobbler() self.player.onPush = self.onBufferReceived self.player.onStart = self.onPlaybackStarted self.player.onTrackFinished = self.onTrackFinished self.player.onStop = self.onPlayerStopped self.player.onTimerUpdate = self.onTimerUpdate self.player.onPaused = self.onPlayerPaused self.playlist.onChanged = self.onPlaylistChange def onStart(self): from txplaya.playlistregistry import playlistRegistry filepaths = playlistRegistry.loadPlaylist('__current__') for filepath in filepaths: if not self.library.pathExists(filepath): continue track = Track(filepath) self.playlist.insert(track) def onStop(self): from txplaya.playlistregistry import playlistRegistry paths = [track._path for track in self.playlist.iterTrack()] playlistRegistry.savePlaylist('__current__', paths) def announce(self, data): buf = (json.dumps(data) + '\n').encode('utf-8') for listener in self.infoListenerRegistry.iterListeners(): deferLater(reactor, 0, listener.onPush, buf) def onTrackFinished(self): if self.scrobbler is not None: deferLater(reactor, 0, self.scrobbler.scrobble, self.playlist.currentTrack) nextPosition = self.playlist.stepNext() if nextPosition is None: self.onPlaylistFinished() return self.onPlaybackStarted() self.player.feed(self.playlist.currentTrack, clear=False) self.player.start() def onPlaybackStarted(self): track = self.playlist.currentTrack if self.scrobbler is not None: deferLater(reactor, 0, self.scrobbler.updateNowPlaying, track) event = {'event': 'TrackStarted', 'data': {'position': self.playlist.currentPosition, 'track': track.meta}} self.announce(event) def onPlayerStopped(self): event = {'event': 'PlaybackFinished', 'data': {}} self.announce(event) def onPlayerPaused(self, paused): event = {'event': 'PlaybackPaused', 'data': {'paused': paused}} self.announce(event) def onPlaylistFinished(self): log.msg('Playlist finished') event = {'event': 'PlaybackFinished', 'data': {}} self.announce(event) self.player.history = deque() self.listenerRegistry.onPlaylistFinished() def onBufferReceived(self, buf): # deliver buffer to all listeners for listener in self.listenerRegistry.iterListeners(): _d = deferLater(reactor, 0, listener.onPush, buf) def onPlaylistChange(self): playlist = self.playlist playlistData = [track.meta for track in playlist.iterTrack()] event = {'event': 'PlaylistChanged', 'data': {'playlist': playlistData, 'hasUndo': playlist.hasUndo, 'hasRedo': playlist.hasRedo, 'position': playlist.currentPosition}} self.announce(event) def onTimerUpdate(self, percent): event = {'event': 'TimerUpdate', 'data': {'time': percent}} self.announce(event)