Пример #1
0
 def on_metadata(self, value):
     print('Metadata: %s' % value)
     if value:
         if self.selected in self.tracks_info:
             info = update_trackinfo(didl_decode(value)[0])
             self.tracks_info.update({
                 self.selected:
                 Track(artist=info['artist'],
                       title=info['title'],
                       album=info['album'],
                       genre=info['genre'],
                       url=info['url'],
                       id=self.selected,
                       arturl=info['arturl'],
                       color=(.7, .7, .7, .8),
                       duration=(info['duration'] if 'duration'
                                 in info.keys() else '0:00:00'),
                       is_selected=False)
             })
             self.info = info['title']
             print('396: %s' % info['arturl'])
             self.bgimg = info['arturl']
             if self.pop:
                 self.popup.dismiss()
                 self.pop = False
         else:
             reactor.callLater(
                 2,  # @UndefinedVariable
                 self.on_metadata,
                 value)
Пример #2
0
def show(res):
    log.msg('result: %s' % res)
    print(dir(res))
    if res:
        for i, r in enumerate(res):
            print('%s --> %s' % (i, r))
        for item in didl_decode(res.Result):
            print(item)
    reactor.callLater(2, reactor.stop)  # @UndefinedVariable
Пример #3
0
def show(res):
    log.msg('result: %s' % res)
    print(dir(res))
    if res:
        for i, r in enumerate(res):
            print('%s --> %s' % (i, r))
        for item in didl_decode(res.Result):
            print(item)
    reactor.callLater(2, reactor.stop)  # @UndefinedVariable
Пример #4
0
 def insert_metadata(self, md):
     dic = didl_decode(md)
     #             log.err(dic)
     for i, tag in enumerate(dic.keys()):
         if tag.lower() in ('class', 'restricted', 'id', 'duration',
                            'parentid', 'protocolinfo', 'url', 'ownerudn'):
             continue
         if not isinstance(dic[tag], str):
             continue
         reactor.callLater(  # @UndefinedVariable
             float(i) / 2, self.call, ' '.join(
                 ('sticker', 'set song', dic['url'].join('"' * 2), tag,
                  '"' + dic[tag] + '"')))
Пример #5
0
 def set_track_URI(self, uri, md=''):
     log.debug("set track uri : %s " % uri)
     try:
         log.debug("current uri : %s " % self._track_URI)
     except:
         pass
     if uri != self._track_URI:
         self._track_URI = uri
         self.metadata_str = md
         self.set_metadata(didl_decode(md.encode('utf-8')))
         d = self.call('addid', uri)
         d.addCallback(self.set_songid)
         d.addCallback(self.play)
Пример #6
0
 def set_track_URI(self, uri, md=''):
     log.debug("set track uri : %s " % uri)
     try:
         log.debug("current uri : %s " % self._track_URI)
     except:
         pass
     if uri != self._track_URI:
         self._track_URI = uri
         self.metadata_str = md
         self.set_metadata(didl_decode(md.encode('utf-8')))
         d = self.call('addid', uri)
         d.addCallback(self.set_songid)
         d.addCallback(self.play)
Пример #7
0
    def insert_metadata(self, md):
        dic = didl_decode(md)
#             log.err(dic)
        for i, tag in enumerate(dic.keys()):
            if tag.lower() in ('class', 'restricted', 'id', 'duration',
                               'parentid', 'protocolinfo', 'url',
                               'ownerudn'):
                continue
            if not isinstance(dic[tag], str):
                continue
            reactor.callLater(  # @UndefinedVariable
                float(i) / 2,
                self.call,
                ' '.join(('sticker',
                          'set song',
                          dic['url'].join('"' * 2),
                          tag,
                          '"' + dic[tag] + '"')))
Пример #8
0
def get_titles(res):
    t = []
    if res.Result:
        for r in didl_decode(res.Result.encode('utf-8')):
            if 'object.container' in r['class']:
                if 'childCount' in r:
                    if int(r['childCount']) < 1:
                        continue
