Beispiel #1
0
 def __init__(self, conn):
     dbus.service.Object.__init__(self,
                                  conn=conn,
                                  object_path=LYRICS_OBJECT_PATH)
     self._db = lrcdb.LrcDb()
     self._config = osdlyrics.config.Config(conn)
     self._metadata = Metadata()
Beispiel #2
0
 def __init__(self, proxy, name, caps):
     super(HttpPlayer, self).__init__(proxy, name)
     self._status = STATUS_STOPPED
     self._caps = caps
     self._metadata = Metadata()
     self._last_ping = datetime.datetime.now()
     self._timer = osdlyrics.timer.Timer()
     self._cmds = []
Beispiel #3
0
 def do_track_changed(self, params):
     player = self.get_player(params['id'])
     status = params['status']
     del params['status']
     del params['id']
     metadata = Metadata(**params)
     player.do_update_track(metadata)
     player.do_update_status(status)
     return ''
Beispiel #4
0
 def _handle_currentsong(self, metadata):
     logging.debug('currentsong: %s', metadata)
     args = {}
     for key in ('title', 'artist', 'album'):
         if key in metadata:
             args[key] = metadata[key]
     if 'time' in metadata:
         args['length'] = int(metadata['time']) * 1000
     if 'track' in metadata:
         args['tracknum'] = int(metadata['track'].split('/')[0])
     self._metadata = Metadata(**args)
Beispiel #5
0
    def _handle_status(self, status):
        logging.debug('status\n%s', status)
        changes = set()
        for prop, handler in self.STATUS_CHANGE_MAP.items():
            if not prop in status:
                value = None
            else:
                funcname = handler[0]
                func = getattr(__builtin__, funcname) \
                    if not funcname.startswith('_') \
                    else getattr(self, funcname)
                value = func(status[prop])
            if value != getattr(self, '_' + prop):
                logging.debug('prop %s changed to %s', prop, value)
                setattr(self, '_' + prop, value)
                changes.add(handler[1])

        if 'track' in changes:
            if self._songid is None:
                self._metadata = Metadata()
            else:
                self._send_cmd(Cmds.CURRENTSONG, sync=True)

        if 'status' in changes:
            if self._state == STATUS_PAUSED:
                self._elapsed.pause()
            elif self._state == STATUS_PLAYING:
                self._elapsed.play()
            else:
                self._elapsed.stop()
        if self._state == STATUS_STOPPED:
            elapsed = 0
        else:
            elapsed = float(status['elapsed']) * 1000
        if self._elapsed.set_time(elapsed):
            changes.add('position')
        if not self._inited:
            # Initializing, do not emit the change signals
            changes = set()
        for change in changes:
            getattr(self, change + '_changed')()