def _update_window_properties(self, source):
        debrid_provider = source.get("debrid_provider", "None").replace("_", " ")
        if "size" in source and source["size"] != "Variable":
            self.setProperty("source_size", tools.source_size_display(source["size"]))

        self.setProperty("release_title", source["release_title"])
        self.setProperty("debrid_provider", debrid_provider)
        self.setProperty("source_provider", source["provider"])
        self.setProperty("source_resolution", source["quality"])
        self.setProperty("source_info", " ".join(source["info"] + [tools.source_size_display(source["size"])]))
        self.setProperty("source_type", source["type"])
Example #2
0
    def onInit(self):
        super(ManualCacheWindow, self).onInit()
        self.display_list = self.getControlList(1000)
        self.display_list.reset()
        # self.sources = sorted(self.sources, key=lambda x: int(x['seeds']), reverse=True)
        for idx, i in enumerate(self.sources):
            menu_item = xbmcgui.ListItem(label='{}'.format(i['release_title']))
            for info in i.keys():
                try:
                    value = i[info]
                    if isinstance(value, list):
                        value = ' '.join(sorted([g.UNICODE(k) for k in value]))
                    if info == 'size':
                        value = tools.source_size_display(value)
                    menu_item.setProperty(info,
                                          g.UNICODE(value).replace('_', ' '))
                except UnicodeEncodeError:
                    menu_item.setProperty(info, i[info])

            struct_info = source_utils.info_list_to_dict(i.get('info', []))
            for property in struct_info.keys():
                menu_item.setProperty('info.{}'.format(property),
                                      struct_info[property])

            self.display_list.addItem(menu_item)

        self.setFocusId(1000)
Example #3
0
    def onInit(self):
        self.display_list = self.getControl(1000)
        menu_items = []

        for idx, i in enumerate(self.sources):
            menu_item = tools.menuItem(label=('%s) %s' %
                                              (idx + 1, i['release_title'])))
            for info in i.keys():
                try:
                    tools.log(i)
                    tools.log(info)
                    value = i[info]
                    if type(value) == list:
                        value = [str(k) for k in value]
                        value = ' '.join(sorted(value))
                    if info == 'size':
                        value = tools.source_size_display(value)
                    if info == 'type' and i.get(info) == 'hoster':
                        menu_item.setProperty('provider',
                                              str(value).replace('_', ' '))
                    menu_item.setProperty(info, str(value).replace('_', ' '))
                except UnicodeEncodeError:
                    menu_item.setProperty(info, i[info])
            menu_items.append(menu_item)
            self.display_list.addItem(menu_item)

        self.setFocusId(1000)
Example #4
0
    def onInit(self):
        """
        Callback method for Kodi
        :return: None
        """
        self.display_list = self.getControlList(1000)
        self.display_list.reset()
        for idx, i in enumerate(self.sources):
            menu_item = self.get_list_item_with_properties(
                self.item_information, i['release_title'])
            for info in i.keys():
                try:
                    value = i[info]
                    if isinstance(value, list):
                        value = [str(k) for k in value]
                        value = ' '.join(sorted(value))
                    if info == 'size' and value != 'Variable':
                        value = tools.source_size_display(value)
                    menu_item.setProperty(info, str(value).replace('_', ' '))
                except UnicodeEncodeError:
                    menu_item.setProperty(info, i[info])

            struct_info = source_utils.info_list_to_dict(i.get('info', []))
            for prop in struct_info.keys():
                menu_item.setProperty('info.{}'.format(prop),
                                      struct_info[prop])

            self.display_list.addItem(menu_item)

        self.setFocusId(1000)
    def onInit(self):
        self.display_list = self.getControl(1000)
        menu_items = []

        for idx, i in enumerate(self.sources):
            menu_item = tools.menuItem(label='%s' % i['release_title'])
            for info in i.keys():
                try:
                    value = i[info]
                    if type(value) == list:
                        value = [str(k) for k in value]
                        value = ' '.join(sorted(value))
                    if info == 'size':
                        value = tools.source_size_display(value)
                    menu_item.setProperty(info, str(value).replace('_', ' '))
                except UnicodeEncodeError:
                    menu_item.setProperty(info, i[info])

            struct_info = source_utils.info_list_to_sorted_dict(i.get('info', []))
            for property in struct_info.keys():
                menu_item.setProperty('info.{}'.format(property), struct_info[property])

            menu_items.append(menu_item)
            self.display_list.addItem(menu_item)

        self.setFocusId(1000)