#                 browsable = True
                node = TreeViewLabel(
                    text=r['title'][:32],
                    id=r['id'])
                node.browsable = True
                node.populated = False
            else:
                img = None
                if 'albumArtURI' in r:
                    if 'text' in r['albumArtURI']:
                        img = r['albumArtURI']['text']
                if not img:
                    if 'res1' in r:
                        if 'image' in r['res1']['protocolInfo']:
                            img = r['res1']['text']
                if not img:
                    if 'video' in r['class']:
                        img = 'data/icons/movie.png'
                    elif 'audio' in r['class']:
                        img = 'data/icons/audio.png'
                    else:
                        img = 'data/icons/icon.png'
                node = TreeViewMedia(
                    text=r['title'][:32])
                node.img = img
                node.url = r['url']
                node.metadata = r['metadata']
                node.browsable = False
                node.populated = True
            t.append(node)
    return t
Пример #9
0
def get_titles(res):
    t = []
    if res.Result:
        for r in didl_decode(res.Result.encode('utf-8')):
            if 'object.container' in r['class']:
                if 'childCount' in r:
                    if int(r['childCount']) < 1:
                        continue


#                 browsable = True
                node = TreeViewLabel(text=r['title'][:32], id=r['id'])
                node.browsable = True
                node.populated = False
            else:
                img = None
                if 'albumArtURI' in r:
                    if 'text' in r['albumArtURI']:
                        img = r['albumArtURI']['text']
                if not img:
                    if 'res1' in r:
                        if 'image' in r['res1']['protocolInfo']:
                            img = r['res1']['text']
                if not img:
                    if 'video' in r['class']:
                        img = 'data/icons/movie.png'
                    elif 'audio' in r['class']:
                        img = 'data/icons/audio.png'
                    else:
                        img = 'data/icons/icon.png'
                node = TreeViewMedia(text=r['title'][:32])
                node.img = img
                node.url = r['url']
                node.metadata = r['metadata']
                node.browsable = False
                node.populated = True
            t.append(node)
    return t
Пример #10
0
 def on_metadata(self, value):
     print('Metadata: %s' % value)
     if value:
         if self.selected in self.tracks_info:
             info = update_trackinfo(didl_decode(value)[0])
             self.tracks_info.update({self.selected: Track(
                 artist=info['artist'], title=info['title'],
                 album=info['album'], genre=info['genre'],
                 url=info['url'], id=self.selected, arturl=info['arturl'],
                 color=(.7, .7, .7, .8),
                 duration=(info['duration'] if 'duration' in info.keys()
                           else '0:00:00'),
                 is_selected=False)})
             self.info = info['title']
             print('396: %s' % info['arturl'])
             self.bgimg = info['arturl']
             if self.pop:
                 self.popup.dismiss()
                 self.pop = False
         else:
             reactor.callLater(2,  # @UndefinedVariable
                               self.on_metadata,
                               value)
