Esempio n. 1
0
 def update_metadata(self, metadata):
     songid = None
     if isinstance(metadata, dict):
         if self._metadata == metadata:
             return
         else:
             self._metadata = metadata
             self.metadata = mpris_decode(metadata)
     elif isinstance(metadata, str):
         if self.metadata_str == metadata:
             return
         else:
             self.metadata_str = metadata
             self.metadata = didl_decode(metadata)
             log.msg(self.metadata)
     else:
         log.err('Bad metadata format : %s' % metadata)
         return
     if 'songid' in self.metadata:
             if self.songid != int(self.metadata['songid']):
                 songid = int(self.metadata['songid'])
     if songid:
         self.songid = songid
         self.upnp_eventAV(int(self.songid), 'CurrentTrack')
         self.oh_eventPLAYLIST(int(self.songid), 'id')
         self.oh_eventTIME(1, 'trackcount')
     if 'duration' in self.metadata:
         if self._duration != self.metadata['duration']:
             duration = int(self.metadata['duration'])
             log.msg('duration: %d' % duration)
             if duration < 1:
                 self.upnp_duration = "0:00:00"
                 self._duration = 0
             else:
                 self._duration = duration
                 self.upnp_duration = mpristime_to_upnptime(duration)
             log.msg('track length: %s'
                     % self.upnp_duration, loglevel=logging.DEBUG)
             self.upnp_eventAV(self.upnp_duration,
                               'CurrentTrackDuration')
             self.oh_eventINFO(int(self._duration//1000000), 'duration')
             self.oh_eventTIME(int(self._duration//1000000), 'duration')
     if 'url' in self.metadata:
         if self._track_URI != self.metadata['url']:
             self._track_URI = self.metadata['url']
             self.upnp_eventAV(self._track_URI, 'AVTransportURI')
             self.oh_eventINFO(self._track_URI, 'uri')
             self.upnp_eventAV(self._track_URI, 'CurrentTrackURI')
     if 'mpris:artUrl' in self.metadata:
         url = self.parent.register_art_url(self.metadata['mpris:artUrl'])
         self.metadata['albumArtURI'] = url
     self.oh_eventINFO(self.metadata_str, 'metadata')
     self.upnp_eventAV(self.metadata_str, 'AVTransportURIMetaData')
Esempio n. 2
0
 def update_metadata(self, metadata):
     songid = None
     if isinstance(metadata, dict):
         if self._metadata == metadata:
             return
         else:
             self._metadata = metadata
             self.metadata = mpris_decode(metadata)
     elif isinstance(metadata, str):
         if self.metadata_str == metadata:
             return
         else:
             self.metadata_str = metadata
             self.metadata = didl_decode(metadata)
             log.msg(self.metadata)
     else:
         log.err('Bad metadata format : %s' % metadata)
         return
     if 'songid' in self.metadata:
         if self.songid != int(self.metadata['songid']):
             songid = int(self.metadata['songid'])
     if songid:
         self.songid = songid
         self.upnp_eventAV(int(self.songid), 'CurrentTrack')
         self.oh_eventPLAYLIST(int(self.songid), 'id')
         self.oh_eventTIME(1, 'trackcount')
     if 'duration' in self.metadata:
         if self._duration != self.metadata['duration']:
             duration = int(self.metadata['duration'])
             log.msg('duration: %d' % duration)
             if duration < 1:
                 self.upnp_duration = "0:00:00"
                 self._duration = 0
             else:
                 self._duration = duration
                 self.upnp_duration = mpristime_to_upnptime(duration)
             log.msg('track length: %s' % self.upnp_duration,
                     loglevel=logging.DEBUG)
             self.upnp_eventAV(self.upnp_duration, 'CurrentTrackDuration')
             self.oh_eventINFO(int(self._duration // 1000000), 'duration')
             self.oh_eventTIME(int(self._duration // 1000000), 'duration')
     if 'url' in self.metadata:
         if self._track_URI != self.metadata['url']:
             self._track_URI = self.metadata['url']
             self.upnp_eventAV(self._track_URI, 'AVTransportURI')
             self.oh_eventINFO(self._track_URI, 'uri')
             self.upnp_eventAV(self._track_URI, 'CurrentTrackURI')
     if 'mpris:artUrl' in self.metadata:
         url = self.parent.register_art_url(self.metadata['mpris:artUrl'])
         self.metadata['albumArtURI'] = url
     self.oh_eventINFO(self.metadata_str, 'metadata')
     self.upnp_eventAV(self.metadata_str, 'AVTransportURIMetaData')
Esempio n. 3
0
 def update_metadata(self, metadata):
     if metadata != self._metadata:
         self._metadata.update(metadata)
         self.metadata.update(mpris_decode(metadata))
         if 'mpris:length' in metadata.keys():
                 ln = int(metadata['mpris:length'])
                 if ln < 1:
                     self._track_duration = "0:00:00"
                 else:
                     self._track_duration = mpristime_to_upnptime(ln)
                 log.msg('track length: %s'
                         % self._track_duration, loglevel=logging.DEBUG)
         if 'xesam:url' in metadata.keys():
                 self._track_URI = metadata['xesam:url']
                 self.metadata_str = didl_encode(self.metadata)
Esempio n. 4
0
 def get_reltime(self, fmt='UPNP'):
     if self.timer is not None:
         s = self.timer.get()
         if (self._duration//1000000 - s) < 2:
             if not self._next:
                 log.msg('next!!')
                 self._next = True
                 reactor.callLater(3, self.next)  # @UndefinedVariable
         if fmt == 'UPNP':
             t = mpristime_to_upnptime(s)
         elif fmt == 'seconds':
             t = int(s)
         else:
             # msec
             t = s
     else:
         if fmt == 'UPNP':
             t = self.reltime
         else:
             t = self.seconds
     return t
Esempio n. 5
0
 def get_reltime(self, fmt='UPNP'):
     if self.timer is not None:
         s = self.timer.get()
         if (self._duration // 1000000 - s) < 2:
             if not self._next:
                 log.msg('next!!')
                 self._next = True
                 reactor.callLater(3, self.next)  # @UndefinedVariable
         if fmt == 'UPNP':
             t = mpristime_to_upnptime(s)
         elif fmt == 'seconds':
             t = int(s)
         else:
             # msec
             t = s
     else:
         if fmt == 'UPNP':
             t = self.reltime
         else:
             t = self.seconds
     return t
Esempio n. 6
0
    def update_metadata(self, metadata):

        if metadata == self._metadata:
            return
        self._metadata = metadata
        metadata = mpris_decode(metadata)
        songid = None
        if self.has_tracklist:
            if "mpris:trackid" in metadata:
                try:
                    if self.songid != self.numid[str(metadata["mpris:trackid"])]:
                        songid = self.numid[str(metadata["mpris:trackid"])]
                except KeyError:
                    if "url" in metadata:
                        self.maxsongid += 1
                        self.numid.update({self.maxsongid: str(metadata["mpris:trackid"])})
                        self.numid.update({str(metadata["mpris:trackid"]): self.maxsongid})
                        self.playlist.append(self.maxsongid)
            #                         if len(self.badlist) > 0:
            #                             songid = self.badlist.pop(0)
            #                             self.numid.update(
            #                                 {songid: str(metadata['mpris:trackid'])})
            #                             self.numid.update(
            #                                 {str(metadata['mpris:trackid']): songid})
            #                         else:
            #                             self.insert(
            #                                 metadata['url'], self.maxsongid, metadata)
            elif "songid" in metadata:
                if self.songid != int(metadata["songid"]):
                    songid = int(metadata["songid"])
        else:
            if "songid" in metadata:
                if self.songid != int(metadata["songid"]):
                    songid = int(metadata["songid"])
            else:
                if "url" in metadata:
                    for track in self._playlist:
                        if track[1] == metadata["url"]:
                            songid = track[0]
                            metadata.update(track[2])
                            break
                    else:
                        songid = self.maxsongid + 1
                        self.insert(metadata["url"], self.maxsongid, metadata)
        if songid:
            self.songid = songid
            self.metadata = {}
            self.upnp_eventAV(int(self.songid), "CurrentTrack")
            self.oh_eventPLAYLIST(int(self.songid), "id")
            self.oh_eventTIME(1, "trackcount")
        if "duration" in metadata:
            if self._duration != metadata["duration"]:
                duration = int(metadata["duration"])
                log.err("duration: %d" % duration)
                if duration < 1:
                    self._track_duration = "0:00:00"
                    self._duration = 0
                else:
                    self._duration = duration
                    self._track_duration = mpristime_to_upnptime(duration)
                log.msg("track length: %s" % self._track_duration, loglevel=logging.DEBUG)
                self.upnp_eventAV(self._track_duration, "CurrentTrackDuration")
                self.oh_eventINFO(int(self._duration // 1000000), "duration")
                self.oh_eventTIME(int(self._duration // 1000000), "duration")
        if "url" in metadata:
            if self._track_URI != metadata["url"]:
                self._track_URI = metadata["url"]
                self.upnp_eventAV(self._track_URI, "AVTransportURI")
                self.oh_eventINFO(self._track_URI, "uri")
                self.upnp_eventAV(self._track_URI, "CurrentTrackURI")
        if "mpris:artUrl" in metadata:
            url = self.parent.register_art_url(metadata["mpris:artUrl"])
            metadata["albumArtURI"] = url
        self.metadata.update(metadata)
        self.metadata_str = didl_encode(self.metadata)
        self.oh_eventINFO(self.metadata_str, "metadata")
        self.upnp_eventAV(self.metadata_str, "AVTransportURIMetaData")
Esempio n. 7
0
    def update_metadata(self, metadata):

        if metadata == self._metadata:
            return
        self._metadata = metadata
        metadata = mpris_decode(metadata)
        songid = None
        if self.has_tracklist:
            if 'mpris:trackid' in metadata:
                try:
                    if self.songid != self.numid[str(
                            metadata['mpris:trackid'])]:
                        songid = self.numid[str(metadata['mpris:trackid'])]
                except KeyError:
                    if 'url' in metadata:
                        self.maxsongid += 1
                        self.numid.update(
                            {self.maxsongid: str(metadata['mpris:trackid'])})
                        self.numid.update(
                            {str(metadata['mpris:trackid']): self.maxsongid})
                        self.playlist.append(self.maxsongid)
#                         if len(self.badlist) > 0:
#                             songid = self.badlist.pop(0)
#                             self.numid.update(
#                                 {songid: str(metadata['mpris:trackid'])})
#                             self.numid.update(
#                                 {str(metadata['mpris:trackid']): songid})
#                         else:
#                             self.insert(
#                                 metadata['url'], self.maxsongid, metadata)
            elif 'songid' in metadata:
                if self.songid != int(metadata['songid']):
                    songid = int(metadata['songid'])
        else:
            if 'songid' in metadata:
                if self.songid != int(metadata['songid']):
                    songid = int(metadata['songid'])
            else:
                if 'url' in metadata:
                    for track in self._playlist:
                        if track[1] == metadata['url']:
                            songid = track[0]
                            metadata.update(track[2])
                            break
                    else:
                        songid = self.maxsongid + 1
                        self.insert(metadata['url'], self.maxsongid, metadata)
        if songid:
            self.songid = songid
            self.metadata = {}
            self.upnp_eventAV(int(self.songid), 'CurrentTrack')
            self.oh_eventPLAYLIST(int(self.songid), 'id')
            self.oh_eventTIME(1, 'trackcount')
        if 'duration' in metadata:
            if self._duration != metadata['duration']:
                duration = int(metadata['duration'])
                log.err('duration: %d' % duration)
                if duration < 1:
                    self._track_duration = "0:00:00"
                    self._duration = 0
                else:
                    self._duration = duration
                    self._track_duration = mpristime_to_upnptime(duration)
                log.msg('track length: %s' % self._track_duration,
                        loglevel=logging.DEBUG)
                self.upnp_eventAV(self._track_duration, 'CurrentTrackDuration')
                self.oh_eventINFO(int(self._duration // 1000000), 'duration')
                self.oh_eventTIME(int(self._duration // 1000000), 'duration')
        if 'url' in metadata:
            if self._track_URI != metadata['url']:
                self._track_URI = metadata['url']
                self.upnp_eventAV(self._track_URI, 'AVTransportURI')
                self.oh_eventINFO(self._track_URI, 'uri')
                self.upnp_eventAV(self._track_URI, 'CurrentTrackURI')
        if 'mpris:artUrl' in metadata:
            url = self.parent.register_art_url(metadata['mpris:artUrl'])
            metadata['albumArtURI'] = url
        self.metadata.update(metadata)
        self.metadata_str = didl_encode(self.metadata)
        self.oh_eventINFO(self.metadata_str, 'metadata')
        self.upnp_eventAV(self.metadata_str, 'AVTransportURIMetaData')