Example #6
0
    def doModal(self, sources, args, pack_select):

        if tools.getSetting('general.tempSilent') == 'true':
            self.silent = True

        self.sources = sources
        self.args = args
        self.pack_select = pack_select
        self.setProperty(
            'release_title',
            tools.display_string(self.sources[0]['release_title']))
        self.setProperty(
            'debrid_provider', self.sources[0].get('debrid_provider',
                                                   'None').replace('_', ' '))
        self.setProperty('source_provider', self.sources[0]['provider'])
        self.setProperty('source_resolution', self.sources[0]['quality'])
        self.setProperty('source_info', " ".join(self.sources[0]['info']))
        self.setProperty('source_type', self.sources[0]['type'])

        if 'size' in self.sources[0]:
            self.setProperty(
                'source_size',
                tools.source_size_display(self.sources[0]['size']))

        if not self.silent:
            super(Resolver, self).doModal()
        else:
            self.resolve(sources, args, pack_select)

        if not self.canceled:
            return self.return_data
        else:
            return None
Example #7
0
def build_display_title(source):
    if 'debrid_provider' in source:
        debrid_provider = tools.colorString(tools.shortened_debrid(source.get('debrid_provider', '')))
        if debrid_provider != '':
            debrid_provider = " " + debrid_provider + " |"
        else:
            tools.log('No Debrid Provider')
    else:
        debrid_provider = ''
    quality = tools.color_quality(source['quality'])
    release_title = tools.colorString(source['release_title'])
    info = source['info']
    if len(info) > 0:
        info = ' '.join(info)
        info = '| ' + info
    else:
        info = ''

    title = ''

    if source['type'] == 'torrent':
        size = tools.colorString(tools.source_size_display(source['size']))
        title = "%s |%s %s | %s %s\n%s" % (
            quality,
            debrid_provider,
            source['source'].upper(),
            size,
            info,
            release_title
        )
    if source['type'] == 'hoster':
        title = "%s |%s %s | %s %s\n%s" % (
            quality,
            debrid_provider,
            source['provider'].upper(),
            source['source'],
            info,
            release_title,
        )

    if tools.getSetting('general.sourceselectlines') == 'false':
        title = title.replace('\n', ' | ')

    return title
    def build_cache_assist(self, args):
        if tools.getSetting('general.autocache') == 'false':
            return
        if len(self.allTorrents) == 0:
            return
        if len(self.torrentCacheSources) > 0:
            return

        build_list = []

        if tools.getSetting('general.cacheAssistMode') == "0":
            quality_list = ['1080p', '720p', 'SD']

            for quality in quality_list:
                if len(build_list) > 0: break
                if len([
                        i for i in self.torrentCacheSources
                        if i['quality'] == quality
                ]) == 0:
                    quality_filter = [
                        i for i in self.allTorrents if i['quality'] == quality
                    ]
                    if len(quality_filter) > 0:
                        packtype_filter = [
                            i for i in quality_filter if i['package'] == 'show'
                            or i['package'] == 'season'
                        ]
                        sorted_list = sorted(packtype_filter,
                                             key=lambda k: k['seeds'],
                                             reverse=True)
                        if len(sorted_list) > 0:
                            build_list.append(sorted_list[0])
                            break
                        else:
                            package_type_list = [
                                i for i in quality_filter
                                if i['package'] == 'single'
                            ]
                            sorted_list = sorted(package_type_list,
                                                 key=lambda k: k['seeds'],
                                                 reverse=True)
                            if sorted_list > 0:
                                build_list.append(sorted_list[0])
        else:
            if self.silent is True:
                return
            yesno = tools.showDialog.yesno(
                '%s - Cache Assist' % tools.addonName,
                tools.lang(32086).encode('utf-8'))
            if yesno == 0:
                return
            display_list = [
                '%sS | %s | %s | %s' %
                (i['seeds'], tools.color_quality(
                    i['quality']), tools.source_size_display(
                        i['size']), tools.colorString(i['release_title']))
                for i in self.allTorrents
            ]
            selection = tools.showDialog.select(
                '%s - ' % tools.addonName + tools.lang(32087).encode('utf-8'),
                display_list)
            if selection == -1:
                return
            build_list.append(self.allTorrents[selection])

        if len(build_list) > 0:
            actionArgs = {'torrent_list': build_list, 'args': args}
            actionArgs = tools.quote(json.dumps(actionArgs))
            tools.execute('RunPlugin(%s?action=cacheAssist&actionArgs=%s)' %
                          (sysaddon, actionArgs))

        return
    def resolve(self, sources, args, pack_select=False):
        try:
            if 'showInfo' in args:
                background = args['showInfo']['art']['fanart']
            else:
                background = args['fanart']

            self.setText(tools.lang(33000).encode('utf-8'))
            self.setBackground(background)
            stream_link = None
            loop_count = 0
            # Begin resolving links
            tools.log('Attempting to Resolve file link', 'info')
            for i in sources:
                debrid_provider = i.get('debrid_provider', '')
                loop_count += 1
                try:
                    if self.is_canceled():
                        self.close()
                        return
                    if 'size' in i:
                        i['info'].append(tools.source_size_display(i['size']))
                    loop_count_string = "(" + str(loop_count) + " of " + str(
                        len(sources)) + ")"
                    line1 = "%s %s - %s" % (
                        tools.lang(32036).encode('utf-8'),
                        tools.colorString(
                            tools.deaccentString(
                                i['release_title']).encode('utf-8')),
                        loop_count_string)
                    line2 = "%s %s | Source: %s" % (
                        tools.lang(32037).encode('utf-8'),
                        tools.colorString(debrid_provider.upper()),
                        tools.colorString(i['source']))
                    line3 = '%s %s | Info: %s' % (
                        tools.lang(32038).encode('utf-8'),
                        tools.colorString(i['quality']),
                        tools.colorString(" ".join(i['info'])))

                    self.setText(line1)
                    self.setText2(line2)
                    self.setText3(line3)

                    if i['type'] == 'torrent':
                        if i['debrid_provider'] == 'premiumize':
                            stream_link = self.premiumizeResolve(
                                i, args, pack_select)
                        elif i['debrid_provider'] == 'real_debrid':
                            stream_link = self.realdebridResolve(i, args)

                        if stream_link is None:
                            tools.log('Failed to resolve for torrent %s' %
                                      i['release_title'])
                            continue
                        else:
                            self.return_data = stream_link
                            self.close()
                            return

                    elif i['type'] == 'hoster':
                        # Quick fallback to speed up resolving while direct and free hosters are not supported
                        if 'debrid_provider' not in i:
                            continue
                        provider = i['provider_imports']
                        providerModule = __import__('%s.%s' %
                                                    (provider[0], provider[1]),
                                                    fromlist=[''])
                        providerModule = providerModule.source()

                        try:
                            i['url'] = providerModule.resolve(i['url'])
                        except:
                            import traceback
                            traceback.print_exc()
                            pass

                        if i['url'] is None:
                            continue

                        if 'debrid_provider' in i:
                            if i['debrid_provider'] == 'premiumize' and tools.getSetting(
                                    'premiumize.enabled') == 'true':
                                stream_link = self.premiumizeResolve(i, args)
                                if stream_link is None:
                                    continue

                            if i['debrid_provider'] == 'real_debrid':
                                stream_link = self.realdebridResolve(i, args)
                                if stream_link is None:
                                    continue

                        else:
                            # Currently not supporting free hosters at this point in time
                            # ResolveURL and Direct link testing needs to be tested first
                            continue
                            try:
                                try:
                                    headers = i['url'].rsplit('|', 1)[1]
                                except:
                                    headers = ''

                                headers = tools.quote_plus(headers).replace(
                                    '%3D', '=') if ' ' in headers else headers
                                headers = dict(tools.parse_qsl(headers))

                                live_check = requests.head(i['url'],
                                                           headers=headers)

                                if not live_check.status_code == 200:
                                    continue

                                stream_link = i['url']
                            except:
                                stream_link = None

                        if stream_link is None:
                            continue
                        else:
                            if stream_link.endswith('.rar'):
                                continue
                            self.return_data = stream_link
                            self.close()
                            return
                    continue

                except:
                    import traceback
                    traceback.print_exc()
                    continue

            self.close()
            if tools.getSetting('premiumize.enabled') == 'true':
                tools.execute(
                    'RunPlugin("plugin://plugin.video.%s/?action=premiumizeCleanup")'
                    % tools.addonName.lower())
            return
        except:
            import traceback
            traceback.print_exc()
            self.close()
            return