Пример #11
0
        def got_info(res, tracks):
            #             print('res from server')

            if isinstance(tracks, int):
                #                 print(res.Metadata)
                info = didl_decode(res.Metadata)
                if len(info) > 1:
                    print('bad response')
                    return
                info = info[0]
                #                 print(info)
                info = update_trackinfo(info)
                if tracks in self.tracks_info:
                    col = self.tracks_info[tracks].color
                else:
                    col = (.5, .5, .5, .5)
                self.tracks_info.update({
                    tracks:
                    Track(artist=info['artist'],
                          title=info['title'],
                          album=info['album'],
                          genre=info['genre'],
                          url=info['url'],
                          id=tracks,
                          arturl=info['arturl'],
                          color=col,
                          duration=info['duration'],
                          is_selected=False)
                })
                if tracks == self.selected:
                    self.info = info['title']
                    print('593: %s' % info['arturl'])
                    self.bgimg = info['arturl']
            else:
                #                 print(res)
                #                 print(res.decode('utf-8'))
                #                 root = et.XML(res.decode('utf-8'))
                try:
                    root = et.fromstring(res)
                except Exception as e:
                    print('bad data from server %s' % e)
                    root = et.fromstring(res.encode('utf-8', errors='ignore'))
                dic = XmlDictConfig(root)
                #                 print(dic)
                try:
                    tl = dic['Entry']
                except KeyError:
                    print('bad response from renderer: %s' % res)
                else:
                    if len(tl) != len(tracks):
                        print('server returned %d result instead of %d' %
                              (len(tl), len(tracks)))
                    for track in tl:
                        Id = int(track['Id'])
                        info = didl_decode(
                            track['Metadata'].encode('utf-8'))[0]
                        info = update_trackinfo(info)
                        #                         print(info)
                        if Id in self.tracks_info:
                            col = self.tracks_info[Id].color
                        else:
                            col = (.5, .5, .5, .5)
                        self.tracks_info.update({
                            Id:
                            Track(artist=info['artist'],
                                  title=info['title'],
                                  album=info['album'],
                                  genre=info['genre'],
                                  url=info['url'],
                                  id=Id,
                                  arturl=info['arturl'],
                                  color=col,
                                  duration=(info['duration'] if 'duration'
                                            in info else '00:00:00'),
                                  is_selected=False)
                        })
                        if Id == self.selected:
                            self.info = info['title']
                            self.bgimg = info['arturl']
#                         self.lasttrack = Id
                if self.pop:
                    self.popup.dismiss()
                    self.pop = False
Пример #12
0
        def got_info(res, tracks):
            #             print('res from server')

            if isinstance(tracks, int):
                #                 print(res.Metadata)
                info = didl_decode(res.Metadata)
                if len(info) > 1:
                    print('bad response')
                    return
                info = info[0]
#                 print(info)
                info = update_trackinfo(info)
                if tracks in self.tracks_info:
                    col = self.tracks_info[tracks].color
                else:
                    col = (.5, .5, .5, .5)
                self.tracks_info.update({tracks: Track(
                    artist=info['artist'], title=info['title'],
                    album=info['album'], genre=info['genre'],
                    url=info['url'], id=tracks, arturl=info['arturl'],
                    color=col, duration=info['duration'],
                    is_selected=False)})
                if tracks == self.selected:
                    self.info = info['title']
                    print('593: %s' % info['arturl'])
                    self.bgimg = info['arturl']
            else:
                #                 print(res)
                #                 print(res.decode('utf-8'))
                #                 root = et.XML(res.decode('utf-8'))
                try:
                    root = et.fromstring(res)
                except Exception as e:
                    print('bad data from server %s' % e)
                    root = et.fromstring(res.encode('utf-8', errors='ignore'))
                dic = XmlDictConfig(root)
#                 print(dic)
                try:
                    tl = dic['Entry']
                except KeyError:
                    print('bad response from renderer: %s' % res)
                else:
                    if len(tl) != len(tracks):
                        print(
                            'server returned %d result instead of %d'
                            % (len(tl), len(tracks)))
                    for track in tl:
                        Id = int(track['Id'])
                        info = didl_decode(
                            track['Metadata'].encode('utf-8'))[0]
                        info = update_trackinfo(info)
#                         print(info)
                        if Id in self.tracks_info:
                            col = self.tracks_info[Id].color
                        else:
                            col = (.5, .5, .5, .5)
                        self.tracks_info.update({Id: Track(
                            artist=info['artist'], title=info['title'],
                            album=info['album'], genre=info['genre'],
                            url=info['url'], id=Id, arturl=info['arturl'],
                            color=col, duration=(
                                info['duration'] if 'duration' in info
                                else '00:00:00'),
                            is_selected=False)})
                        if Id == self.selected:
                            self.info = info['title']
                            self.bgimg = info['arturl']
#                         self.lasttrack = Id
                if self.pop:
                    self.popup.dismiss()
                    self.pop = False