def showsByActor(self, actionArgs): if actionArgs == None: k = tools.showKeyboard('', tools.lang(32016)) k.doModal() query = (k.getText() if k.isConfirmed() else None) if query == None or query == '': tools.cancel_directory() return else: query = tools.unquote(actionArgs) database.addSearchHistory(query, 'showActor') query = tools.deaccentString(query) query = query.replace(' ', '-') query = tools.quote_plus(query) trakt_list = trakt.json_response('people/%s/shows' % query, limit=True) try: trakt_list = trakt_list['cast'] except: import traceback traceback.print_exc() trakt_list = [] trakt_list = [i['show'] for i in trakt_list] self.showListBuilder(trakt_list) tools.closeDirectory('tvshows')
def movie_magnet_to_stream(self, magnet, args): selectedFile = None magnet_id = self.upload_magnet(magnet)['id'] folder_details = self.magnet_status(magnet_id)['links'] folder_details = [(key, value) for key, value in folder_details.iteritems() if any( value.endswith(ext) for ext in source_utils.COMMON_VIDEO_EXTENSIONS)] for torrent_file in folder_details: if source_utils.filter_movie_title( torrent_file[1], tools.deaccentString(args['info']['title']), args['info']['year']): selectedFile = torrent_file[0] break if selectedFile is None: folder_details = [ tfile for tfile in folder_details if 'sample' not in tfile[1].lower() ] folder_details = [ tfile for tfile in folder_details if source_utils.cleanTitle(args['info']['title']) in source_utils.cleanTitle(tfile[1].lower()) ] if len(folder_details) == 1: selectedFile = folder_details[0] else: return self.delete_magnet(magnet_id) return self.resolve_hoster(selectedFile)
def moviesSearch(self): k = tools.showKeyboard('', tools.lang(32016).encode('utf-8')) k.doModal() query = (k.getText() if k.isConfirmed() else None) if query == None or query == '': return query = tools.deaccentString(query.encode('utf-8')) query = tools.quote_plus(query) traktList = trakt.json_response('search/movie?query=%s' % query) self.commonListBuilder(traktList) tools.closeDirectory('movies', viewType=self.viewType)
def showsSearch(self): k = tools.showKeyboard('', tools.lang(32016)) k.doModal() query = (k.getText() if k.isConfirmed() else None) if query == None or query == '': return query = tools.deaccentString(query) query = tools.quote_plus(query) traktList = trakt.json_response('search/show?query=%s&extended=full' % query, limit=True) self.showListBuilder(traktList) tools.closeDirectory('tvshows')
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, tools.deaccentString(release_title).encode('utf-8')) if source['type'] == 'hoster': title = "%s |%s %s | %s %s\n%s" % ( quality, debrid_provider, source['provider'].upper(), source['source'], info, tools.deaccentString(release_title).encode('utf-8'), ) if tools.getSetting('general.sourceselectlines') == 'false': title = title.replace('\n', ' | ') return title
def moviesSearch(self, actionArgs=None): if actionArgs == None: k = tools.showKeyboard('', tools.lang(32016)) k.doModal() query = (k.getText() if k.isConfirmed() else None) if query == None or query == '': return else: query = actionArgs database.addSearchHistory(query, 'movie') query = tools.deaccentString(tools.display_string(query)) tools.quote(query) tools.closeAllDialogs() tools.closeDirectory('movies') tools.execute("Container.Update(%s?action=moviesSearchResults&actionArgs=%s, replace)'" % (sysaddon, query))
def showsSearch(self, actionArgs=None): if actionArgs == None: k = tools.showKeyboard('', tools.lang(32016)) k.doModal() query = (k.getText() if k.isConfirmed() else None) if query == None or query == '': tools.cancel_directory() return else: query = actionArgs query = query.decode('utf-8') database.addSearchHistory(query, 'show') query = tools.deaccentString(tools.display_string(query)) query = tools.quote(query) self.showsSearchResults(query)
def moviesSearch(self, actionArgs=None): if actionArgs == None: k = tools.showKeyboard('', tools.lang(32016).encode('utf-8')) k.doModal() query = (k.getText() if k.isConfirmed() else None) if query == None or query == '': return else: query = actionArgs database.addSearchHistory(query, 'movie') query = tools.deaccentString(query.encode('utf-8')) query = tools.quote_plus(query) trakt_list = trakt.json_response('search/movie?query=%s' % query) if trakt_list is None: return self.commonListBuilder(trakt_list) tools.closeDirectory('movies', viewType=self.viewType)
def _single_magnet_resolve(self, magnet, args, pack_select=False): selectedFile = None folder_details = self.direct_download(magnet)['content'] folder_details = sorted(folder_details, key=lambda i: int(i['size']), reverse=True) folder_details = [tfile for tfile in folder_details if any(tfile['link'].endswith(ext) for ext in source_utils.COMMON_VIDEO_EXTENSIONS)] for torrent_file in folder_details: if source_utils.filter_movie_title(torrent_file['path'].split('/')[-1], tools.deaccentString(args['info']['title']), args['info']['year']): selectedFile = torrent_file break if selectedFile is None: folder_details = [tfile for tfile in folder_details if 'sample' not in tfile['path'].lower()] folder_details = [tfile for tfile in folder_details if source_utils.cleanTitle(args['info']['title']) in source_utils.cleanTitle(tfile['path'].lower())] if len(folder_details) == 1: selectedFile = folder_details[0] else: return if tools.getSetting('premiumize.transcoded') == 'true': if selectedFile['transcode_status'] == 'finished': try: if selectedFile['stream_link'] is not None and tools.getSetting('premiumize.addToCloud') == 'true': transfer = self.create_transfer(magnet) database.add_premiumize_transfer(transfer['id']) except: pass return selectedFile['stream_link'] else: pass try: if selectedFile['link'] is not None and tools.getSetting('premiumize.addToCloud') == 'true': transfer = self.create_transfer(magnet) database.add_premiumize_transfer(transfer['id']) except: pass return selectedFile['link']
def showsSearch(self, actionArgs): if actionArgs == None: k = tools.showKeyboard('', tools.lang(32016).encode('utf-8')) k.doModal() query = (k.getText() if k.isConfirmed() else None) if query == None or query == '': return else: query = actionArgs database.addSearchHistory(query, 'show') query = tools.deaccentString(query) query = tools.quote_plus(query) trakt_list = trakt.json_response('search/show?query=%s&extended=full' % query, limit=True) if trakt_list is None: return self.showListBuilder(trakt_list) tools.closeDirectory('tvshows')
def clean_title(title, broken=None): title = title.lower() title = tools.deaccentString(title) title = tools.strip_non_ascii_and_unprintable(title) if broken == 1: apostrophe_replacement = '' elif broken == 2: apostrophe_replacement = ' s' else: apostrophe_replacement = 's' title = title.replace("\\'s", apostrophe_replacement) title = title.replace("'s", apostrophe_replacement) title = title.replace("'s", apostrophe_replacement) title = title.replace(" 039 s", apostrophe_replacement) title = re.sub(r'\:|\\|\/|\,|\!|\?|\(|\)|\'|\"|\\|\[|\]|\-|\_|\.', ' ', title) title = re.sub(r'\s+', ' ', title) title = re.sub(r'\&', 'and', title) return title.strip()
def parseEpisodeInfo(self, response, traktInfo, showArgs): try: if "status_code" in response: if response["status_code"] == 34: return None try:response['name'] = tools.deaccentString(response['name']) except: pass try: currentDate = datetime.today().date() airdate = str(response['air_date']) airdate = tools.datetime_workaround(airdate) except: pass try: if airdate > currentDate: return except: pass item = {'info': None, 'art': None} art = {} try:art['poster'] = showArgs['seasonInfo']['art']['poster'] except:art['poster'] = showArgs['showInfo']['art']['poster'] try:art['thumb'] = self.thumbPath + response.get('still_path', '') except:pass try:art['landscape'] = showArgs['showInfo']['art']['landscape'] except:pass try:art['fanart'] = showArgs['showInfo']['art']['fanart'] except:pass info = {} try:info['trailer'] = tools.youtube_url % [i for i in response['videos']['results'] if i['site'] == 'YouTube'][0]['key'] except:pass try:info['duration'] = showArgs['showInfo']['info'].get('duration') except:pass try:info['episode'] = response.get('episode_number', '') except:pass try:info['season'] = response.get('season_number', '') except:pass try:info['sortepisode'] = response.get('episode_number', '') except:pass try:info['sortseason'] = response.get('season_number', '') except:pass try:info['genre'] = showArgs['showInfo']['info']['genre'] except:pass try:info['title'] = info['sorttitle'] = info['originaltitle'] = tools.deaccentString(response['name']) except: return None try:info['rating'] = response.get('vote_average', '') except:pass try:info['aired'] = response.get('air_date', '') except: import traceback traceback.print_exc() pass try:info['premiered'] = response.get('air_date', '') except:pass try:info['year'] = int(response.get('air_date', '0000')[:4]) except:pass try:info['tvshowtitle'] = showArgs['showInfo']['info']['tvshowtitle'] except:pass try:info['year'] = response.get('firstAired', '')[:4] except:pass try:info['plot'] = response.get('overview', '') except:pass try:info['imdbnumber'] = showArgs['showInfo']['ids']['imdb'] except:pass try:info['mediatype'] = 'episode' except:pass try:info['mpaa'] = showArgs['showInfo']['info']['mpaa'] except:pass try:info['castandrole'] = [(i['name'],i['character']) for i in response['credits']['cast']] except:pass item['ids'] = traktInfo['ids'] item['info'] = info item['art'] = art item['showInfo'] = showArgs['showInfo'] item['trakt_object'] = {} item['trakt_object']['episodes'] = [traktInfo] return item except: import traceback traceback.print_exc() return None
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 parseEpisodeInfo(self, response, traktInfo, showArgs): try: if "status_code" in response: if response["status_code"] == 34: return None try: response['name'] = tools.deaccentString(response['name']) except: pass try: currentDate = datetime.today().date() airdate = str(response['air_date']) airdate = tools.datetime_workaround(airdate) if airdate > currentDate: return except: pass item = {'info': None, 'art': None} art = copy.deepcopy(showArgs['seasonInfo']['art']) try: if self.episode_fanart == 'true': art.update(self.parseEpisodeFanart(response)) art['landscape'] = self.backgroundPath + response.get( 'still_path', '') art['thumb'] = self.thumbPath + response.get('still_path', '') except: pass info = {} try: info['trailer'] = tools.youtube_url % \ [i for i in response['videos']['results'] if i['site'] == 'YouTube'][0]['key'] except: pass try: info['duration'] = showArgs['showInfo']['info'].get('duration') except: pass try: info['episode'] = response.get('episode_number', '') except: return None try: info['season'] = response.get('season_number', '') except: return None try: info['sortepisode'] = response.get('episode_number', '') except: pass try: info['sortseason'] = response.get('season_number', '') except: pass try: info['genre'] = showArgs['showInfo']['info']['genre'] except: pass try: info['title'] = info['sorttitle'] = info[ 'originaltitle'] = tools.deaccentString(response['name']) except: return None try: info['rating'] = response.get('vote_average', '') except: pass try: info['aired'] = traktInfo['first_aired'] except: import traceback traceback.print_exc() pass try: info['premiered'] = traktInfo['first_aired'] except: pass try: info['year'] = int(response.get('air_date', '0000')[:4]) if info['year'] == '0000': info['year'] = int(traktInfo.get('firstAired', '0000')[:4]) except: pass try: info['tvshowtitle'] = showArgs['showInfo']['info'][ 'tvshowtitle'] except: pass try: info['plot'] = response.get('overview', '') if info['plot'] == '': traktInfo.get('overview', '') except: pass try: info['imdbnumber'] = showArgs['showInfo']['ids']['imdb'] except: pass try: info['mediatype'] = 'episode' except: pass try: info['mpaa'] = showArgs['showInfo']['info']['mpaa'] except: pass try: item['cast'] = [{ 'name': i['name'], 'role': i['character'], 'thumbnail': '{}{}'.format(self.backgroundPath, i['profile_path']) } for i in response['credits']['cast']] except: item['cast'] = [] pass item['ids'] = traktInfo['ids'] for id, value in showArgs['showInfo']['ids'].items(): item['ids']['tvshow.{}'.format(id)] = value item['info'] = info item['art'] = art item['showInfo'] = showArgs['showInfo'] item['trakt_object'] = {} item['trakt_object']['episodes'] = [traktInfo] return item except: import traceback traceback.print_exc() return None