Example #10
0
    def resolve(self, sources, args, pack_select=False):

        try:

            stream_link = None
            loop_count = 0
            # Begin resolving links

            for i in sources:
                debrid_provider = i.get('debrid_provider',
                                        'None').replace('_', ' ')
                loop_count += 1
                try:
                    if self.is_canceled():
                        self.close()
                        return

                    if 'size' in i:
                        i['info'].append(tools.source_size_display(i['size']))

                    self.setProperty('release_title',
                                     tools.display_string(i['release_title']))
                    self.setProperty('debrid_provider', debrid_provider)
                    self.setProperty('source_provider', i['provider'])
                    self.setProperty('source_resolution', i['quality'])
                    self.setProperty('source_info', " ".join(i['info']))

                    if i['type'] == 'torrent':
                        stream_link = self.resolve_source(
                            self.resolvers[i['debrid_provider']], i, args,
                            pack_select)
                        if stream_link is None:
                            tools.log('Failed to resolve for torrent %s' %
                                      i['release_title'])
                            continue
                        else:
                            self.return_data = stream_link
                            self.close()
                            return

                    elif i['type'] == 'hoster' or i['type'] == 'cloud':

                        if i['url'] is None:
                            continue

                        if i['type'] == 'cloud' and i[
                                'debrid_provider'] == 'premiumize':
                            selected_file = Premiumize.Premiumize(
                            ).item_details(i['url'])
                            if tools.getSetting(
                                    'premiumize.transcoded') == 'true':
                                url = selected_file['stream_link']
                            else:
                                url = selected_file['link']
                            self.return_data = url
                            self.close()
                            return

                        if 'provider_imports' in i:
                            provider = i['provider_imports']
                            providerModule = __import__(
                                '%s.%s' % (provider[0], provider[1]),
                                fromlist=[''])
                            providerModule = providerModule.source()

                            try:
                                i['url'] = providerModule.resolve(i['url'])
                            except:
                                import traceback
                                traceback.print_exc()
                                pass

                        if 'debrid_provider' in i:
                            stream_link = self.resolve_source(
                                self.resolvers[i['debrid_provider']], i, args,
                                pack_select)
                            if stream_link is None:
                                continue
                            else:
                                try:
                                    requests.head(stream_link, timeout=1)
                                except requests.exceptions.RequestException:
                                    tools.log(
                                        'Head Request failed link likely dead, skipping'
                                    )
                                    continue

                        elif i['url'].startswith('http'):
                            try:
                                ext = i['url'].split('?')[0]
                                ext = ext.split('&')[0]
                                ext = ext.split('|')[0]
                                ext = ext.rsplit('.')[-1]
                                ext = ext.replace('/', '').lower()
                                if ext == 'rar': raise Exception()

                                try:
                                    headers = i['url'].rsplit('|', 1)[1]
                                except:
                                    headers = ''

                                headers = tools.quote_plus(headers).replace(
                                    '%3D', '=') if ' ' in headers else headers
                                headers = dict(tools.parse_qsl(headers))

                                live_check = requests.head(i['url'],
                                                           headers=headers,
                                                           timeout=10)

                                if not live_check.status_code == 200:
                                    tools.log(
                                        'Head Request failed link likely dead, skipping'
                                    )
                                    continue

                                stream_link = i['url']
                            except:
                                import traceback
                                traceback.print_exc()
                                stream_link = None

                        elif tools.file_exists(i['url']):
                            stream_link = i['url']

                        if stream_link is None:
                            continue
                        else:
                            if stream_link.endswith('.rar'):
                                continue
                            self.return_data = stream_link
                            self.close()
                            return
                    continue

                except:
                    import traceback
                    traceback.print_exc()
                    continue

            self.close()
            return
        except:
            import traceback
            traceback.print_exc()
            self.close()
            return
