def __init__(self): # Parse parameters... params = dict(part.split('=') for part in sys.argv[2][1:].split('&')) self.current_page = int(params.get("page", "1")) self.action = params.get("action", None) # self.sort_method = params.get("sort", control.infoLabel("Container.SortMethod")) self.sort_method = urllib.unquote_plus(params.get("sort", "NONE")) self.blog_url = urllib.unquote_plus(params.get("blog-url", "")) self.browse_url = "%s/Browse/Blogs?sort=%s&page=%i&%s" utils.set_no_sort() if self.action is None or self.action == "browse-blogs": if self.sort_method == control.lang(30701): # recent self.sort = "recent" elif self.sort_method == control.lang(30704): # AtoZ self.sort = "atoz" else: self.show_sort() return self.browse() elif self.action == "list-blog" and self.blog_url != "": if self.sort_method == control.lang(30701): # recent self.sort = "recent" elif self.sort_method == control.lang(30702): # viewed self.sort = "viewed" elif self.sort_method == control.lang(30703): # rating self.sort = "rating" else: self.show_list_sort() return self.list() print "fail: action=%s&blog-url=%s" % (self.action, self.blog_url) return
def play_video(self): # Get current list item details... title = unicode(xbmc.getInfoLabel("ListItem.Title"), "utf-8") thumbnail = xbmc.getInfoImage("ListItem.Thumb") plot = unicode(xbmc.getInfoLabel("ListItem.Plot"), "utf-8") genre = unicode(xbmc.getInfoLabel("ListItem.Genre"), "utf-8") total_time = unicode(xbmc.getInfoLabel("ListItem.EndTime"), "utf-8") # Show wait dialog while parsing data... dialog_wait = xbmcgui.DialogProgress() dialog_wait.create(control.lang(30504), title) if self.video_url is None: # Close wait dialog... dialog_wait.close() del dialog_wait # Message... xbmcgui.Dialog().ok(control.lang(30000), control.lang(30505)) return # Close wait dialog... dialog_wait.close() del dialog_wait player().run({ "url": self.video_url, "thumb": thumbnail, "plot": plot, "genre": genre, "title": title, "endTime": total_time, "repeat": "Repeat One" }) return
def __init__(self): # Parse parameters... params = dict(part.split('=') for part in sys.argv[2][1:].split('&')) self.current_page = int(params.get("page", "1")) self.action = params.get("action", None) # self.sort_method = params.get("sort", control.infoLabel("Container.SortMethod")) self.sort_method = urllib.unquote_plus(params.get("sort", "NONE")) self.browse_url = "%sBrowse/Authors?direction=desc&sort=%s&page=%i&term=%s&%s" self.search_term = urllib.unquote_plus(params.get("query", "")) self.author_url = urllib.unquote_plus(params.get("author-url", "")) utils.set_no_sort() if self.action is None or self.action == "browse-authors": if self.sort_method == control.lang(30705): # episodes self.sort = "episodes" elif self.sort_method == control.lang(30704): # AtoZ self.sort = "atoz" else: self.show_sort() return self.browse() return elif self.action == "search-authors": self.sort = "" self.search() return elif self.action == "list-author" and self.author_url != "": self.list() return print "fail: action=%s&sort=%s&author-url=%s" % (self.action, self.sort_method, self.author_url) return
def clear(table=None, withyes=True): try: control.idle() if table == None: table = ['rel_list', 'rel_lib'] elif not type(table) == list: table = [table] if withyes: yes = control.yesnoDialog(control.lang(30401).encode('utf-8'), '', '') if not yes: return else: pass dbcon = database.connect(control.cacheFile) dbcur = dbcon.cursor() for t in table: try: dbcur.execute("DROP TABLE IF EXISTS %s" % t) dbcur.execute("VACUUM") dbcon.commit() except: pass control.infoDialog(control.lang(30402).encode('utf-8')) except: pass
def torrent_cache_clear(): confirmation = control.yesno_dialog( control.ADDON_NAME, "Are you sure you wish to clear the cache?") if not confirmation: return try: control.torrentScrapeCacheFile_lock.acquire() cursor = _get_connection_cursor(control.torrentScrapeCacheFile) for t in [cache_table, 'rel_list', 'rel_lib']: try: cursor.execute("DROP TABLE IF EXISTS %s" % t) cursor.execute("VACUUM") cursor.connection.commit() except: pass except: try: cursor.close() except: pass import traceback traceback.print_exc() finally: control.try_release_lock(control.torrentScrapeCacheFile_lock) control.showDialog.notification('{}: {}'.format(control.ADDON_NAME, control.lang(30200)), control.lang(30202), time=5000)
def __init__(self): # Parse parameters... params = dict(part.split('=') for part in sys.argv[2][1:].split('&')) self.current_page = int(params.get("page", "1")) self.action = params.get("action", None) # self.sort_method = params.get("sort", control.infoLabel("Container.SortMethod")) self.sort_method = urllib.unquote_plus(params.get("sort", "NONE")) self.browse_url = "%sBrowse/Authors?direction=desc&sort=%s&page=%i&term=%s&%s" self.search_term = urllib.unquote_plus(params.get("query", "")) self.author_url = urllib.unquote_plus(params.get("author-url", "")) utils.set_no_sort() if self.action is None or self.action == "browse-authors": if self.sort_method == control.lang(30705): # episodes self.sort = "episodes" elif self.sort_method == control.lang(30704): # AtoZ self.sort = "atoz" else: self.show_sort() return self.browse() return elif self.action == "search-authors": self.sort = "" self.search() return elif self.action == "list-author" and self.author_url != "": self.list() return print "fail: action=%s&sort=%s&author-url=%s" % ( self.action, self.sort_method, self.author_url) return
def __init__(self): # params = dict(part.split('=') for part in sys.argv[2][1:].split('&')) # self.action = params.get("action", None) utils.set_no_sort() meta = utils.get_course_meta()["sections"] for m in meta: header = m["header"] title = header if title in utils.ignore_sections: continue for sid in utils.section_ids: if title == control.lang(sid): title = control.lang(sid + 100) icon = os.path.join(control.imagesPath, "%s.png" % header) utils.add_directory(title, icon, icon, "%s?action=browse-section§ion=%s" % (sys.argv[0], urllib.quote_plus(header))) utils.add_directory(utils.text_green % control.lang(30501), utils.icon_search, utils.icon_search, "%s?action=search" % sys.argv[0]) utils.add_directory(utils.text_green % control.lang(30502), utils.icon_settings, None, "%s?action=settings" % (sys.argv[0])) control.directory_end() return
def addDirectoryItem(self, name, query, thumb, icon, context=None, queue=False, isAction=True, isFolder=True): try: name = control.lang(name).encode('utf-8') except: pass url = '%s?action=%s' % (sysaddon, query) if isAction == True else query thumb = os.path.join(artPath, thumb) if not artPath == None else icon cm = [] cm.append(('Settings', 'RunPlugin(%s?action=openSettings&query=(0,0))' % sysaddon)) if queue == True: cm.append((queueMenu, 'RunPlugin(%s?action=queueItem)' % sysaddon)) if not context == None: cm.append((control.lang(context[0]).encode('utf-8'), 'RunPlugin(%s?action=%s)' % (sysaddon, context[1]))) item = control.item(label=name) item.addContextMenuItems(cm) item.setArt({'icon': thumb, 'thumb': thumb}) if not addonFanart == None: item.setProperty('Fanart_Image', addonFanart) control.addItem(handle=syshandle, url=url, listitem=item, isFolder=isFolder)
def show_sort(self): # recent utils.add_directory(control.lang(30701), utils.icon_folder, None, "%s?action=browse-series&page=%i&sort=%s" % ( sys.argv[0], 1, urllib.quote_plus(control.lang(30701)))) # A to Z utils.add_directory(control.lang(30704), utils.icon_folder, None, "%s?action=browse-series&page=%i&sort=%s" % ( sys.argv[0], 1, urllib.quote_plus(control.lang(30704)))) control.directory_end() return
def show_sort(self): # recent utils.add_directory(control.lang(30701), utils.icon_folder, None, "%s?action=browse-events&page=%i&sort=%s" % ( sys.argv[0], 1, urllib.quote_plus(control.lang(30701)))) # A to Z utils.add_directory(control.lang(30704), utils.icon_folder, None, "%s?action=browse-events&page=%i&sort=%s" % ( sys.argv[0], 1, urllib.quote_plus(control.lang(30704)))) control.directory_end() return
def clearCacheAll(self): control.idle() yes = control.yesnoDialog(control.lang(32056).encode('utf-8'), '', '') if not yes: return from resources.lib.modules import cache cache.cache_clear_all() control.infoDialog(control.lang(32057).encode('utf-8'), sound=True, icon='INFO')
def getVideoInfo(self, content, name, imdb, tvdb): try: self.loadingTime = time.time() self.totalTime = 0 self.currentTime = 0 self.folderPath = control.infoLabel('Container.FolderPath') self.name = name self.content = content self.file = self.name + '.strm' self.file = self.file.translate(None, '\/:*?"<>|').strip('.') self.imdb = 'tt' + imdb if imdb.isdigit() else imdb self.tvdb = tvdb if not tvdb == None else '0' except: pass try: if self.content == 'movie': self.title, self.year = re.compile( '(.+?) [(](\d{4})[)]$').findall(self.name)[0] elif self.content == 'episode': self.show, self.season, self.episode = re.compile( '(.+?) S(\d*)E(\d*)$').findall(self.name)[0] self.season, self.episode = '%01d' % int( self.season), '%01d' % int(self.episode) except: pass try: if control.setting('resume_playback') == 'true': self.offset = bookmarks.getBookmark(self.name, self.imdb) if self.offset == '0': raise Exception() minutes, seconds = divmod(float(self.offset), 60) hours, minutes = divmod(minutes, 60) yes = control.yesnoDialog( '%s %02d:%02d:%02d' % (control.lang(30342).encode('utf-8'), hours, minutes, seconds), '', '', self.name, control.lang(30343).encode('utf-8'), control.lang(30344).encode('utf-8')) if yes: self.offset = '0' except: pass try: if self.content == 'movie': control.window.setProperty('script.trakt.ids', json.dumps({'imdb': self.imdb})) elif self.content == 'episode': control.window.setProperty('script.trakt.ids', json.dumps({'tvdb': self.tvdb})) except: pass
def show_sort(self): # search utils.add_directory(control.lang(30409), utils.icon_search, None, "%s?action=search-authors" % (sys.argv[0])) # episodes utils.add_directory(control.lang(30705), utils.icon_folder, None, "%s?action=browse-authors&page=%i&sort=%s" % ( sys.argv[0], 1, urllib.quote_plus(control.lang(30705)))) # A to Z utils.add_directory(control.lang(30704), utils.icon_folder, None, "%s?action=browse-authors&page=%i&sort=%s" % ( sys.argv[0], 1, urllib.quote_plus(control.lang(30704)))) control.directory_end() return
def play_video(self): # Get current list item details... title = unicode(xbmc.getInfoLabel("ListItem.Title"), "utf-8") thumbnail = xbmc.getInfoImage("ListItem.Thumb") studio = unicode(xbmc.getInfoLabel("ListItem.Studio"), "utf-8") plot = unicode(xbmc.getInfoLabel("ListItem.Plot"), "utf-8") genre = unicode(xbmc.getInfoLabel("ListItem.Genre"), "utf-8") total_time = unicode(xbmc.getInfoLabel("ListItem.EndTime"), "utf-8") dbid = unicode(xbmc.getInfoLabel("ListItem.DBID"), "utf-8") # Show wait dialog while parsing data... dialog_wait = xbmcgui.DialogProgress() dialog_wait.create(control.lang(30504), title) if self.video_url is None: # Close wait dialog... dialog_wait.close() del dialog_wait # Message... xbmcgui.Dialog().ok(control.lang(30000), control.lang(30505)) return # Play video... # playlist = xbmc.PlayList(xbmc.PLAYLIST_VIDEO) # playlist.clear() # list_item = xbmcgui.ListItem(title, iconImage="DefaultVideo.png", thumbnailImage=thumbnail) # list_item.setInfo("video", {"Title": title, "Studio": studio, "Plot": plot, "Genre": genre}) # playlist.add(self.video_url, list_item) # Close wait dialog... dialog_wait.close() del dialog_wait # Play video... # xbmc_player = xbmc.Player() player().run({ "url": self.video_url, "thumb": thumbnail, "plot": plot, "genre": genre, "title": title, "endTime": total_time, "dbid": dbid }) # xbmc_player.play(playlist) return
def display_section_choice(self, close_directory=True): epoch_time = int(time.time()) utils.add_directory( utils.text_blue % control.lang(30601), utils.icon_folder, None, "%s%s?action=gallery§ion=hot" % (sys.argv[0], epoch_time)) utils.add_directory( utils.text_blue % control.lang(30602), utils.icon_folder, None, "%s%s?action=gallery§ion=top" % (sys.argv[0], epoch_time)) utils.add_directory( utils.text_blue % control.lang(30603), utils.icon_folder, None, "%s%s?action=gallery§ion=user" % (sys.argv[0], epoch_time)) if close_directory: control.directory_end(force_thumb=False) return
def authTrakt(): try: if getTraktCredentialsInfo() == True: if control.yesnoDialog(control.lang(32511).encode('utf-8'), control.lang(32512).encode('utf-8'), '', 'Trakt'): control.setSetting(id='trakt.user', value='') control.setSetting(id='trakt.token', value='') control.setSetting(id='trakt.refresh', value='') raise Exception() result = getTraktAsJson('/oauth/device/code', {'client_id': V2_API_KEY}) verification_url = (control.lang(32513) % result['verification_url']).encode('utf-8') user_code = (control.lang(32514) % result['user_code']).encode('utf-8') expires_in = int(result['expires_in']) device_code = result['device_code'] interval = result['interval'] progressDialog = control.progressDialog progressDialog.create('Trakt', verification_url, user_code) for i in range(0, expires_in): try: if progressDialog.iscanceled(): break time.sleep(1) if not float(i) % interval == 0: raise Exception() r = getTraktAsJson('/oauth/device/token', {'client_id': V2_API_KEY, 'client_secret': CLIENT_SECRET, 'code': device_code}) if 'access_token' in r: break except: pass try: progressDialog.close() except: pass token, refresh = r['access_token'], r['refresh_token'] headers = {'Content-Type': 'application/json', 'trakt-api-key': V2_API_KEY, 'trakt-api-version': 2, 'Authorization': 'Bearer %s' % token} result = client.request(urlparse.urljoin(BASE_URL, '/users/me'), headers=headers) result = utils.json_loads_as_str(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('4.1')
def re_build_database(self, silent=False): if not silent: confirm = control.yesno_dialog(control.ADDON_NAME, control.lang(30203)) if confirm == 0: return control.anilistSyncDB_lock.acquire() cursor = self._get_cursor() cursor.execute('DROP TABLE IF EXISTS shows') cursor.execute('DROP TABLE IF EXISTS seasons') cursor.execute('DROP TABLE IF EXISTS episodes') cursor.execute('DROP TABLE IF EXISTS activities') try: cursor.execute("VACCUM") except: pass cursor.connection.commit() cursor.close() control.try_release_lock(control.anilistSyncDB_lock) self._build_show_table() self._build_episode_table() self._build_sync_activities() self._build_season_table() self._set_base_activites() self._refresh_activites()
def show_sort(self): # search utils.add_directory(control.lang(30409), utils.icon_search, None, "%s?action=search-authors" % (sys.argv[0])) # episodes utils.add_directory( control.lang(30705), utils.icon_folder, None, "%s?action=browse-authors&page=%i&sort=%s" % (sys.argv[0], 1, urllib.quote_plus(control.lang(30705)))) # A to Z utils.add_directory( control.lang(30704), utils.icon_folder, None, "%s?action=browse-authors&page=%i&sort=%s" % (sys.argv[0], 1, urllib.quote_plus(control.lang(30704)))) control.directory_end() return
def add_subreddit(subreddit): _init_subreddits_file() exists = False fh = open(subreddits_file, 'r') content = fh.readlines() fh.close() if subreddit: for line in content: if line.lower() == subreddit.lower(): exists = True if not exists: fh = open(subreddits_file, 'a') fh.write(subreddit + '\n') fh.close() else: keyboard = xbmc.Keyboard('', control.lang(30508)) keyboard.doModal() if keyboard.isConfirmed() and keyboard.getText(): subreddit = keyboard.getText() for line in content: if line.lower() == subreddit.lower() + "\n": exists = True if not exists: fh = open(subreddits_file, 'a') fh.write(subreddit + '\n') fh.close()
def display_sort_choice(self, close_directory=True): epoch_time = int(time.time()) utils.add_directory( utils.text_blue % control.lang(30604), utils.icon_folder, None, "%s%s?action=meme&sort=viral" % (sys.argv[0], epoch_time)) utils.add_directory( utils.text_blue % control.lang(30605), utils.icon_folder, None, "%s%s?action=meme&sort=top" % (sys.argv[0], epoch_time)) utils.add_directory( utils.text_blue % control.lang(30606), utils.icon_folder, None, "%s%s?action=meme&sort=time" % (sys.argv[0], epoch_time)) if close_directory: control.directory_end(force_thumb=False) return
def render_reddit_list(self): utils.set_no_sort() epoch_time = int(time.time()) utils.add_directory(utils.text_green % control.lang(30502), utils.icon_settings, None, "%s?action=settings" % (sys.argv[0])) utils.add_directory(utils.text_heading % (control.lang(30508)), utils.icon_folder, None, "%s?action=reddit_add" % (sys.argv[0])) reddits = utils.get_subreddits() for sr in reddits: utils.add_directory(sr.title(), utils.icon_folder, None, "%s%s?action=gallery§ion=%s&type=reddit" % ( sys.argv[0], epoch_time, urllib.quote_plus(sr.title()))) control.directory_end(force_thumb=False) return
def search(self): if self.search_term is None or self.search_term == '': t = control.lang(30201).encode('utf-8') k = control.keyboard('', t) k.doModal() self.search_term = k.getText() if k.isConfirmed() else None if self.search_term is None or self.search_term == '': return skip = (self.current_page-1) * self.per_page take = self.per_page select_filter = utils.create_filter_criteria(self.section, self.group, self.search_term) results_count = utils.get_course_meta(select_filter)["totalResultCount"] courses = utils.get_course_data(select_filter, skip, take) for course in courses: name = course["courseName"].encode('utf-8') thumb = course["courseImage"] if thumb is None or thumb == '': thumb = self.icon cid = course["id"] utils.add_directory(name, thumb, thumb, "%s?action=view-course&id=%s&url=%s" % (sys.argv[0], cid, utils.url_course % cid)) has_more = (results_count - (skip+self.per_page)) > 0 if has_more: next_url = "%s?action=search&group=%s§ion=%s&page=%i&query=%s" % ( sys.argv[0], urllib.quote_plus(self.group, safe=':/'), urllib.quote_plus(self.section, safe=':/'), self.current_page + 1, self.search_term) utils.add_next_page(next_url, self.current_page + 1) control.directory_end(False) return
def accountCheck(self): if traktCredentials == False and imdbCredentials == False: control.idle() control.infoDialog(control.lang(32042).encode('utf-8'), sound=True, icon='WARNING') sys.exit()
def __init__(self): utils.set_no_sort() utils.add_directory(utils.text_green % control.lang(30502), utils.icon_settings, None, "%s?action=settings" % (sys.argv[0])) boards = utils.get_boards()["boards"] nsfw = control.setting("enable_nsfw") == 'true' for b in boards: is_nsfw = b["ws_board"] == 0 if not nsfw and is_nsfw: continue if is_nsfw: title = utils.text_board_nsfw % (b["board"], b["title"]) else: title = utils.text_board % (b["board"], b["title"]) utils.add_directory( title, utils.icon_board, utils.icon_board, "%s?action=board&board=%s&total_pages=%s" % (sys.argv[0], urllib.quote_plus(b["board"]), b["pages"])) control.directory_end(force_thumb=False) return
def search(self): if self.search_query is None or self.search_query == '': t = control.lang(30201).encode('utf-8') k = control.keyboard('', t) k.doModal() self.search_query = k.getText() if k.isConfirmed() else None if self.search_query is None or self.search_query == '': return base_url = "https://c9search.azurewebsites.net/content/search?text=%s&$top=100&$skip=0&$inlinecount=allpages" \ % (urllib.quote_plus(self.search_query)) data = http_request.get(base_url) start_index = data.index('"documents":') + 12 if start_index <= 12: return json_data = data[start_index:-3] json_media = json.loads(json_data) for media in json_media: title = media["title"] url = media["permalink"] genre = media["published"] thumbnail = media["previewImage"] plot = media["summaryBody"] list_item = control.item(title, iconImage="DefaultVideo.png", thumbnailImage=thumbnail) list_item.setInfo("video", {"Title": title, "Studio": "Microsoft Channel 9", "Plot": plot, "Genre": genre}) plugin_play_url = '%s?action=play&video_page_url=%s' % (sys.argv[0], urllib.quote_plus(url)) control.addItem(handle=int(sys.argv[1]), url=plugin_play_url, listitem=list_item, isFolder=False) # End of directory... control.directory_end() return
def browse_group(self): skip = (self.current_page - 1) * self.per_page take = self.per_page select_filter = utils.create_filter_criteria(self.section, self.group) results_count = utils.get_course_meta(select_filter)["totalResultCount"] courses = utils.get_course_data(select_filter, skip, take) utils.add_directory(utils.text_green % control.lang(30501), utils.icon_search, utils.icon_search, "%s?action=search§ion=%s&group=%s" % (sys.argv[0], self.section, self.group)) for course in courses: name = course["courseName"].encode('utf-8') thumb = course["courseImage"] if thumb is None or thumb == '': thumb = self.icon cid = course["id"] utils.add_directory(name, thumb, thumb, "%s?action=view-course&id=%s&url=%s" % (sys.argv[0], cid, utils.url_course % cid)) has_more = (results_count - (skip+self.per_page)) > 0 if has_more: next_url = "%s?action=browse-group&group=%s§ion=%s&page=%i" % ( sys.argv[0], urllib.quote_plus(self.group, safe=':/'), urllib.quote_plus(self.section, safe=':/'), self.current_page + 1) utils.add_next_page(next_url, self.current_page + 1) control.directory_end(False) 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 q = q.lower() try: from sqlite3 import dbapi2 as database except: from pysqlite2 import dbapi2 as database dbcon = database.connect(control.searchFile) dbcur = dbcon.cursor() dbcur.execute("DELETE FROM tvshow WHERE term = ?", (q, )) dbcur.execute("INSERT INTO tvshow VALUES (?,?)", (None, q)) dbcon.commit() dbcur.close() url = self.search_link + urllib.quote_plus(q) if int(control.getKodiVersion()) >= 18: self.get(url) else: url = '%s?mode=6&url=%s' % (sys.argv[0], urllib.quote_plus(url)) control.execute('Container.Update(%s)' % url)
def delete(dbfile=control.cacheFile, withyes=True): if withyes: yes = control.yesnoDialog(control.lang(30401).encode('utf-8'), '', '') if not yes: return else: pass control.deleteFile(dbfile) control.infoDialog(control.lang(30402).encode('utf-8'))
def browse_group(self): skip = (self.current_page - 1) * self.per_page take = self.per_page select_filter = utils.create_filter_criteria(self.section, self.group) results_count = utils.get_course_meta( select_filter)["totalResultCount"] courses = utils.get_course_data(select_filter, skip, take) utils.add_directory( utils.text_green % control.lang(30501), utils.icon_search, utils.icon_search, "%s?action=search§ion=%s&group=%s" % (sys.argv[0], self.section, self.group)) for course in courses: name = course["courseName"].encode('utf-8') thumb = course["courseImage"] if thumb is None or thumb == '': thumb = self.icon cid = course["id"] utils.add_directory( name, thumb, thumb, "%s?action=view-course&id=%s&url=%s" % (sys.argv[0], cid, utils.url_course % cid)) has_more = (results_count - (skip + self.per_page)) > 0 if has_more: next_url = "%s?action=browse-group&group=%s§ion=%s&page=%i" % ( sys.argv[0], urllib.quote_plus(self.group, safe=':/'), urllib.quote_plus(self.section, safe=':/'), self.current_page + 1) utils.add_next_page(next_url, self.current_page + 1) control.directory_end(False) return
def tags_alpha(self): tag_list = control.lang(30601) for tag in tag_list: utils.add_directory("[B][COLOR green][UPPERCASE]%s[/UPPERCASE][/COLOR][/B]" % tag, "%s/%s.png" % (control.imagesPath, tag), None, "%s?action=browse-tag-item&&tag=%s" % (sys.argv[0], tag)) control.directory_end() return
def cache_version_check(): if _find_cache_version(): cache_clear() cache_clear_meta() cache_clear_providers() control.infoDialog(control.lang(32057).encode('utf-8'), sound=True, icon='INFO')
def infoCheck(self, version): try: control.infoDialog('', control.lang(32074).encode('utf-8'), time=5000, sound=False) return '1' except: return '1'
def add_next_page(item_url, page): list_item = control.item(text_green % (control.lang(30500) % page), iconImage=icon_next, thumbnailImage=icon_next) control.addItem(handle=int(sys.argv[1]), url=item_url, listitem=list_item, isFolder=True) return
def add_next_page(bs, item_url, page): ul_paging = bs.find("ul", {"class": "paging"}) if ul_paging is not None: list_item = control.item( "[B][UPPERCASE][COLOR green]%s[/COLOR][/UPPERCASE][/B]" % control.lang(30503) % page, iconImage=icon_next, thumbnailImage=icon_next, ) control.addItem(handle=int(sys.argv[1]), url=item_url, listitem=list_item, isFolder=True) return
def onClick(self, control2): print 'onClick: %s' % (control2) if control2 == AUTH_BUTTON: if not self.__get_token(): control.infoDialog('Trakt PIN Authorization Failed.', 'Trakt ERROR') return self.auth = True self.close() if control2 == LATER_BUTTON: control.infoDialog(control.lang(32157) + control.lang(32150)) control.set_setting('last_reminder', str(int(time.time()))) if control == NEVER_BUTTON: control.infoDialog(control.lang(32157) + control.lang(32151)) control.set_setting('last_reminder', '-1') if control in [AUTH_BUTTON, LATER_BUTTON, NEVER_BUTTON]: self.close()
def play_video(self): # Get current list item details... title = unicode(xbmc.getInfoLabel("ListItem.Title"), "utf-8") thumbnail = xbmc.getInfoImage("ListItem.Thumb") studio = unicode(xbmc.getInfoLabel("ListItem.Studio"), "utf-8") plot = unicode(xbmc.getInfoLabel("ListItem.Plot"), "utf-8") genre = unicode(xbmc.getInfoLabel("ListItem.Genre"), "utf-8") # Show wait dialog while parsing data... dialog_wait = xbmcgui.DialogProgress() dialog_wait.create(control.lang(30504), title) # Get video URL and subtitles ... video_url, subtitle_urls = self.get_video_url_and_subtitles(self.video_page_url) if video_url is None: # Close wait dialog... dialog_wait.close() del dialog_wait # Message... xbmcgui.Dialog().ok(control.lang(30000), control.lang(30505)) return # Play video... playlist = xbmc.PlayList(xbmc.PLAYLIST_VIDEO) playlist.clear() list_item = xbmcgui.ListItem(title, iconImage="DefaultVideo.png", thumbnailImage=thumbnail) list_item.setInfo("video", {"Title": title, "Studio": studio, "Plot": plot, "Genre": genre}) list_item.setSubtitles(subtitle_urls) playlist.add(video_url, list_item) # Close wait dialog... dialog_wait.close() del dialog_wait # Play video... xbmc_player = xbmc.Player() xbmc_player.play(playlist) return
def play_video(self): # Get current list item details... title = unicode(xbmc.getInfoLabel("ListItem.Title"), "utf-8") thumbnail = xbmc.getInfoImage("ListItem.Thumb") studio = unicode(xbmc.getInfoLabel("ListItem.Studio"), "utf-8") plot = unicode(xbmc.getInfoLabel("ListItem.Plot"), "utf-8") genre = unicode(xbmc.getInfoLabel("ListItem.Genre"), "utf-8") total_time = unicode(xbmc.getInfoLabel("ListItem.EndTime"), "utf-8") dbid = unicode(xbmc.getInfoLabel("ListItem.DBID"), "utf-8") # Show wait dialog while parsing data... dialog_wait = xbmcgui.DialogProgress() dialog_wait.create(control.lang(30504), title) if self.video_url is None: # Close wait dialog... dialog_wait.close() del dialog_wait # Message... xbmcgui.Dialog().ok(control.lang(30000), control.lang(30505)) return # Play video... # playlist = xbmc.PlayList(xbmc.PLAYLIST_VIDEO) # playlist.clear() # list_item = xbmcgui.ListItem(title, iconImage="DefaultVideo.png", thumbnailImage=thumbnail) # list_item.setInfo("video", {"Title": title, "Studio": studio, "Plot": plot, "Genre": genre}) # playlist.add(self.video_url, list_item) # Close wait dialog... dialog_wait.close() del dialog_wait # Play video... # xbmc_player = xbmc.Player() player().run({"url": self.video_url, "thumb": thumbnail, "plot": plot, "genre": genre, "title": title, "endTime": total_time, "dbid": dbid}) # xbmc_player.play(playlist) return
def onPlayBackStarted(self): for i in range(0, 200): if control.condVisibility('Window.IsActive(busydialog)') == 1: control.idle() else: break control.sleep(100) if control.setting('playback_info') == 'true': elapsedTime = '%s %s %s' % (control.lang(30464).encode('utf-8'), int((time.time() - self.loadingTime)), control.lang(30465).encode('utf-8')) control.infoDialog(elapsedTime, heading=self.title) try: if self.offset == '0': raise Exception() self.seekTime(float(self.offset)) except Exception, e: print str(e) pass
def cache_clear(): try: control.cacheFile_lock.acquire() cursor = _get_connection_cursor(control.cacheFile) for t in [cache_table, 'rel_list', 'rel_lib']: try: cursor.execute("DROP TABLE IF EXISTS %s" % t) cursor.execute("VACUUM") cursor.connection.commit() except: pass control.showDialog.notification('{}: {}'.format( control.ADDON_NAME, control.lang(30200)), control.lang(30201), time=5000) except: pass finally: control.try_release_lock(control.cacheFile_lock)
def __init__(self): # Parse parameters... params = dict(part.split('=') for part in sys.argv[2][1:].split('&')) self.current_page = int(params.get("page", "1")) self.sort_method = urllib.unquote_plus(params.get("sort", "NONE")) self.url = "https://channel9.msdn.com/Browse/AllContent?sort=%s&page=%i&%s" utils.set_no_sort() if self.sort_method == control.lang(30701): # recent self.sort = "recent" self.get_entries() elif self.sort_method == control.lang(30702): # viewed self.sort = "viewed" self.get_entries() elif self.sort_method == control.lang(30703): # rating self.sort = "rating" self.get_entries() else: self.browse() return
def search(self): if self.search_term is None or self.search_term == '': t = control.lang(30201).encode('utf-8') k = control.keyboard('', t) k.doModal() self.search_term = k.getText() if k.isConfirmed() else None if self.search_term is None or self.search_term == '': return self.browse() return
def selected_languages(): langs = "" setting_lang_items = control.lang(30602).split(",") for lang_item in setting_lang_items: lang_enabled = control.setting(lang_item) if lang_enabled == "true": langs += "lang=%s&" % lang_item if langs == "" or langs is None: return "lang=en" return langs[:-1]
def play_video(self): # Get current list item details... title = unicode(xbmc.getInfoLabel("ListItem.Title"), "utf-8") thumbnail = xbmc.getInfoImage("ListItem.Thumb") studio = unicode(xbmc.getInfoLabel("ListItem.Studio"), "utf-8") plot = unicode(xbmc.getInfoLabel("ListItem.Plot"), "utf-8") genre = unicode(xbmc.getInfoLabel("ListItem.Genre"), "utf-8") # Show wait dialog while parsing data... dialog_wait = xbmcgui.DialogProgress() dialog_wait.create(control.lang(30504), title) # Get video URL... video_url = self.get_video_url(self.video_page_url) if video_url is None: # Close wait dialog... dialog_wait.close() del dialog_wait # Message... xbmcgui.Dialog().ok(control.lang(30000), control.lang(30505)) return # Play video... playlist = xbmc.PlayList(xbmc.PLAYLIST_VIDEO) playlist.clear() list_item = xbmcgui.ListItem(title, iconImage="DefaultVideo.png", thumbnailImage=thumbnail) list_item.setInfo("video", {"Title": title, "Studio": studio, "Plot": plot, "Genre": genre}) playlist.add(video_url, list_item) # Close wait dialog... dialog_wait.close() del dialog_wait # Play video... xbmc_player = xbmc.Player() xbmc_player.play(playlist) return
def __init__(self): # Parse parameters... params = dict(part.split('=') for part in sys.argv[2][1:].split('&')) self.current_page = int(params.get("page", "1")) self.action = params.get("action", None) self.sort_method = urllib.unquote_plus(params.get("sort", "NONE")) self.event_url = urllib.unquote_plus(params.get("event-url", "")) self.browse_url = "%s/Browse/Events?sort=%s&page=%i&%s" utils.set_no_sort() if self.action is None or self.action == "browse-events": if self.sort_method == control.lang(30701): # recent self.sort = "recent" elif self.sort_method == control.lang(30704): # atoz self.sort = "atoz" else: self.show_sort() return self.browse() return elif self.action == "browse-live": self.sort = "current" self.live() return elif self.action == "list-event": if self.sort_method == control.lang(30701): # recent self.sort = "" elif self.sort_method == control.lang(30702): # viewed self.sort = "viewed" elif self.sort_method == control.lang(30703): # rating self.sort = "rating" self.sort_dir = "asc" else: self.show_list_sort() return self.list() return print "fail: action=%s&event-url=%s" % (self.action, self.event_url) return
def language_filter(): # {SelectOnField: "LCID", SelectTerm: "1045", SelectMatchOption: 2} result = [] setting_lang_items = control.lang(30600).split(",") for lang_item in setting_lang_items: lang_enabled = control.setting(lang_item) if lang_enabled == "true": result.append({"SelectOnField": "LCID", "SelectTerm": "%s" % lang_item, "SelectMatchOption": 2}) if not result: return default_lanugage return result
def __init__(self): # Parse parameters... params = dict(part.split('=') for part in sys.argv[2][1:].split('&')) self.current_page = int(params.get("page", "1")) self.action = params.get("action", None) # self.sort_method = params.get("sort", control.infoLabel("Container.SortMethod")) self.sort_method = urllib.unquote_plus(params.get("sort", "NONE")) self.tag_url = urllib.unquote_plus(params.get("tag-url", "")) self.browse_url = "%s/Browse/Tags/firstLetter/%s/json" self.tag = urllib.unquote_plus(params.get("tag", "")) if self.tag == '#': self.tag = 'more' utils.set_no_sort() if self.action is None or self.action == "browse-tags": self.tags_alpha() return elif self.action == "browse-tag-item": self.browse() return elif self.action == "list-tag": if self.sort_method == control.lang(30701): # recent self.sort = "recent" elif self.sort_method == control.lang(30702): # viewed self.sort = "viewed" elif self.sort_method == control.lang(30703): # rating self.sort = "rating" else: self.show_list_sort() return self.list() return print "fail: action=%s&tag-url=%s" % (self.action, self.tag_url) return
def __init__(self): utils.set_no_sort() # All utils.add_directory(control.lang(30401), utils.icon_all, None, "%s?action=list-all" % (sys.argv[0])) # Live utils.add_directory(control.lang(30407), utils.icon_event, None, "%s?action=browse-live" % (sys.argv[0])) # Events utils.add_directory(control.lang(30405), utils.icon_event, None, "%s?action=browse-events" % (sys.argv[0])) # Shows utils.add_directory(control.lang(30403), utils.icon_tv, None, "%s?action=browse-shows" % (sys.argv[0])) # Series utils.add_directory(control.lang(30404), utils.icon_tv, None, "%s?action=browse-series" % (sys.argv[0])) # Tags utils.add_directory(control.lang(30402), utils.icon_tag, None, "%s?action=browse-tags" % (sys.argv[0])) # Blogs utils.add_directory(control.lang(30406), utils.icon_blog, None, "%s?action=browse-blogs" % (sys.argv[0])) # Authors utils.add_directory(control.lang(30408), utils.icon_user, None, "%s?action=browse-authors" % (sys.argv[0])) # Search utils.add_directory(control.lang(30409), utils.icon_search, None, "%s?action=search" % (sys.argv[0])) # Search utils.add_directory("[B][COLOR green]%s[/COLOR][/B]" % control.lang(30410), utils.icon_cog, None, "%s?action=settings" % (sys.argv[0])) control.directory_end() return
def onPlayBackStarted(self): if control.setting('playback_info') == 'true': elapsedTime = '%s %s seconds' % (control.lang(30309).encode('utf-8'), int((time.time() - self.loadingTime))) control.infoDialog(elapsedTime, heading=self.name) try: if self.offset == '0': raise Exception() self.seekTime(float(self.offset)) except: pass try: if not control.setting('subtitles') == 'true': raise Exception() try: subtitle = subtitles.get(self.name, self.imdb, self.season, self.episode) except: subtitle = subtitles.get(self.name, self.imdb, '', '') except: pass
def browse_section(self): meta = utils.get_course_meta() utils.add_directory(utils.text_green % control.lang(30501), utils.icon_search, utils.icon_search, "%s?action=search§ion=%s" % (sys.argv[0], self.section)) for m in meta["sections"]: header = m["header"] if header == self.section: infos = m["narrowByInfos"] for info in infos: count = info["count"] name = info["name"].encode('utf-8') utils.add_directory("%s (%i)" % (name, count), self.icon, self.icon, "%s?action=browse-group&group=%s§ion=%s&page=1" % ( sys.argv[0], urllib.quote_plus(name, safe=':/'), urllib.quote_plus(self.section, safe=':/'))) control.directory_end(False) return
def browse(self): # recent utils.add_directory(control.lang(30701), utils.icon_folder, None, "%s?action=list-all&page=%i&sort=%s" % ( sys.argv[0], 1, urllib.quote_plus(control.lang(30701)))) # viewed utils.add_directory(control.lang(30702), utils.icon_folder, None, "%s?action=list-all&page=%i&sort=%s" % ( sys.argv[0], 1, urllib.quote_plus(control.lang(30702)))) # rating utils.add_directory(control.lang(30703), utils.icon_folder, None, "%s?action=list-all&page=%i&sort=%s" % ( sys.argv[0], 1, urllib.quote_plus(control.lang(30703)))) control.directory_end() return
def getVideoInfo(self, content, name, imdb, tvdb): try: self.loadingTime = time.time() self.totalTime = 0 ; self.currentTime = 0 self.folderPath = control.infoLabel('Container.FolderPath') self.name = name ; self.content = content self.file = self.name + '.strm' self.file = self.file.translate(None, '\/:*?"<>|').strip('.') self.imdb = 'tt' + imdb if imdb.isdigit() else imdb self.tvdb = tvdb if not tvdb == None else '0' except: pass try: if self.content == 'movie': self.title, self.year = re.compile('(.+?) [(](\d{4})[)]$').findall(self.name)[0] elif self.content == 'episode': self.show, self.season, self.episode = re.compile('(.+?) S(\d*)E(\d*)$').findall(self.name)[0] self.season, self.episode = '%01d' % int(self.season), '%01d' % int(self.episode) except: pass try: if control.setting('resume_playback') == 'true': self.offset = bookmarks.getBookmark(self.name, self.imdb) if self.offset == '0': raise Exception() minutes, seconds = divmod(float(self.offset), 60) ; hours, minutes = divmod(minutes, 60) yes = control.yesnoDialog('%s %02d:%02d:%02d' % (control.lang(30342).encode('utf-8'), hours, minutes, seconds), '', '', self.name, control.lang(30343).encode('utf-8'), control.lang(30344).encode('utf-8')) if yes: self.offset = '0' except: pass try: if self.content == 'movie': control.window.setProperty('script.trakt.ids', json.dumps({'imdb': self.imdb})) elif self.content == 'episode': control.window.setProperty('script.trakt.ids', json.dumps({'tvdb': self.tvdb})) except: pass
def show_list_sort(self): # sequential utils.add_directory(control.lang(30706), utils.icon_folder, None, "%s?action=list-series&page=%i&sort=%s&series-url=%s" % ( sys.argv[0], 1, urllib.quote_plus(control.lang(30706)), urllib.quote_plus(self.series_url))) # recent utils.add_directory(control.lang(30701), utils.icon_folder, None, "%s?action=list-series&page=%i&sort=%s&series-url=%s" % ( sys.argv[0], 1, urllib.quote_plus(control.lang(30701)), urllib.quote_plus(self.series_url))) # viewed utils.add_directory(control.lang(30702), utils.icon_folder, None, "%s?action=list-series&page=%i&sort=%s&series-url=%s" % ( sys.argv[0], 1, urllib.quote_plus(control.lang(30702)), urllib.quote_plus(self.series_url))) # rating utils.add_directory(control.lang(30703), utils.icon_folder, None, "%s?action=list-series&page=%i&sort=%s&series-url=%s" % ( sys.argv[0], 1, urllib.quote_plus(control.lang(30703)), urllib.quote_plus(self.series_url))) control.directory_end() return
def show_list_sort(self): # recent utils.add_directory(control.lang(30701), utils.icon_folder, None, "%s?action=list-event&page=%i&sort=%s&event-url=%s" % ( sys.argv[0], 1, urllib.quote_plus(control.lang(30701)), urllib.quote_plus(self.event_url))) # rating utils.add_directory(control.lang(30703), utils.icon_folder, None, "%s?action=list-event&page=%i&sort=%s&event-url=%s" % ( sys.argv[0], 1, urllib.quote_plus(control.lang(30703)), urllib.quote_plus(self.event_url))) # Most Viewed utils.add_directory(control.lang(30702), utils.icon_folder, None, "%s?action=list-event&page=%i&sort=%s&event-url=%s" % ( sys.argv[0], 1, urllib.quote_plus(control.lang(30702)), urllib.quote_plus(self.event_url))) control.directory_end() return
def show_list_sort(self): # recent utils.add_directory(control.lang(30701), utils.icon_folder, None, utils.action_list_blog % ( sys.argv[0], 1, urllib.quote_plus(control.lang(30701)), urllib.quote_plus(self.blog_url))) # viewed utils.add_directory(control.lang(30702), utils.icon_folder, None, utils.action_list_blog % ( sys.argv[0], 1, urllib.quote_plus(control.lang(30702)), urllib.quote_plus(self.blog_url))) # rating utils.add_directory(control.lang(30703), utils.icon_folder, None, utils.action_list_blog % ( sys.argv[0], 1, urllib.quote_plus(control.lang(30703)), urllib.quote_plus(self.blog_url))) control.directory_end() return
def download(name, image, url, image2): import control if url == None: return control.infoDialog(control.lang(30501).encode('utf-8')) try: headers = dict(urlparse.parse_qsl(url.rsplit('|', 1)[1])) except: headers = dict('') url = url.split('|')[0] content = re.compile('(.+?)\sS(\d*)E\d*$').findall(name) p=re.compile("(\[[A-Za-z0-9-_\ \.]+\])") transname = p.match(name.encode("utf-8")).group(1).replace("[", "").replace("]", "") levels =['../../../..', '../../..', '../..', '..'] dest = addon.getSetting('download_path') dest = control.transPath(dest) for level in levels: try: control.makeFile(os.path.abspath(os.path.join(dest, level))) except: pass control.makeFile(dest) dest = os.path.join(dest, transname) control.makeFile(dest) """ if "/" in dest: fo = codecs.open(dest+"/"+transname+".nfo", "a", "utf-8") else: fo = codecs.open(dest+"\"+transname+".nfo", "a", "utf-8") fo.write(u'<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>\n<movie>\n<title>'+name+'</title>\n<genre>JAV</genre>\n</movie>'); # Close opend file fo.close()""" f =xbmcvfs.File (dest+"/"+transname+".nfo", 'w') f.write('<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>\n<movie>\n<title>'+name.encode('utf-8')+'</title>\n<genre>JAV</genre>\n</movie>'.encode('utf-8')) f.close() #f = open(dest+"/fanart.jpg",'wb') f =xbmcvfs.File (dest+"/fanart.jpg", 'w') f.write(getIMAGE(image2).read()) f.close() f =xbmcvfs.File (dest+"/poster.jpg", 'w') #f = open(dest+"/poster.jpg",'wb') f.write(getIMAGE(image).read()) f.close() ext = os.path.splitext(urlparse.urlparse(url).path)[1][1:] if not ext in ['mp4', 'mkv', 'flv', 'avi', 'mpg']: ext = 'mp4' dest = os.path.join(dest, transname.decode('utf-8') + '.' + ext) sysheaders = urllib.quote_plus(json.dumps(headers)) sysurl = urllib.quote_plus(url) systitle = urllib.quote_plus(name.encode('utf-8')) sysimage = urllib.quote_plus(image) sysdest = urllib.quote_plus(dest) script = inspect.getfile(inspect.currentframe()) cmd = 'RunScript(%s, %s, %s, %s, %s, %s)' % (script, sysurl, sysdest, systitle, sysimage, sysheaders) xbmc.executebuiltin(cmd)