def hideItem(name, imdb=None, tvdb=None, season=None, episode=None, refresh=True): sections = ['progress_watched', 'calendar'] sections_display = [control.lang(40072), control.lang(40073)] selection = control.selectDialog([i for i in sections_display], heading=control.addonInfo('name') + ' - ' + control.lang(40074)) if selection == -1: return section = sections[selection] if episode is not None: post = {"shows": [{"ids": {"tvdb": tvdb}}]} else: post = {"movies": [{"ids": {"imdb": imdb}}]} getTrakt('users/hidden/%s' % section, post=post)[0] if refresh: control.refresh() control.trigger_widget_refresh() if control.setting('trakt.general.notifications') == 'true': control.notification( title=32315, message=control.lang(33053) % (name, sections_display[selection]), icon='default', sound=(control.setting('notification.sound') == 'true'))
def nhlResolve(url): try: setSettings() try: url, selectGame, side = re.compile('(.+?)x0xe(.+?)x0xe(.+?)$').findall(url)[0] except: selectGame, side = None, None header = '|' + urllib.urlencode({'User-Agent': 'PS4 libhttp/1.76 (PlayStation 4)'}) base = re.compile('(.*/).+[.]m3u8').findall(url) if not url.endswith('m3u8'): return player().run(url + header, selectGame ,side) result = client.request(url) result = re.compile('BANDWIDTH=(\d*)\n(.+?[.]m3u8)').findall(result) result = [(int(int(i[0]) / 1000), i[1]) for i in result] result = sorted(result, reverse=True) result = [(str(i[0]), base[0] + i[1]) for i in result] q = [i[0] for i in result] u = [i[1] for i in result] select = control.selectDialog(q, control.lang(30756).encode('utf-8')) if select == -1: return url = u[select] player().run(url + header, selectGame ,side) except: return
def resolve(url): html = client.request(url) links = re.findall('id=[\"\']([^\"\']+)[\"\']><a href=[\"\']#\d+[\"\']><div.+?>([^<]+)<',html) if len(links)<2: urls = re.findall('<iframe.+?src=[\'"](.+?)[\'"]',html) import urlresolver for url in urls: resolved = urlresolver.resolve(url) if resolved: return resolved break else: import requests choices = [x[1] for x in links] i = control.selectDialog(choices,heading='Choose a link:') ref = url headers = {'Content-Type':'application/x-www-form-urlencoded; charset=UTF-8','X-Requested-With':'XMLHttpRequest','Referer':ref, 'Origin':'http://fullmatchtv.com', 'Host':'fullmatchtv.com'} s = requests.Session() acp_pid = re.findall("id=[\"\']acp_post[\"\'].+?value=[\"\'](\d+)[\"\']",html)[0] post_data = {'acp_currpage' : int(i)+1, 'acp_pid' : acp_pid, 'acp_shortcode' : 'acp_shortcode', 'action' : 'pp_with_ajax' } result = s.post('http://fullmatchtv.com/wp-admin/admin-ajax.php', data=post_data, headers=headers).content url = re.findall('<iframe.+?src=[\'"](.+?)[\'"]',result)[0] import urlresolver return urlresolver.resolve(url)
def AppSelect(title, id): type = ['Download App', 'Install App'] select = control.selectDialog(type) if select == 0: downloadApp(title, id) elif select == 1: installApp(title, id) else: return
def playlistManager(name=None, url=None, meta=None, art=None): try: items = [] items += [(control.lang(32065), 'playlistAdd')] items += [(control.lang(35518), 'playlistRemove')] items += [(control.lang(35517), 'playlistShow')] items += [(control.lang(35516), 'playlistClear')] control.hide() select = control.selectDialog([i[0] for i in items], heading=control.addonInfo('name') + ' - ' + control.lang(35522)) if select == -1: return if select >= 0: if select == 0: control.busy() playlistAdd(name, url, meta, art) control.hide() elif select == 1: control.busy() playlistRemove(name) control.hide() elif select == 2: control.busy() playlistShow() control.hide() elif select == 3: control.busy() playlistClear() control.hide() except: log_utils.error() control.hide()
def views(self): try: control.idle() items = [("Filme", 'movies'), ("TV-Serien", 'tvshows'), ("Staffeln", 'seasons'), ("Episoden", 'episodes')] select = control.selectDialog([i[0] for i in items], "[B]LASTSHIP[/B]: Anzeige-Typen") if select == -1: return content = items[select][1] title = "HIER KLICKEN, UM ANSICHT ZU SPEICHERN" url = '%s?action=addView&content=%s' % (sys.argv[0], content) poster, banner, fanart = control.addonPoster(), control.addonBanner(), control.addonFanart() item = control.item(label=title) item.setInfo(type='Video', infoLabels={'title': title}) item.setArt({'icon': poster, 'thumb': poster, 'poster': poster, 'banner': banner}) item.setProperty('Fanart_Image', fanart) control.addItem(handle=int(sys.argv[1]), url=url, listitem=item, isFolder=False) control.content(int(sys.argv[1]), content) control.directory(int(sys.argv[1]), cacheToDisc=True) from resources.lib.modules import views views.setView(content, {}) except: return
def views(self): try: control.idle() items = [ (control.lang(32001).encode('utf-8'), 'movies'), (control.lang(32002).encode('utf-8'), 'tvshows'), (control.lang(32054).encode('utf-8'), 'seasons'), (control.lang(32038).encode('utf-8'), 'episodes') ] select = control.selectDialog([i[0] for i in items], control.lang(32049).encode('utf-8')) if select == -1: return content = items[select][1] title = control.lang(32059).encode('utf-8') url = '%s?action=addView&content=%s' % (sys.argv[0], content) poster, banner, fanart = control.addonPoster(), control.addonBanner(), control.addonFanart() item = control.item(label=title) item.setInfo(type='Video', infoLabels = {'title': title}) item.setArt({'icon': poster, 'thumb': poster, 'poster': poster, 'banner': banner}) item.setProperty('Fanart_Image', fanart) control.addItem(handle=int(sys.argv[1]), url=url, listitem=item, isFolder=False) control.content(int(sys.argv[1]), content) control.directory(int(sys.argv[1]), cacheToDisc=True) from resources.lib.modules import cache views.setView(content, {}) except: return
def acount_info_to_dialog(self): from datetime import datetime import time try: userInfo = self.acount_info() try: expires = datetime.strptime(userInfo['expiration'], FormatDateTime) except: expires = datetime(*(time.strptime(userInfo['expiration'], FormatDateTime)[0:6])) days_remaining = (expires - datetime.today()).days expires = expires.strftime("%A, %B %d, %Y") items = [] items += [control.lang(40035) % userInfo['email']] items += [control.lang(40036) % userInfo['username']] items += [control.lang(40037) % userInfo['type'].capitalize()] items += [control.lang(40041) % expires] items += [control.lang(40042) % days_remaining] items += [control.lang(40038) % userInfo['points']] return control.selectDialog(items, 'Real-Debrid') except: log_utils.error() pass return
def nhlResolve(url): try: setSettings() try: url, selectGame, side = re.compile( '(.+?)x0xe(.+?)x0xe(.+?)$').findall(url)[0] except: selectGame, side = None, None header = '|' + urllib.urlencode( {'User-Agent': 'PS4 libhttp/1.76 (PlayStation 4)'}) base = re.compile('(.*/).+[.]m3u8').findall(url) if not url.endswith('m3u8'): return player().run(url + header, selectGame, side) result = client.request(url) result = re.compile('BANDWIDTH=(\d*)\n(.+?[.]m3u8)').findall(result) result = [(int(int(i[0]) / 1000), i[1]) for i in result] result = sorted(result, reverse=True) result = [(str(i[0]), base[0] + i[1]) for i in result] q = [i[0] for i in result] u = [i[1] for i in result] select = control.selectDialog(q, control.lang(30756).encode('utf-8')) if select == -1: return url = u[select] player().run(url + header, selectGame, side) except: return
def setviews(): try: control.idle() items = [ (control.lang(32017).encode('utf-8'), 'addons'), (control.lang(32018).encode('utf-8'), 'movies'), (control.lang(32019).encode('utf-8'), 'files') ] select = control.selectDialog([i[0] for i in items], 'SELECT') if select == -1: raise Exception() content = items[select][1] title = control.lang(32020).encode('utf-8') poster, banner, fanart = ICON, BANNER, FANART addon.add_directory({'mode': 'addView', 'content': content}, {'type': 'video', 'title': title, 'icon': poster, 'thumb': poster, 'poster': poster, 'banner': banner}, img=ICON, fanart=FANART) control.content(int(sys.argv[1]), content) control.directory(int(sys.argv[1])) view.setView(content, {}) except: quit()
def views(self): try: control.idle() items = [(control.lang(32001).encode('utf-8'), 'movies'), (control.lang(32002).encode('utf-8'), 'tvshows'), (control.lang(32054).encode('utf-8'), 'seasons'), (control.lang(32038).encode('utf-8'), 'episodes')] select = control.selectDialog([i[0] for i in items], control.lang(32049).encode('utf-8')) if select == -1: return content = items[select][1] title = control.lang(32059).encode('utf-8') url = '%s?action=addView&content=%s' % (sys.argv[0], content) poster, banner, fanart = control.addonPoster( ), control.addonBanner(), control.addonFanart() item = control.item(label=title) item.setInfo(type='Video', infoLabels={'title': title}) item.setArt({ 'icon': poster, 'thumb': poster, 'poster': poster, 'banner': banner }) item.setProperty('Fanart_Image', fanart) control.addItem(handle=int(sys.argv[1]), url=url, listitem=item, isFolder=False) control.content(int(sys.argv[1]), content) control.directory(int(sys.argv[1]), cacheToDisc=True) from resources.lib.modules import views views.setView(content, {}) except: return
def acount_info_to_dialog(self): from datetime import datetime import math try: accountInfo = self.get_acount_info() expires = datetime.fromtimestamp(accountInfo['premium_until']) days_remaining = (expires - datetime.today()).days expires = expires.strftime("%A, %B %d, %Y") points_used = int( math.floor(float(accountInfo['space_used']) / 1073741824.0)) space_used = float(int(accountInfo['space_used'])) / 1073741824 percentage_used = str( round(float(accountInfo['limit_used']) * 100.0, 1)) items = [] items += [control.lang(40040) % accountInfo['customer_id']] items += [control.lang(40041) % expires] items += [control.lang(40042) % days_remaining] items += [control.lang(40043) % points_used] items += [control.lang(40044) % space_used] items += [control.lang(40045) % percentage_used] return control.selectDialog(items, 'Premiumize') except: log_utils.error() pass return
def colorChoicePI(): selectList = [] for i in colorChart: selectList.append(colorStringPI(i, i)) color = control.selectDialog(selectList) if color == -1: return control.setSetting('prem.identify', colorChart[color]) control.openSettings(query='2.3')
def colorChoiceUI(): selectList = [] for i in colorChart: selectList.append(colorStringUI(i, i)) color = control.selectDialog(selectList) if color == -1: return control.setSetting('unaired.identify', colorChart[color]) control.openSettings(query='0.16')
def colorChoice(): selectList = [] for i in colorChart: selectList.append(colorString(i, i)) color = control.selectDialog(selectList) if color == -1: return control.setSetting('my_ColorChoice', colorChart[color]) control.execute('Container.Refresh')
def search(self, url): try: apiLang = control.apiLanguage().get('youtube', 'en') if apiLang != 'en': url += "&relevanceLanguage=%s" % apiLang #log_utils.log('yt_url: ' + str(url)) result = client.request(url) if result == None: log_utils.log('yt_api_failed_resp: ' + str(result)) control.infoDialog( 'Please utilise your own API key[CR]on YouTube add-on', 'API key quota limit reached', time=5000) return result = six.ensure_text(result) json_items = json.loads(result).get('items', []) items = [i.get('id', {}).get('videoId') for i in json_items] if self.mode == '1': labels = [ i.get('snippet', {}).get('title') for i in json_items ] labels = [client.replaceHTMLCodes(i) for i in labels] select = control.selectDialog(labels, control.lang(32121)) if select == -1: return items = [items[select]] elif self.mode == '2': if self.content in ['seasons', 'episodes']: labels = [ i.get('snippet', {}).get('title') for i in json_items ] labels = [client.replaceHTMLCodes(i) for i in labels] select = control.selectDialog(labels, control.lang(32121)) if select == -1: return items = [items[select]] for vid_id in items: url = self.resolve(vid_id) if url: return url except: return
def add(): type = ['Add with Link', 'Add with File'] select = control.selectDialog(type) if select == 1: add_file() elif select == 0: k = control.keyboard('', 'Paste torrent Link') ; k.doModal() q = k.getText() if k.isConfirmed() else None if (q == None or q == ''): return add_download(q, q)
def get(self, url): try: items = re.compile('<sublink(?:\s+name=|)(?:\'|\"|)(.*?)(?:\'|\"|)>(.+?)</sublink>').findall(url) if len(items) == 0: return url if len(items) == 1: return items[0][1] items = [('Link %s' % (int(items.index(i))+1) if i[0] == '' else i[0], i[1]) for i in items] select = control.selectDialog([i[0] for i in items], control.infoLabel('listitem.label')) if select == -1: return False else: return items[select][1] except: log_utils.error()
def resolve(self, url): urls = url.split('##') choices = ['Link %s' % (i + 1) for i in range(len(urls))] if len(choices) == 1: index = 0 else: index = control.selectDialog(choices, 'Odaberite link:') if index > -1: url = urls[index] if 'morescreens' in url: from resources.lib.resolvers import hrti return hrti.resolve(url) elif 'streamlive.to' in url: from resources.lib.resolvers import streamlive return streamlive.resolve(url) elif 'dailymotion' in url: import urlresolver return urlresolver.resolve(url) #nova tv, doma tv specy = { 'http://www.sipragezabava.com/kanal_3_hr.php': 'http://prvenstvoliga.blogspot.hr/2014/12/nova-tv.html', 'http://www.netraja.net/2014/05/doma-tv.html': 'http://www.prvenstvoliga.blogspot.hr/2014/05/doma-tv.html' } if url in specy.keys(): urlx = [] src = [] html = client.request( specy[url], referer= 'http://prvenstvoliga.blogspot.com/search/label/Hrvatska') urls = re.findall('target=[\"\']([^\"\']+)[\"\'].+?</embed>', html) i = 0 for url in urls: i += 1 src += ['Link %s' % i] dialog = xbmcgui.Dialog() index = dialog.select('Odaberite:', src) if index == -1: return '' return urlx[index] import liveresolver return liveresolver.resolve(url) return ''
def sch_links(self,key): dicty = dict(self.sch_dict()) urls = dicty[key] choices = [] links = re.findall('href=[\"\']([^\"\']+)[\"\'].+?>([^<]+)<',urls) for link in links: choices.append(link[1]) index = control.selectDialog(choices,heading='Choose the source') if index>-1: return links[index][0] return ''
def logView(): modes = ['View Log', 'Upload Log to Pastebin'] logPaths = [] logNames = [] select = control.selectDialog(modes) try: if select == -1: raise Exception() logfile_path = xbmc.translatePath('special://logpath') logfile_names = ('kodi.log', 'kodi.old.log', 'spmc.log', 'spmc.old.log', 'tvmc.log', 'freetelly.log', 'ftmc.log', 'firemc.log', 'nodi.log') for logfile_name in logfile_names: log_file_path = os.path.join(logfile_path, logfile_name) if os.path.isfile(log_file_path): logNames.append(logfile_name) logPaths.append(log_file_path) selectLog = control.selectDialog(logNames) selectedLog = logPaths[selectLog] if selectLog == -1: raise Exception() if select == 0: from resources.lib.modules import TextViewer TextViewer.text_view(selectedLog) elif select == 1: f = open(selectedLog, 'r') text = f.read() f.close() from resources.lib.api import pastebin upload_Link = pastebin.api().paste(text) print ("LOGVIEW UPLOADED LINK", upload_Link) if upload_Link != None: if not "Error" in upload_Link: label = "Log Link: [COLOR skyblue][B]" + upload_Link + "[/B][/COLOR]" dialog.ok(AddonTitle, "Log Uploaded to Pastebin", label) else: dialog.ok(AddonTitle, "Cannot Upload Log to Pastebin", "Reason " + upload_Link) else:dialog.ok(AddonTitle, "Cannot Upload Log to Pastebin", "") except:pass ############################## END #########################################
def upload_LogFile(name): from resources.lib.modules.control import notification url = 'https://paste.kodi.tv/' log_file = joinPath(LOGPATH, '%s.log' % name.lower()) if not existsPath(log_file): return notification( message='Log File not found, likely logging is not enabled.') try: import requests from resources.lib.modules.control import addonVersion, selectDialog, getHighlightColor f = open(log_file, 'r', encoding='utf-8', errors='ignore') text = f.read() f.close() UserAgent = 'DG %s' % addonVersion('plugin.video.dg') response = requests.post(url + 'documents', data=text.encode('utf-8', errors='ignore'), headers={'User-Agent': UserAgent}) # log('log_response=%s' % response) if 'key' in response.json(): result = url + response.json()['key'] log('%s log file uploaded to: %s' % (name, result)) from sys import platform as sys_platform supported_platform = any(value in sys_platform for value in ('win32', 'linux2')) highlight_color = getHighlightColor() list = [ ('[COLOR %s]url:[/COLOR] %s' % (highlight_color, str(result)), str(result)) ] if supported_platform: list += [('[COLOR %s] -- Copy url To Clipboard[/COLOR]' % highlight_color, ' ')] select = selectDialog( [i[0] for i in list], lang(32196) if name.lower() == 'dg' else lang(32199)) if 'Copy url To Clipboard' in list[select][0]: from resources.lib.modules.source_utils import copy2clip copy2clip(list[select - 1][1]) elif 'message' in response.json(): notification(message='%s Log upload failed: %s' % (name, str(response.json()['message']))) log('%s Log upload failed: %s' % (name, str(response.json()['message'])), level=LOGERROR) else: notification(message='%s Log upload failed' % name) log('%s Log upload failed: %s' % (name, response.text), level=LOGERROR) except: error('%s log upload failed' % name) notification(message='pastebin post failed: See log for more info')
def listamount(self): try: control.idle() items = [('10', '10'), ('20', '20'), ('30', '30'), ('40', '40'), ('50', '50'), ('60', '60'), ('70', '70'), ('80', '80'), ('90', '90'), ('100', '100')] select = control.selectDialog([i[0] for i in items], 'Items per Page') if select == -1: return items = items[select][1] control.setSetting('useramount', '%s' % items) control.refresh() except: return
def manager(name, imdb, tvdb, content): try: post = {"movies": [{"ids": {"imdb": imdb}}]} if content == 'movie' else {"shows": [{"ids": {"tvdb": tvdb}}]} items = [(control.lang(32516).encode('utf-8'), '/sync/collection')] items += [(control.lang(32517).encode('utf-8'), '/sync/collection/remove')] items += [(control.lang(32518).encode('utf-8'), '/sync/watchlist')] items += [(control.lang(32519).encode('utf-8'), '/sync/watchlist/remove')] items += [(control.lang(32520).encode('utf-8'), '/users/me/lists/%s/items')] result = getTraktAsJson('/users/me/lists') lists = [(i['name'], i['ids']['slug']) for i in result] lists = [lists[i//2] for i in range(len(lists)*2)] for i in range(0, len(lists), 2): lists[i] = ((control.lang(32521) % lists[i][0]).encode('utf-8'), '/users/me/lists/%s/items' % lists[i][1]) for i in range(1, len(lists), 2): lists[i] = ((control.lang(32522) % lists[i][0]).encode('utf-8'), '/users/me/lists/%s/items/remove' % lists[i][1]) items += lists select = control.selectDialog([i[0] for i in items], control.lang(32515).encode('utf-8')) if select == -1: return elif select == 4: t = control.lang(32520).encode('utf-8') k = control.keyboard('', t) k.doModal() new = k.getText() if k.isConfirmed() else None if (new is None or new == ''): return result = __getTrakt('/users/me/lists', post={"name": new, "privacy": "private"})[0] try: slug = utils.json_loads_as_str(result)['ids']['slug'] except Exception: return notification.infoDialog( msg=control.lang(32515).encode('utf-8'), title=str(name), style='ERROR') result = __getTrakt(items[select][1] % slug, post=post)[0] else: result = __getTrakt(items[select][1], post=post)[0] icon = control.infoLabel('ListItem.Icon') if result is not None else 'ERROR' notification.infoDialog(msg=control.lang(32515).encode('utf-8'), title=str(name), style=icon) except Exception: return
def get(self, url): try: items = re.compile('<sublink(?:\s+name=|)(?:\'|\"|)(.*?)(?:\'|\"|)>(.+?)</sublink>').findall(url) if len(items) == 0: return url if len(items) == 1: return items[0][1] items = [('Link %s' % (int(items.index(i))+1) if i[0] == '' else i[0], i[1]) for i in items] select = control.selectDialog([i[0] for i in items], control.infoLabel('listitem.label')) if select == -1: return False else: return items[select][1] except: pass
def restoreFolder(): names = [] links = [] zipFolder = control.setting('restore.path') if zipFolder == '' or zipFolder == None: control.infoDialog('Please Setup a Zip Files Location first') control.openSettings(query='2.0') return for zipFile in os.listdir(zipFolder): if zipFile.endswith(".zip"): url = xbmc.translatePath(os.path.join(zipFolder, zipFile)) names.append(zipFile) links.append(url) select = control.selectDialog(names) if select != -1: restore(links[select])
def sortby(self): try: control.idle() items = [('Popularity', 'moviemeter'), ('Alphabetical', 'alpha'), ('IMDb Rating', 'user_rating'), ('Number of Votes', 'num_votes'), ('US Box Office by Gross', 'boxoffice_gross_us'), ('By Year', 'year'), ('By Release Date', 'release_date')] select = control.selectDialog([i[0] for i in items], 'Sort Lists By') if select == -1: return items = items[select][1] control.setSetting('uservar', '%s' % items) control.refresh() except: return
def get(self, url): try: items = re.compile('<sublink>(.+?)</sublink>').findall(url) if len(items) == 0: items = [url] items = [('Link %s' % (int(items.index(i))+1), i) for i in items] if len(items) == 1: url = items[0][1] else: select = control.selectDialog([i[0] for i in items], control.infoLabel('listitem.label')) if select == -1: return False else: url = items[select][1] return url except: pass
def getPeople(self, name, url): try: select = control.selectDialog(['Movies', 'TV Shows', 'Biography'], heading=name) if select == -1: return elif select == 0: from resources.lib.indexers import movies movies.movies().get(self.person_movie_link % url) elif select == 1: from resources.lib.indexers import tvshows tvshows.tvshows().get(self.person_tv_link % url) elif select == 2: self.bio_txt(url, name) except: log_utils.log('getPeople', 1) pass
def dialogselect_folder(id): folder = premiumizeFolder + id url = urlparse.urljoin(premiumize_Api, folder) r = reqJson(url) r = r['content'] labels = [] sources = [] types = [] IDs = [] for result in r: type = result['type'] fileLabel = type id = result['id'] name = result['name'].encode('utf-8') name = normalize(name) playLink = '0' isFolder = True isPlayable = 'false' url = '0' if type == 'file': playLink = result['link'] ext = playLink.split('.') fileLabel = type + " " + str(ext[-1]) try: size = result['size'] size = getSize(size) except: size = '' if size != '': fileLabel = fileLabel + " | " + str(size) isFolder = False isPlayable = 'true' url = playLink label = "[B]" + fileLabel.upper() + " |[/B] " + str(name) IDs.append(id) labels.append(label) sources.append(url) types.append(type) IDs.append(id) select = control.selectDialog(labels) if select == -1: return '0' selected_type = types[select] selected_url = sources[select] selected_id = IDs[select] if selected_type != 'file': selected_url = dialogselect_folder(selected_id) return selected_url
def search(self, url): try: apiLang = control.apiLanguage().get('youtube', 'en') if apiLang != 'en': url += '&relevanceLanguage=%s' % apiLang r = cache.get(client.request, 24, url) result = utils.json_loads_as_str(r) json_items = result['items'] ids = [i['id']['videoId'] for i in json_items] if not ids: return if self.mode == '1': vids = [] for i in json_items: name = client.replaceHTMLCodes(i['snippet']['title']) if control.getKodiVersion() >= 17: icon = i['snippet']['thumbnails']['default']['url'] li = control.item(label=name) li.setArt({ 'icon': icon, 'thumb': icon, 'poster': icon }) vids.append(li) else: vids.append(name) select = control.selectDialog(vids, control.lang(32121) % 'YouTube', useDetails=True) if select == -1: return 'canceled' vid_id = ids[select] url = self.yt_plugin_url % vid_id return url for vid_id in ids: url = resolve(vid_id) if url: return url return except: return
def manager(name, imdb, tvdb, content): try: user = re.sub('[^a-z0-9]', '-', control.setting('trakt.user').strip().lower()) post = {"movies": [{"ids": {"imdb": imdb}}]} if content == 'movie' else {"shows": [{"ids": {"tvdb": tvdb}}]} items = [(control.lang(30472).encode('utf-8'), '/sync/collection')] items += [(control.lang(30473).encode('utf-8'), '/sync/collection/remove')] items += [(control.lang(30474).encode('utf-8'), '/sync/watchlist')] items += [(control.lang(30475).encode('utf-8'), '/sync/watchlist/remove')] items += [(control.lang(30476).encode('utf-8'), '/users/%s/lists/%s/items' % (user, '%s'))] result = getTrakt('/users/%s/lists' % user) result = json.loads(result) lists = [(i['name'], i['ids']['slug']) for i in result] lists = [lists[i//2] for i in range(len(lists)*2)] for i in range(0, len(lists), 2): lists[i] = ((control.lang(30477) + ' ' + lists[i][0]).encode('utf-8'), '/users/%s/lists/%s/items' % (user, lists[i][1])) for i in range(1, len(lists), 2): lists[i] = ((control.lang(30478) + ' ' + lists[i][0]).encode('utf-8'), '/users/%s/lists/%s/items/remove' % (user, lists[i][1])) items += lists select = control.selectDialog([i[0] for i in items], control.lang(30471).encode('utf-8')) if select == -1: return elif select == 4: t = control.lang(30476).encode('utf-8') k = control.keyboard('', t) ; k.doModal() new = k.getText() if k.isConfirmed() else None if (new == None or new == ''): return url = '/users/%s/lists' % user result = getTrakt('/users/%s/lists' % user, post={"name": new, "privacy": "private"}) try: slug = json.loads(result)['ids']['slug'] except: return control.infoDialog('Failed', heading=name) result = getTrakt(items[select][1] % slug, post=post) else: result = getTrakt(items[select][1], post=post) info = 'Successful' if not result == None else 'Failed' control.infoDialog(info, heading=name) except: return
def manager(name, imdb, tvdb, content): try: post = {"movies": [{"ids": {"imdb": imdb}}]} if content == 'movie' else {"shows": [{"ids": {"tvdb": tvdb}}]} items = [(control.lang(32516).encode('utf-8'), '/sync/collection')] items += [(control.lang(32517).encode('utf-8'), '/sync/collection/remove')] items += [(control.lang(32518).encode('utf-8'), '/sync/watchlist')] items += [(control.lang(32519).encode('utf-8'), '/sync/watchlist/remove')] items += [(control.lang(32520).encode('utf-8'), '/users/me/lists/%s/items')] result = getTrakt('/users/me/lists') result = json.loads(result) lists = [(i['name'], i['ids']['slug']) for i in result] lists = [lists[i//2] for i in range(len(lists)*2)] for i in range(0, len(lists), 2): lists[i] = ((control.lang(32521) % lists[i][0]).encode('utf-8'), '/users/me/lists/%s/items' % lists[i][1]) for i in range(1, len(lists), 2): lists[i] = ((control.lang(32522) % lists[i][0]).encode('utf-8'), '/users/me/lists/%s/items/remove' % lists[i][1]) items += lists select = control.selectDialog([i[0] for i in items], control.lang(32515).encode('utf-8')) if select == -1: return elif select == 4: t = control.lang(32520).encode('utf-8') k = control.keyboard('', t) ; k.doModal() new = k.getText() if k.isConfirmed() else None if (new == None or new == ''): return result = getTrakt('/users/me/lists', post={"name": new, "privacy": "private"}) try: slug = json.loads(result)['ids']['slug'] except: return control.infoDialog(control.lang(32515).encode('utf-8'), heading=str(name), sound=True, icon='ERROR') result = getTrakt(items[select][1] % slug, post=post) else: result = getTrakt(items[select][1], post=post) icon = control.infoLabel('ListItem.Icon') if not result == None else 'ERROR' control.infoDialog(control.lang(32515).encode('utf-8'), heading=str(name), sound=True, icon=icon) except: return
def resolve(url): html = client.request(url) links = re.findall( 'id=[\"\']([^\"\']+)[\"\']><a href=[\"\']#\d+[\"\']><div.+?>([^<]+)<', html) if len(links) < 2: urls = re.findall('<iframe.+?src=[\'"](.+?)[\'"]', html) import urlresolver for url in urls: resolved = urlresolver.resolve(url) if resolved: return resolved break else: import requests choices = [x[1] for x in links] i = control.selectDialog(choices, heading='Choose a link:') ref = url headers = { 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8', 'X-Requested-With': 'XMLHttpRequest', 'Referer': ref, 'Origin': 'http://fullmatchtv.com', 'Host': 'fullmatchtv.com' } s = requests.Session() acp_pid = re.findall( "id=[\"\']acp_post[\"\'].+?value=[\"\'](\d+)[\"\']", html)[0] post_data = { 'acp_currpage': int(i) + 1, 'acp_pid': acp_pid, 'acp_shortcode': 'acp_shortcode', 'action': 'pp_with_ajax' } result = s.post('http://fullmatchtv.com/wp-admin/admin-ajax.php', data=post_data, headers=headers).content url = re.findall('<iframe.+?src=[\'"](.+?)[\'"]', result)[0] import urlresolver return urlresolver.resolve(url)
def moviesListToLibrary(self, url): url = getattr(self, url + '_link') u = urlparse(url).netloc.lower() try: control.hide() if u in self.tmdb_link: items = tmdb_indexer.userlists(url) elif u in self.trakt_link: items = self.trakt_user_list(url, self.trakt_user) items = [(i['name'], i['url']) for i in items] message = 32663 if 'themoviedb' in url: message = 32681 select = control.selectDialog([i[0] for i in items], control.lang(message)) list_name = items[select][0] if select == -1: return link = items[select][1] link = link.split('&sort_by')[0] from resources.lib.modules import library library.libmovies().range(link, list_name) except: log_utils.error() return
def account_info_to_dialog(self): from datetime import datetime try: account_info = self.account_info()['user'] username = account_info['username'] email = account_info['email'] status = 'Premium' if account_info['isPremium'] else 'Not Active' expires = datetime.fromtimestamp(account_info['premiumUntil']) days_remaining = (expires - datetime.today()).days heading = control.lang(40059).upper() items = [] items += [control.lang(40036) % username] items += [control.lang(40035) % email] items += [control.lang(40037) % status] items += [control.lang(40041) % expires] items += [control.lang(40042) % days_remaining] return control.selectDialog(items, 'AllDebrid') except: log_utils.error() return
def manager(name, imdb, tvdb, content): try: post = {"movies": [{"ids": {"imdb": imdb}}]} if content == 'movie' else {"shows": [{"ids": {"tvdb": tvdb}}]} items = [("Add to [B]Collection[/B]", '/sync/collection')] items += [("Remove from [B]Collection[/B]", '/sync/collection/remove')] items += [("Add to [B]Watchlist[/B]", '/sync/watchlist')] items += [("Remove from [B]Watchlist[/B]", '/sync/watchlist/remove')] items += [("Add to [B]new List[/B]", '/users/me/lists/%s/items')] result = getTraktAsJson('/users/me/lists') lists = [(i['name'], i['ids']['slug']) for i in result] lists = [lists[i//2] for i in range(len(lists)*2)] for i in range(0, len(lists), 2): lists[i] = (("Add to [B]%s[/B]" % lists[i][0]), '/users/me/lists/%s/items' % lists[i][1]) for i in range(1, len(lists), 2): lists[i] = (("Remove from [B]%s[/B]" % lists[i][0]), '/users/me/lists/%s/items/remove' % lists[i][1]) items += lists select = control.selectDialog([i[0] for i in items], "Trakt Manager") if select == -1: return elif select == 4: t = "Add to [B]new List[/B]" k = control.keyboard('', t) ; k.doModal() new = k.getText() if k.isConfirmed() else None if (new == None or new == ''): return result = __getTrakt('/users/me/lists', post={"name": new, "privacy": "private"})[0] try: slug = utils.json_loads_as_str(result)['ids']['slug'] except: return control.infoDialog("Trakt Manager", heading=str(name), sound=True, icon='ERROR') result = __getTrakt(items[select][1] % slug, post=post)[0] else: result = __getTrakt(items[select][1], post=post)[0] icon = control.infoLabel('ListItem.Icon') if not result == None else 'ERROR' control.infoDialog("Trakt Manager", heading=str(name), sound=True, icon=icon) except: return
def CCstream(url): try: control.idle() url = urlparse.urljoin('http://kisscartoon.me', url) result = cloudflare.request(url) items = client.parseDOM(result,'select', attrs={'id':'selectQuality'}) items = client.parseDOM(items, 'option', ret='value') url = [] for item in items: try: u = base64.b64decode(item) u = u.encode('utf-8') if u[-3:] == 'm37': q = '1080P' elif u[-3:] == 'm22': q = '720P' elif u[-3:] == 'm18': q = '360P' else: q = 'UNKNOWN' url.append({'q': q, 'u': u}) except: pass if len(url) > 1: q = [i['q'] for i in url] u = [i['u'] for i in url] select = control.selectDialog(q) if select == -1: return url = u[select] else: url = url[0]['u'] player().run(url) except: return
def sourcesDialog(self, items, progress=True): try: sources = [{'label': '00 | [B]%s[/B]' % control.lang(30509).encode('utf-8').upper()}] + items labels = [i['label'] for i in sources] select = control.selectDialog(labels) if select == 0: return self.sourcesDirect(items, progress=progress) if select == -1: return 'close://' next = [y for x,y in enumerate(items) if x >= select] prev = [y for x,y in enumerate(items) if x < select][::-1] items = [items[select-1]] items = [i for i in items+next+prev][:20] if progress == True: self.progressDialog = control.progressDialog self.progressDialog.create(control.addonInfo('name'), '') self.progressDialog.update(0) block = None for i in range(len(items)): try: if progress == True: if self.progressDialog.iscanceled(): break self.progressDialog.update(int((100 / float(len(items))) * i), str(items[i]['label']), str(' ')) if items[i]['source'] == block: raise Exception() w = workers.Thread(self.sourcesResolve, items[i]) w.start() m = '' for x in range(3600): if progress == True: if self.progressDialog.iscanceled(): return self.progressDialog.close() if xbmc.abortRequested == True: return sys.exit() k = control.condVisibility('Window.IsActive(virtualkeyboard)') if k: m += '1'; m = m[-1] if (w.is_alive() == False or x > 30) and not k: break k = control.condVisibility('Window.IsActive(yesnoDialog)') if k: m += '1'; m = m[-1] if (w.is_alive() == False or x > 30) and not k: break time.sleep(0.5) for x in range(30): if m == '': break if progress == True: if self.progressDialog.iscanceled(): return self.progressDialog.close() if xbmc.abortRequested == True: return sys.exit() if w.is_alive() == False: break time.sleep(0.5) if w.is_alive() == True: block = items[i]['source'] if self.url == None: raise Exception() self.selectedSource = items[i]['label'] try: self.progressDialog.close() except: pass control.execute('Dialog.Close(virtualkeyboard)') control.execute('Dialog.Close(yesnoDialog)') return self.url except: pass try: self.progressDialog.close() except: pass except: try: self.progressDialog.close() except: pass
def sourcesDialog(self, items): try: labels = [i['label'] for i in items] select = control.selectDialog(labels) if select == -1: return 'close://' next = [y for x,y in enumerate(items) if x >= select] prev = [y for x,y in enumerate(items) if x < select][::-1] items = [items[select]] items = [i for i in items+next+prev][:20] header = control.addonInfo('name') header2 = header.upper() progressDialog = control.progressDialog if control.setting('progress.dialog') == '0' else control.progressDialogBG progressDialog.create(header, '') progressDialog.update(0) block = None for i in range(len(items)): try: if items[i]['source'] == block: raise Exception() w = workers.Thread(self.sourcesResolve, items[i]) w.start() try: if progressDialog.iscanceled(): break progressDialog.update(int((100 / float(len(items))) * i), str(items[i]['label']), str(' ')) except: progressDialog.update(int((100 / float(len(items))) * i), str(header2), str(items[i]['label'])) m = '' for x in range(3600): try: if xbmc.abortRequested == True: return sys.exit() if progressDialog.iscanceled(): return progressDialog.close() except: pass k = control.condVisibility('Window.IsActive(virtualkeyboard)') if k: m += '1'; m = m[-1] if (w.is_alive() == False or x > 30) and not k: break k = control.condVisibility('Window.IsActive(yesnoDialog)') if k: m += '1'; m = m[-1] if (w.is_alive() == False or x > 30) and not k: break time.sleep(0.5) for x in range(30): try: if xbmc.abortRequested == True: return sys.exit() if progressDialog.iscanceled(): return progressDialog.close() except: pass if m == '': break if w.is_alive() == False: break time.sleep(0.5) if w.is_alive() == True: block = items[i]['source'] if self.url == None: raise Exception() self.selectedSource = items[i]['label'] try: progressDialog.close() except: pass control.execute('Dialog.Close(virtualkeyboard)') control.execute('Dialog.Close(yesnoDialog)') return self.url except: pass try: progressDialog.close() except: pass except: try: progressDialog.close() except: pass