Example #1
0
    def _resolve_video_items(self, result):
        def all_done(result_list):
            for __, (data, item) in result_list:
                tmp_list = []
                for stream_dict in get_streams_from_manifest(item.url, data):
                    video_item = PVideoResolved()
                    video_item.subs = item.subs
                    video_item.settings = item.settings.copy()
                    video_item.url = stream_dict['url']
                    video_item.quality = "%s b/s" % stream_dict['bandwidth']
                    video_item.bandwidth = int(stream_dict['bandwidth'])
                    if 'resolution' in stream_dict:
                        video_item.quality = stream_dict['resolution'].split(
                            'x')[1] + "p"
                    # TODO remove workaround of embedding
                    # quality in title in addons
                    video_item.name = name = item.name
                    quality = video_item.quality
                    if quality and quality not in name:
                        if "[???]" in name:
                            video_item.name = name.replace(
                                "[???]", "[%s]" % (quality))
                        else:
                            video_item.name = "[%s] %s" % (i.quality, i.name)
                    tmp_list.append(video_item)
                tmp_list.sort(key=operator.attrgetter('bandwidth'),
                              reverse=True)
                if tmp_list:
                    log.info("%s __resolve_video_items: found %d streams" %
                             (self, len(tmp_list)))
                    item_list.remove(item)
                    item_list.extend(tmp_list)
            return result

        def get_result(res, item):
            if isinstance(res, failure.Failure):
                log.error("%s _resolve_video_items: %s - %s" %
                          (self, item.url, res.value))
            else:
                log.debug("%s _resolve_video_items: %s - %dB" %
                          (self, item.url, len(res)))
            return res, item

        item_list, __, __ = result
        video_list = [
            i for i in item_list
            if isinstance(i, PVideoResolved) and is_hls_url(i.url)
        ]
        log.debug("%s _resolve_video_items: found %d resolvable video items" %
                  (self, len(video_list)))
        d_list = []
        for item in video_list:
            d = url_get_data_async(toString(item.url),
                                   headers=item.settings["extra-headers"],
                                   timeout=5)
            d.addBoth(get_result, item)
            d_list.append(d)
        return defer.DeferredList(d_list,
                                  consumeErrors=True).addCallback(all_done)
Example #2
0
    def _resolve_video_items(self, result):

        def all_done(result_list):
            for __, (data, item) in result_list:
                tmp_list = []
                for stream_dict in get_streams_from_manifest(item.url, data):
                    video_item = PVideoResolved()
                    video_item.subs = item.subs
                    video_item.settings = item.settings.copy()
                    video_item.url = stream_dict['url']
                    video_item.quality = "%s b/s"%stream_dict['bandwidth']
                    video_item.bandwidth = int(stream_dict['bandwidth'])
                    if 'resolution' in stream_dict:
                        video_item.quality = stream_dict['resolution'].split('x')[1] + "p"
                    # TODO remove workaround of embedding
                    # quality in title in addons
                    video_item.name = name = item.name
                    quality = video_item.quality
                    if quality and quality not in name:
                        if "[???]" in name:
                            video_item.name = name.replace("[???]","[%s]"%(quality))
                        else:
                            video_item.name = "[%s] %s"%(i.quality, i.name)
                    tmp_list.append(video_item)
                tmp_list.sort(key=operator.attrgetter('bandwidth'), reverse=True)
                if tmp_list:
                    log.info("%s __resolve_video_items: found %d streams"%(self, len(tmp_list)))
                    item_list.remove(item)
                    item_list.extend(tmp_list)
            return result

        def get_result(res, item):
            if isinstance(res, failure.Failure):
                log.error("%s _resolve_video_items: %s - %s"%(
                    self, item.url, res.value))
            else:
                log.debug("%s _resolve_video_items: %s - %dB"%(
                    self, item.url, len(res)))
            return res, item

        item_list,__,__ = result
        video_list = [i for i in item_list if isinstance(i, PVideoResolved) and is_hls_url(i.url)]
        log.debug("%s _resolve_video_items: found %d resolvable video items"%(self, len(video_list)))
        d_list = []
        for item in video_list:
            d = url_get_data_async(toString(item.url),
                    headers=item.settings["extra-headers"], timeout=5)
            d.addBoth(get_result, item)
            d_list.append(d)
        return defer.DeferredList(d_list, consumeErrors=True).addCallback(all_done)