Beispiel #1
0
        def generate_tracklist(tracks):
            if not isinstance(tracks, list):
                tracks = [tracks]
#             if len(self.badlist) > 0:
#                 for tr in self.badlist:
#                     tracks.append(self.numid[tr]['metadata'])
            tl = et.Element('TrackList')
            for track in tracks:
                log.err('track: %s' % track)
                track = mpris_decode(track)
                en = et.Element('Entry')
                i = et.Element('Id')
                try:
                    i.text = str(self.numid[track['mpris:trackid']])
                except:
                    i.text = str(track['songid'])
                en.append(i)
                uri = et.Element('Uri')
                uri.text = track['url'].decode('utf-8')
                en.append(uri)
                md = et.Element('Metadata')
                md.text = didl_encode(track)
                en.append(md)
                tl.append(en)
            return et.tostring(tl)
Beispiel #2
0
 def generate_tracklist(tracks):
     if not isinstance(tracks, list):
         tracks = [tracks]
     #             if len(self.badlist) > 0:
     #                 for tr in self.badlist:
     #                     tracks.append(self.numid[tr]['metadata'])
     tl = et.Element("TrackList")
     for track in tracks:
         log.err("track: %s" % track)
         track = mpris_decode(track)
         en = et.Element("Entry")
         i = et.Element("Id")
         try:
             i.text = str(self.numid[track["mpris:trackid"]])
         except:
             i.text = str(track["songid"])
         en.append(i)
         uri = et.Element("Uri")
         uri.text = track["url"].decode("utf-8")
         en.append(uri)
         md = et.Element("Metadata")
         md.text = didl_encode(track)
         en.append(md)
         tl.append(en)
     return et.tostring(tl)
Beispiel #3
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')
Beispiel #4
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')
Beispiel #5
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)
Beispiel #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")
Beispiel #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')