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"])
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)
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)
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)
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
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
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
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