Example #11
0
    def resolve(self, sources, args, pack_select=False):
        try:
            if 'showInfo' in args:
                background = args['showInfo']['art']['fanart']
            else:
                background = args['art']['fanart']

            stream_link = None
            loop_count = 0
            # Begin resolving links
            tools.log('Attempting to Resolve file link', 'info')
            for i in sources:
                debrid_provider = i.get('debrid_provider',
                                        'None').replace('_', ' ')
                loop_count += 1
                try:
                    if self.is_canceled():
                        self.close()
                        return
                    if 'size' in i:
                        i['info'].append(tools.source_size_display(i['size']))

                    self.setProperty('release_title',
                                     tools.display_string(i['release_title']))
                    self.setProperty('debrid_provider', debrid_provider)
                    self.setProperty('source_provider', i['source'])
                    self.setProperty('source_resolution', i['quality'])
                    self.setProperty('source_info', " ".join(i['info']))

                    if i['type'] == 'torrent':
                        if i['debrid_provider'] == 'premiumize':
                            stream_link = self.premiumizeResolve(
                                i, args, pack_select)
                        elif i['debrid_provider'] == 'real_debrid':
                            stream_link = self.realdebridResolve(i, args)

                        if stream_link is None:
                            tools.log('Failed to resolve for torrent %s' %
                                      i['release_title'])
                            continue
                        else:
                            self.return_data = stream_link
                            self.close()
                            return

                    elif i['type'] == 'hoster' or i['type'] == 'cloud':
                        # Quick fallback to speed up resolving while direct and free hosters are not supported

                        if 'provider_imports' in i:
                            provider = i['provider_imports']
                            providerModule = __import__(
                                '%s.%s' % (provider[0], provider[1]),
                                fromlist=[''])
                            providerModule = providerModule.source()

                            try:
                                i['url'] = providerModule.resolve(i['url'])
                            except:
                                import traceback
                                traceback.print_exc()
                                pass

                        if i['url'] is None:
                            continue

                        if 'debrid_provider' in i:
                            if i['debrid_provider'] == 'premiumize' and tools.premiumize_enabled(
                            ):
                                stream_link = self.premiumizeResolve(i, args)
                                if stream_link is None:
                                    continue
                                else:
                                    try:
                                        requests.head(stream_link, timeout=1)
                                    except:
                                        tools.log(
                                            'Head Request failed link might be dead, skipping'
                                        )
                                        continue

                            if i['debrid_provider'] == 'real_debrid' and tools.real_debrid_enabled(
                            ):
                                stream_link = self.realdebridResolve(i, args)
                                if stream_link is None:
                                    continue
                                try:
                                    requests.head(stream_link, timeout=1)
                                except:
                                    tools.log(
                                        'Head Request failed link might be dead, skipping'
                                    )
                                    continue
                        else:
                            # Currently not supporting free hosters at this point in time
                            # ResolveURL and Direct link testing needs to be tested first
                            try:
                                ext = i['url'].split('?')[0].split(
                                    '&')[0].split('|')[0].rsplit(
                                        '.')[-1].replace('/', '').lower()
                                if ext == 'rar': raise Exception()
                                try:
                                    headers = i['url'].rsplit('|', 1)[1]
                                except:
                                    headers = ''

                                try:
                                    headers = i['url'].rsplit('|', 1)[1]
                                except:
                                    headers = ''
                                headers = tools.quote_plus(headers).replace(
                                    '%3D', '=') if ' ' in headers else headers
                                headers = dict(tools.parse_qsl(headers))

                                live_check = requests.head(i['url'],
                                                           headers=headers,
                                                           timeout=10)

                                if not live_check.status_code == 200:
                                    continue

                                stream_link = i['url']
                            except:
                                stream_link = None

                        if stream_link is None:
                            continue
                        else:
                            if stream_link.endswith('.rar'):
                                continue
                            self.return_data = stream_link
                            self.close()
                            return
                    continue

                except:
                    import traceback
                    traceback.print_exc()
                    continue

            self.close()
            return
        except:
            import traceback
            traceback.print_exc()
            self.close()
            return