def addSearch(self, url): try: skip = 0 if '|SPLITER|' in url: keep = url url,matcher = url.split('|SPLITER|') skip = 1 section = 1 elif '|SECTION|' in url: matcher = url.replace('|SECTION|','') section = 1 else: section = 0 except: section = 0 link = 'https://t2k-repository.ml/IT/IT/tRmKGjTbr/xmls/clowns.xml' if skip == 0: if section == 1: keyboard = control.keyboard('', control.lang(30702)) keyboard.doModal() if not (keyboard.isConfirmed()): return url = keyboard.getText() keep = url + '|SPLITER|' + matcher else: if (url is None or url == ''): keyboard = control.keyboard('', control.lang(30702)) keyboard.doModal() if not (keyboard.isConfirmed()): return url = keyboard.getText() if (url is None or url == ''): return if section == 1: input = keep else: input = url def search(): return [input] query = cache.get(search, 600000000, table='rel_srch') def search(): return [x for y,x in enumerate((query + [input])) if x not in (query + [input])[:y]] cache.get(search, 0, table='rel_srch') links = client.request(link) links = re.findall(r'<link>(.+?)</link>', links) if section == 0: links = [i for i in links if str(i).startswith('http')] else: links = [i for i in links if str(i).startswith('http') and matcher.lower() in str(i).lower()] self.list = [] ; threads = [] for link in links: threads.append(workers.Thread(self.it_list, link)) [i.start() for i in threads] [i.join() for i in threads] self.list = [i for i in self.list if url.lower() in i['name'].lower()] for i in self.list: try: name = '' if not i['vip'] in ['No-Name TV']: name += '[B]%s[/B] | ' % i['vip'].upper() name += i['name'] i.update({'name' : name}) except: pass for i in self.list: i.update({'content': 'videos'}) self.addDirectory(self.list)
def search(self, query=None): try: if control.infoLabel('Container.PluginName') == '': return control.dialog.ok('Exodus', control.lang(30518).encode('utf-8'), '', '') if not control.infoLabel('ListItem.Title') == '': self.query = control.window.getProperty( '%s.movie.search' % control.addonInfo('id')) elif query == None: t = control.lang(30201).encode('utf-8') k = control.keyboard('', t) k.doModal() self.query = k.getText() if k.isConfirmed() else None else: self.query = query if (self.query == None or self.query == ''): return control.window.setProperty( '%s.movie.search' % control.addonInfo('id'), self.query) url = self.search_link % urllib.quote_plus(self.query) self.list = cache.get(self.trakt_list, 0, url, self.trakt_user) self.worker() self.movieDirectory(self.list) return self.list except: return
def search_new(self): k = control.keyboard('', control.lang(32010)) k.doModal() query = k.getText() if k.isConfirmed() else None if not query: return control.closeAll() try: from sqlite3 import dbapi2 as database except ImportError: from pysqlite2 import dbapi2 as database try: dbcon = database.connect(control.searchFile) dbcur = dbcon.cursor() dbcur.execute('''INSERT INTO easynews VALUES (?,?)''', (None, query)) dbcur.connection.commit() except: from resources.lib.modules import log_utils log_utils.error() finally: dbcur.close() dbcon.close() control.closeAll() control.execute( 'ActivateWindow(Videos,plugin://plugin.video.venom/?action=en_searchResults&query=%s,return)' % quote_plus(query))
def captcha_resolve(response, cap_cookie): import os from resources.lib.modules import client from resources.lib.modules import control try: i = os.path.join(control.dataPath, 'img') f = control.openFile(i, 'w') f.write(client.request(response, cookie=cap_cookie)) f.close() f = control.image(450, 5, 375, 115, i) d = control.windowDialog d.addControl(f) control.deleteFile(i) d.show() t = '' k = control.keyboard('', t) k.doModal() c = k.getText() if k.isConfirmed() else None if c == '': c = None d.removeControl(f) d.close() return c except: return
def rename(self, type, folder_id=None, folder_name=None): try: if type == 'folder': url = folder_rename_url t = control.lang(40049) % type else: if not control.yesnoDialog( control.lang(40049) % folder_name + ': [B](YOU MUST ENTER MATCHING FILE EXT.)[/B]', '', ''): return url = item_rename_url t = control.lang( 40049 ) % type + ': [B](YOU MUST ENTER MATCHING FILE EXT.)[/B]' k = control.keyboard('', t) k.doModal() q = k.getText() if k.isConfirmed() else None if not q: return data = {'id': folder_id, 'name': q} response = self._post(url, data=data) if not response: return if 'status' in response: if response.get('status') == 'success': control.refresh() except: log_utils.error()
def search(self, query=None): if query is None: keydialog = control.keyboard('', "Enter Search") keydialog.doModal() self.query = keydialog.getText() if keydialog.isConfirmed() else None else: self.query = query if self.query is None or self.query is '': return if query is None: control.execute("Container.Update(%s?action=search&query=%s, false)" % (sys.argv[0], self.query)) return result = client.request("http://www.masterani.me/api/anime/search?search=%s&sb=true" % self.query) result = json.loads(result) print result if len(result) is 0: return for i in result: self.list.append({'anime_id': i['id'], 'status': 1}) self.worker() self.add_directory(self.list)
def _get_keyboard(default="", heading="", hidden=False): keyboard = control.keyboard(default, heading, hidden) keyboard.doModal() if keyboard.isConfirmed(): return unicode(keyboard.getText(), "utf-8") return default
def search(self, query=None): try: if not control.infoLabel('ListItem.Title') == '': self.query = control.window.getProperty( '%s.tvshow.search' % control.addonInfo('id')) elif query == None: t = control.lang(30231).encode('utf-8') k = control.keyboard('', t) k.doModal() self.query = k.getText() if k.isConfirmed() else None else: self.query = query if (self.query == None or self.query == ''): return control.window.setProperty( '%s.tvshow.search' % control.addonInfo('id'), self.query) url = self.search_link % urllib.quote_plus(self.query) self.list = cache.get(self.trakt_list, 0, url) self.worker() self.tvshowDirectory(self.list) return self.list except: return
def search(self, query=None): if query is None: keydialog = control.keyboard('', "Enter Search") keydialog.doModal() self.query = keydialog.getText() if keydialog.isConfirmed( ) else None else: self.query = query if self.query is None or self.query is '': return if query is None: control.execute( "Container.Update(%s?action=search&query=%s, false)" % (sys.argv[0], self.query)) return result = client.request( "http://www.masterani.me/api/anime/search?search=%s&sb=true" % self.query) result = json.loads(result) print result if len(result) is 0: return for i in result: self.list.append({'anime_id': i['id'], 'status': 1}) self.worker() self.add_directory(self.list)
def search(self, query=None): if query is None: keydialog = control.keyboard('', "Enter Search") keydialog.doModal() self.query = keydialog.getText() if keydialog.isConfirmed() else None else: self.query = query if self.query is None or self.query is '': return result = client.request("https://www.masterani.me/api/anime/filter?search=%s&order=relevance_desc&page=1&detailed=1" % self.query) try: result = json.loads(result) result = result['data'] except: xbmcgui.Dialog().notification("Masterani Redux", "No results for \"%s\"." % self.query) print result if len(result) is 0: return items = masterani.extract_data_from_filter_list(result) #self.worker() self.add_directory(items)
def _get_keyboard(default="", heading="", hidden=False): keyboard = control.keyboard(default, heading, hidden) keyboard.doModal() if keyboard.isConfirmed(): return six.ensure_text(keyboard.getText()) return default
def search_new(self): # need fix for when context menu returns here brings keyboard input back up t = control.lang(32010) k = control.keyboard('', t) k.doModal() q = k.getText() if k.isConfirmed() else None if not q: return try: from sqlite3 import dbapi2 as database except ImportError: from pysqlite2 import dbapi2 as database try: dbcon = database.connect(control.searchFile) dbcur = dbcon.cursor() dbcur.execute("INSERT INTO movies VALUES (?,?)", (None, q)) # dbcur.execute("INSERT INTO movies VALUES (?,?)", (None, py_tools.ensure_text(q))) # ensure_text?, search of BRÜNO not saved to db in 18? dbcur.connection.commit() except: log_utils.error() finally: dbcur.close() ; dbcon.close() url = self.search_link + quote_plus(q) if control.getKodiVersion() >= 18: self.get(url) else: url = '%s?action=moviePage&url=%s' % (argv[0], quote_plus(url)) control.execute('Container.Update(%s)' % url)
def cartoons(self, url): try: if url == self.cartoonsearch_link: k = control.keyboard('', '') k.setHeading(control.infoLabel('ListItem.Label')) k.doModal() if k.getText() == '' or not k.isConfirmed(): return url = self.cartoonsearch_link % urllib.quote_plus( k.getText().split()[0]) self.list = cache.get(self.cartoon_list, 0, url) for i in self.list: i.update({ 'nextaction': 'phtoons.cartoons', 'nexticon': self.cartoons_image % (random.randint(1, 10)), 'nextfanart': self.cartoons_fanart }) for i in self.list: i.update({'action': 'phtoons.cartoonstreams'}) for i in self.list: i.update({'fanart': self.cartoons_fanart}) self.addDirectory(self.list) return self.list except: pass
def person(self): k = control.keyboard('', control.lang(32010)) k.doModal() q = k.getText().strip() if k.isConfirmed() else None if not q: return url = self.persons_link + quote_plus(q) self.persons(url)
def search_new(self): control.hide() t = control.lang(32010) k = control.keyboard('', t) k.doModal() q = k.getText() if k.isConfirmed() else None if not q: return try: from sqlite3 import dbapi2 as database except: from pysqlite2 import dbapi2 as database try: dbcon = database.connect(control.searchFile) dbcur = dbcon.cursor() dbcur.execute("INSERT INTO furk VALUES (?,?)", (None, q)) dbcur.connection.commit() except: log_utils.error() finally: dbcur.close() dbcon.close() url = quote_plus(q) if control.getKodiVersion() >= 18: self.furk_meta_search(url) else: url = '%s?action=furkMetaSearch&url=%s' % (sys.argv[0], quote_plus(url)) control.execute('Container.Update(%s)' % url)
def search(self, query=None): if control.infoLabel('Container.PluginName') == '': return control.dialog.ok('Exodus', control.lang(30518).encode('utf-8'), '', '') if not control.infoLabel('ListItem.Title') == '': self.query = control.window.getProperty('%s.channel.search' % control.addonInfo('id')) elif query == None: t = control.lang(30201).encode('utf-8') k = control.keyboard('', t) k.doModal() self.query = k.getText() if k.isConfirmed() else None else: self.query = query if (self.query == None or self.query == ''): return control.window.setProperty( '%s.channel.search' % control.addonInfo('id'), self.query) response = get( control.apollo_static_link + 'search.php?type=livetv&search=%s' % urllib.quote_plus(self.query), verify=False) data = json.loads(response.text) for channel in data['result']: try: self.list.append({ 'id': str(channel['id']), 'name': str(channel['name'].encode('utf-8')), 'title': '', 'hd': str(channel['hd']), 'url': 'plugin://' + control.addon().getAddonInfo('id') + '/?action=apollo&imdb=9999&season=%s&title=%s' % (channel['id'], channel['id']), 'poster': str(channel['logo']) }) except: print "####### ERROR Getting List from Server: %s %s" % (str( channel['id']), channel) pass try: self.list = sorted(self.list, key=lambda k: k['name']) except: pass self.channelDirectory(self.list, 99) return self.list
def search(self, query=None): if query is None: keydialog = control.keyboard('', "Enter Search") keydialog.doModal() self.query = keydialog.getText() if keydialog.isConfirmed( ) else None else: self.query = query if self.query is None or self.query is '': return result = client.request( "https://www.masterani.me/api/anime/filter?search=%s&order=relevance_desc&page=1&detailed=1" % self.query.replace(" ", "%20")) try: result = json.loads(result) except: xbmcgui.Dialog().notification( "Masterani Redux", "No results for \"%s\"." % self.query) print result if len(result) is 0: return items = masterani.extract_data_from_filter_list(result) #self.worker() self.add_directory(items)
def listAdd(successNotification=True): 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" }) try: slug = json.loads(result)['ids']['slug'] if successNotification: control.notification(title=32070, message=33661, icon='INFO', sound=notificationSound) return slug except: control.notification(title=32070, message=33584, icon='iNFO', sound=notificationSound) return None
def search(self, query=None): try: if control.infoLabel('Container.PluginName') == '': return control.dialog.ok('Exodus', control.lang(30518).encode('utf-8'), '', '') if not control.infoLabel('ListItem.Title') == '': self.query = control.window.getProperty('%s.movie.search' % control.addonInfo('id')) elif query == None: t = control.lang(30201).encode('utf-8') k = control.keyboard('', t) ; k.doModal() self.query = k.getText() if k.isConfirmed() else None else: self.query = query if (self.query == None or self.query == ''): return control.window.setProperty('%s.movie.search' % control.addonInfo('id'), self.query) url = self.search_link % urllib.quote_plus(self.query) self.list = cache.get(self.trakt_list, 0, url) self.worker() self.movieDirectory(self.list) return self.list except: return
def person(self): t = control.lang(32010).encode('utf-8') k = control.keyboard('', t) ; k.doModal() q = k.getText().strip() if k.isConfirmed() else None if not q: return url = self.persons_link + urllib.quote_plus(q) self.persons(url)
def addSearch(self, url=None): try: link = 'http://cosmix.offshorepastebin.com/Weblinks/adult/search.xml' if (url == None or url == ''): keyboard = control.keyboard( '', control.lang(30702).encode('utf-8')) keyboard.doModal() if not (keyboard.isConfirmed()): return url = keyboard.getText() if (url == None or url == ''): return def search(): return [url] query = cache.get(search, 600000000, table='rel_srch') def search(): return [ x for y, x in enumerate((query + [url])) if x not in (query + [url])[:y] ] cache.get(search, 0, table='rel_srch') links = client.request(link) links = re.findall('<link>(.+?)</link>', links) links = [i for i in links if str(i).startswith('http')] self.list = [] threads = [] for link in links: threads.append(workers.Thread(self.jizzplanet_list, link)) [i.start() for i in threads] [i.join() for i in threads] self.list = [ i for i in self.list if url.lower() in i['name'].lower() ] for i in self.list: try: name = '' if not i['vip'] in ['jizzplanet TV']: name += '[B]%s[/B] | ' % i['vip'].upper() name += i['name'] i.update({'name': name}) except: pass for i in self.list: i.update({'content': 'videos'}) self.addDirectory(self.list) except: pass
def getText(self, title, hidden=False): entered_text = '' keyb = control.keyboard('', title, hidden) keyb.doModal() if (keyb.isConfirmed()): entered_text = keyb.getText() return entered_text
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 searchApp(): k = control.keyboard('', 'Search APP') k.doModal() q = k.getText() if k.isConfirmed() else None if (q == None or q == ''): return query = '/apps/search/query=%s/limit=50' % q url = aptoide_API + query getAppsUrl(url)
def addSearch(self, url=None): try: link = 'http://brettusbuilds.com/.WHITE%20DEVIL/SEARCH/SEARCH.XML' if (url == None or url == ''): keyboard = control.keyboard( '', control.lang(30702).encode('utf-8')) keyboard.doModal() if not (keyboard.isConfirmed()): return url = keyboard.getText() if (url == None or url == ''): return def search(): return [url] query = cache.get(search, 600000000, table='rel_srch') def search(): return [ x for y, x in enumerate((query + [url])) if x not in (query + [url])[:y] ] cache.get(search, 0, table='rel_srch') links = client.request(link) links = re.findall('<link>(.+?)</link>', links) links = [i for i in links if str(i).startswith('http')] self.list = [] threads = [] for link in links: threads.append(workers.Thread(self.streams_list, link)) [i.start() for i in threads] [i.join() for i in threads] self.list = [ i for i in self.list if url.lower() in i['name'].lower() ] for i in self.list: try: name = '' if not i['vip'] in ['streams TV']: name += '[B]%s[/B] | ' % i['vip'].upper() name += i['name'] i.update({'name': name}) except: pass self.addDirectory(self.list, mode=False) except: pass
def searchMenu(self): control.idle() t = control.lang(32010).encode('utf-8') k = control.keyboard('', t); k.doModal() q = k.getText() if k.isConfirmed() else None if q is None or q == '': return url = '%s?action=search&q=%s&page=1' % (sys.argv[0], urllib.quote_plus(q)) control.execute('Container.Update(%s)' % url)
def searchMenu(self): t = control.lang(32010).encode('utf-8') k = control.keyboard('', t) k.doModal() q = k.getText() if not k.isConfirmed(): return self.search(q)
def renameItem(title, id, type): data = {'id': id , 'type': type} if type == 'folder': renameUrl = '/api/folder/rename' elif type == 'torrent': renameUrl = '/api/transfer/rename' else: renameUrl = premiumizeRenameItem k = control.keyboard(title, 'Rename Item') ; k.doModal() q = k.getText() if k.isConfirmed() else None if (q == None or q == ''): return data['name'] = q url = urlparse.urljoin(premiumize_Api, renameUrl) r = reqJson(url, data=data) control.refresh()
def search_new(self): t = control.lang(32010).encode('utf-8') k = control.keyboard('', t) ; k.doModal() q = k.getText().strip() if k.isConfirmed() else None if not q: return search_history = control.setting('moviesearch') if q not in search_history.split('\n'): control.setSetting('moviesearch', q + '\n' + search_history) url = self.search_link + urllib.quote_plus(q) self.get(url)
def traktSearchLists(self, media_type): k = control.keyboard('', getLS(32010)) k.doModal() q = k.getText() if k.isConfirmed() else None if not q: return control.closeAll() page_limit = getSetting('page.item.limit') url = 'https://api.trakt.tv/search/list?limit=%s&page=1&query=' % page_limit + quote_plus(q) control.closeAll() if media_type == 'movies': control.execute('ActivateWindow(Videos,plugin://plugin.video.venom/?action=movies_PublicLists&url=%s,return)' % (quote_plus(url))) else: control.execute('ActivateWindow(Videos,plugin://plugin.video.venom/?action=tv_PublicLists&url=%s,return)' % (quote_plus(url)))
def listAdd(successNotification=True): t = control.lang(32520) k = control.keyboard('', t) ; k.doModal() new = k.getText() if k.isConfirmed() else None if not new: return result = getTrakt('/users/me/lists', post = {"name" : new, "privacy" : "private"}) try: slug = jsloads(result)['ids']['slug'] if successNotification: control.notification(title=32070, message=33661) return slug except: control.notification(title=32070, message=33584) return None
def ACsearch(url, image, fanart): keyboard = control.keyboard('', control.lang(30702).encode('utf-8')) keyboard.setHeading('CARTOON SEARCH') keyboard.doModal() if not keyboard.isConfirmed(): return search = keyboard.getText() search = re.sub(r'\W+|\s+','+', search) if search == '': return url = 'http://www.animedreaming.tv/search.php?searchquery='+search url = url.encode('utf-8') ACcat(url, image, fanart)
def search(self): try: control.idle() k = control.keyboard('', 'Zoeken') ; k.doModal() q = k.getText() if k.isConfirmed() else None if (q == None or q == ''): return url = self.search_link % (urllib.quote_plus(q)) url = '%s?action=search_results&url=%s' % (sys.argv[0], urllib.quote_plus(url)) control.execute('Container.Update(%s)' % url) except: return
def ACsearch(url, image, fanart): keyboard = control.keyboard('', control.lang(30702).encode('utf-8')) keyboard.setHeading(control.infoLabel('ListItem.Label')) keyboard.doModal() if not keyboard.isConfirmed(): return search = keyboard.getText() search = re.sub(r'\W+|\s+', '+', search) if search == '': return url = 'http://www.animedreaming.tv/search.php?searchquery=' + search url = url.encode('utf-8') ACcat(url, image, fanart)
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 listAdd(successNotification = True): 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'] if successNotification: interface.Dialog.notification(title = 32515, message = 33661, icon = interface.Dialog.IconSuccess) return slug except: interface.Dialog.notification(title = 32515, message = 33584, icon = interface.Dialog.IconError) return None
def ACsearch(url, image, fanart): keyboard = control.keyboard('', control.lang(30702).encode('utf-8')) keyboard.setHeading('CARTOON SEARCH') keyboard.doModal() if not keyboard.isConfirmed(): return search = keyboard.getText() search = re.sub(r'\W+|\s+','-', search) if search == '': return url = 'http://cartoons8.co/search/?s='+search url = url.encode('utf-8') ACcat(url, image, fanart)
def person(self): try: control.idle() t = control.lang(32010).encode('utf-8') k = control.keyboard('', t) ; k.doModal() q = k.getText() if k.isConfirmed() else None if (q == None or q == ''): return url = self.persons_link + urllib.quote_plus(q) url = '%s?action=moviePersons&url=%s' % (sys.argv[0], urllib.quote_plus(url)) control.execute('Container.Update(%s)' % url) except: return
def anime(self, url): try: if url == self.animesearch_link: k = control.keyboard('', '') ; k.setHeading(control.infoLabel('ListItem.Label')) ; k.doModal() if k.getText() == '' or not k.isConfirmed(): return url = self.animesearch_link % urllib.quote_plus(k.getText()) self.list = cache.get(self.anime_list, 0, url) for i in self.list: i.update({'action': 'phtoons.animestreams'}) for i in self.list: i.update({'fanart': self.anime_fanart}) self.addDirectory(self.list) return self.list except: pass
def search_new(self): t = control.lang(32010).encode('utf-8') k = control.keyboard('', t) ; k.doModal() q = k.getText().strip() if k.isConfirmed() else None if not q: return if (q == None or q == ''): return try: from sqlite3 import dbapi2 as database except: from pysqlite2 import dbapi2 as database dbcon = database.connect(control.searchFile) dbcur = dbcon.cursor() dbcur.execute("INSERT INTO movies VALUES (?,?)", (None,q)) dbcon.commit() dbcur.close() url = self.search_link + urllib.quote_plus(q) self.get(url)
def cartoons(self, url): try: if url == self.cartoonsearch_link: k = control.keyboard('', '') ; k.setHeading(control.infoLabel('ListItem.Label')) ; k.doModal() if k.getText() == '' or not k.isConfirmed(): return url = self.cartoonsearch_link % urllib.quote_plus(k.getText().split()[0]) self.list = cache.get(self.cartoon_list, 0, url) for i in self.list: i.update({'nextaction': 'phtoons.cartoons', 'nexticon': self.cartoons_image % (random.randint(1,10)), 'nextfanart': self.cartoons_fanart}) for i in self.list: i.update({'action': 'phtoons.cartoonstreams'}) for i in self.list: i.update({'fanart': self.cartoons_fanart}) self.addDirectory(self.list) return self.list except: pass
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 person(self, query=None): try: if query == None: t = control.lang(30201).encode('utf-8') k = control.keyboard('', t) ; k.doModal() self.query = k.getText() if k.isConfirmed() else None else: self.query = query if (self.query == None or self.query == ''): return url = self.persons_link % urllib.quote_plus(self.query) self.list = cache.get(self.imdb_person_list, 0, url) for i in range(0, len(self.list)): self.list[i].update({'action': 'movies'}) self.addDirectory(self.list) return self.list 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 search_new(self): control.idle() t = control.lang(32010).encode('utf-8') k = control.keyboard('', t) ; k.doModal() q = k.getText() if k.isConfirmed() else None if (q == None or q == ''): return try: from sqlite3 import dbapi2 as database except: from pysqlite2 import dbapi2 as database dbcon = database.connect(control.searchFile) dbcur = dbcon.cursor() dbcur.execute("INSERT INTO furk VALUES (?,?)", (None,q)) dbcon.commit() dbcur.close() url = urllib.quote_plus(q) url = '%s?action=furkMetaSearch&url=%s' % (sys.argv[0], urllib.quote_plus(url)) control.execute('Container.Update(%s)' % url)
def person(self, query=None): try: control.idle() sysloc = [urlparse.urlparse(sys.argv[0]).netloc, 'plugin.program.super.favourites' ] sysplg = True if control.infoLabel('Container.PluginName') in sysloc else False if query == None: t = control.lang(32010).encode('utf-8') k = control.keyboard('', t) ; k.doModal() query = k.getText() if k.isConfirmed() else None if (query == None or query == '' or sysplg == False): return url = self.persons_link + urllib.quote_plus(query) url = '%s?action=moviePersons&url=%s' % (sys.argv[0], urllib.quote_plus(url)) control.execute('Container.Update(%s)' % url) except: 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 search_new(self): control.idle() t = control.lang(32010).encode('utf-8') k = control.keyboard('', t) ; k.doModal() q = k.getText() if k.isConfirmed() else None if (q == None or q == ''): return #try: from sqlite3 import dbapi2 as database #except: from pysqlite2 import dbapi2 as database #dbcon = database.connect(control.searchFile) #dbcur = dbcon.cursor() #dbcur.execute("INSERT INTO movies VALUES (?,?)", (None,q)) #dbcon.commit() #dbcur.close() url = self.search_link + q.replace(" ", "+") #url = '%s?action=moviePage&url=%s' % (sys.argv[0], urllib.quote_plus(url)) #control.execute('Container.Update(%s)' % url) movies().get(url)
def addSearch(self, url=None): try: link = 'http://phoenixtv.offshorepastebin.com/main/search.xml' if (url == None or url == ''): keyboard = control.keyboard('', control.lang(30702).encode('utf-8')) keyboard.doModal() if not (keyboard.isConfirmed()): return url = keyboard.getText() if (url == None or url == ''): return def search(): return [url] query = cache.get(search, 600000000, table='rel_srch') def search(): return [x for y,x in enumerate((query + [url])) if x not in (query + [url])[:y]] cache.get(search, 0, table='rel_srch') links = client.request(link) links = re.findall('<link>(.+?)</link>', links) links = [i for i in links if str(i).startswith('http')] self.list = [] ; threads = [] for link in links: threads.append(workers.Thread(self.streamhub_list, link)) [i.start() for i in threads] ; [i.join() for i in threads] self.list = [i for i in self.list if url.lower() in i['name'].lower()] for i in self.list: try: name = '' if not i['vip'] in ['Phoenix TV']: name += '[B]%s[/B] | ' % i['vip'].upper() name += i['name'] i.update({'name' : name}) except: pass for i in self.list: i.update({'content': 'videos'}) self.addDirectory(self.list) except: pass
def authTrakt(): try: if getTraktCredentialsInfo() == True: if control.yesnoDialog(control.lang(30479).encode('utf-8'), control.lang(30481).encode('utf-8'), '', 'Trakt', control.lang(30483).encode('utf-8'), control.lang(30482).encode('utf-8')): control.setSetting(id='trakt.user', value='') control.setSetting(id='trakt.token', value='') control.setSetting(id='trakt.refresh', value='') raise Exception() if control.yesnoDialog(control.lang(30484).encode('utf-8') + '[COLOR skyblue]http://trakt.tv/pin/7920[/COLOR]', control.lang(30485).encode('utf-8'), control.lang(30486).encode('utf-8'), 'Trakt', control.lang(30487).encode('utf-8'), control.lang(30488).encode('utf-8')): raise Exception() k = control.keyboard('', control.lang(30487).encode('utf-8')) k.doModal() ; pin = k.getText() if k.isConfirmed() else None if pin == '' or pin == None: raise Exception() trakt_base = 'http://api-v2launch.trakt.tv' headers = {'Content-Type': 'application/json', 'trakt-api-key': 'c029c80fd3d3a5284ee820ba1cf7f0221da8976b8ee5e6c4af714c22fc4f46fa', 'trakt-api-version': '2'} post = {'client_id': 'c029c80fd3d3a5284ee820ba1cf7f0221da8976b8ee5e6c4af714c22fc4f46fa', 'client_secret': '90a1840447a1e39d350023263902fe7010338d19789e6260f18df56a8b07a68a', 'redirect_uri': 'urn:ietf:wg:oauth:2.0:oob', 'grant_type': 'authorization_code', 'code': pin} result = client.request(urlparse.urljoin(trakt_base, '/oauth/token'), post=json.dumps(post), headers=headers) result = json.loads(result) token, refresh = result['access_token'], result['refresh_token'] headers['Authorization'] = 'Bearer %s' % token result = client.request(urlparse.urljoin(trakt_base, '/users/me'), headers=headers) result = json.loads(result) user = result['username'] control.setSetting(id='trakt.user', value=user) control.setSetting(id='trakt.token', value=token) control.setSetting(id='trakt.refresh', value=refresh) raise Exception() except: control.openSettings('3.1')
def implementsearch(): from resources.lib.modules import control; try: control.idle(); title = control.lang(32726).encode('utf-8'); kb = control.keyboard('', title); kb.doModal(); text = kb.getText() if kb.isConfirmed() else None; if (text == None or text == ''): return None; else: return text; except Exception as inst: logger.error(inst); return None;
def searchDirectory(query=None): if (query == None or query == ''): keyboard = control.keyboard('', control.lang(30702).encode('utf-8')) keyboard.doModal() if not (keyboard.isConfirmed()): return query = keyboard.getText() if (query == None or query == ''): return def search(): return [query] result = cache.get(search, 600000000, table='rel_srch') def search(): return [x for y,x in enumerate((result + [query])) if x not in (result + [query])[:y]] result = cache.get(search, 0, table='rel_srch') global global_search ; global_search = [] def worker(url): global_search.append(str(client.request(url))) servers = client.request(phLink) servers = str(servers).replace('\n','') servers = re.findall('</name><link>(.+?)</link>', servers) servers = [urlparse.urlparse(i).netloc for i in servers] servers = [phSearch % i for i in servers if not 'mecca' in i] threads = [] for server in servers: threads.append(workers.Thread(worker, server)) [i.start() for i in threads] [i.join() for i in threads] urls = [] for i in global_search: try: r = base64.b64decode(i) except: r = '' if '</' in r: urls += [r] else: urls += [i] global_search = [] urls = [str(i).replace('\n','') for i in urls] urls = [re.findall('<link>(.+?)</link>', i)[:30] for i in urls] urls = sum(urls, []) threads = [] for url in urls: threads.append(workers.Thread(worker, url)) [i.start() for i in threads] [i.join() for i in threads] links = [] for i in global_search: try: r = base64.b64decode(i) except: r = '' if '</' in r: links += [r] else: links += [i] global_search = [] for link in links: try: link = str(link).replace('\r','').replace('\n','').replace('\t','').replace(' ','') try: fanart = re.findall('<fanart>(.+?)</fanart>', link)[0] except: fanart = '0' try: vip = re.findall('<poster>(.+?)</poster>', link)[0] except: vip = '' if vip == 'Team Phoenix': vip = '' try: content = re.findall('<meta>(.+?)</meta>', link)[0] except: content = '0' try: tvshow = re.findall('<tvshow>(.+?)</tvshow>', link)[0] except: tvshow = '0' if content in ['seasons', 'episodes'] and tvshow == '0': content = '0' dirs = re.compile('<dir>(.+?)</dir>').findall(link) for dir in dirs: try: data = {} name = re.findall('<name>(.+?)</name>', dir)[0] name = cleantitle(name) if not query.lower() in name.lower() : raise Exception() url = re.findall('<link>(.+?)</link>', dir)[0] try: image = re.findall('<thumbnail>(.+?)</thumbnail>', dir)[0] except: image = '0' try: fanart2 = re.findall('<fanart>(.+?)</fanart>', dir)[0] except: fanart2 = fanart if content =='tvshows': try: title = cleantitle(name).encode('utf-8') data = {'title': title, 'tvshowtitle': title} except: pass if re.search('[a-zA-Z]', vip): name += ' [COLOR orange]%s[/COLOR]' % vip addDirectoryItem(name, url, 'ndmode', image, image, fanart2, '0', content, data) except: pass items = re.compile('<item>(.+?)</item>').findall(link) for item in items: try: data = {} name = re.findall('<title>(.+?)</title>', item)[0] name = cleantitle(name) if not query.lower() in name.lower() : raise Exception() url = re.findall('<link>(.+?)</link>', item)[0] try: image = re.findall('<thumbnail>(.+?)</thumbnail>', item)[0] except: image = '0' try: fanart2 = re.findall('<fanart>(.+?)</fanart>', item)[0] except: fanart2 = fanart if content =='movies': try: title = cleantitle(name).encode('utf-8') data = {'title': title} title, year = re.compile('(.+?)[(](\d{4})[)]').findall(name)[0] title = cleantitle(title).encode('utf-8') data = {'title': title, 'year': year} except: pass if re.search('[a-zA-Z]', vip): name += ' [COLOR orange]%s[/COLOR]' % vip if 'sublink' in url: addDirectoryItem(name, url, 'subDirectory', image, image, fanart2, '0', content, data, isFolder=True) else: addDirectoryItem(name, url, 'resolveUrl', image, image, fanart2, '0', content, data, isFolder=False) except: pass except: pass control.directory(int(sys.argv[1]), cacheToDisc=True)
def addSearch(self, url): try: skip = 0 if '|SPLITER|' in url: keep = url url,matcher = url.split('|SPLITER|') skip = 1 section = 1 elif '|SECTION|' in url: matcher = url.replace('|SECTION|','') section = 1 else: section = 0 except: section = 0 link = 'http://' if skip == 0: if section == 1: keyboard = control.keyboard('', control.lang(30702).encode('utf-8')) keyboard.doModal() if not (keyboard.isConfirmed()): return url = keyboard.getText() keep = url + '|SPLITER|' + matcher else: if (url == None or url == ''): keyboard = control.keyboard('', control.lang(30702).encode('utf-8')) keyboard.doModal() if not (keyboard.isConfirmed()): return url = keyboard.getText() if (url == None or url == ''): return if section == 1: input = keep else: input = url def search(): return [input] query = cache.get(search, 600000000, table='rel_srch') def search(): return [x for y,x in enumerate((query + [input])) if x not in (query + [input])[:y]] cache.get(search, 0, table='rel_srch') links = client.request(link) links = re.findall('<link>(.+?)</link>', links) if section == 0: links = [i for i in links if str(i).startswith('http')] else: links = [i for i in links if str(i).startswith('http') and matcher.lower() in str(i).lower()] self.list = [] ; threads = [] for link in links: threads.append(workers.Thread(self.noname_list, link)) [i.start() for i in threads] ; [i.join() for i in threads] self.list = [i for i in self.list if url.lower() in i['name'].lower()] for i in self.list: try: name = '' if not i['vip'] in ['noname TV']: name += '[B]%s[/B] | ' % i['vip'].upper() name += i['name'] i.update({'name' : name}) except: pass for i in self.list: i.update({'content': 'videos'}) self.addDirectory(self.list)