Exemple #1
0
    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
Exemple #2
0
    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
Exemple #3
0
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)