def auth(self): resp = self.get_json('pin/get') expiry = pin_ttl = int(resp['expires_in']) auth_complete = False control.copy2clip(resp['pin']) control.progressDialog.create(control.ADDON_NAME + ': AllDebrid Auth', line1=control.lang(30100).format(control.colorString(resp['base_url'])), line2=control.lang(30101).format(control.colorString(resp['pin'])), line3=control.lang(30102)) # Seems the All Debrid servers need some time do something with the pin before polling # Polling to early will cause an invalid pin error control.kodi.sleep(5 * 1000) control.progressDialog.update(100) while not auth_complete and not expiry <= 0 and not control.progressDialog.iscanceled(): auth_complete, expiry = self.poll_auth(check=resp['check'], pin=resp['pin']) progress_percent = 100 - int((float(pin_ttl - expiry) / pin_ttl) * 100) control.progressDialog.update(progress_percent) control.kodi.sleep(1 * 1000) try: control.progressDialog.close() except: pass self.store_user_info() if auth_complete: control.ok_dialog(control.ADDON_NAME, 'AllDebrid {}'.format(control.lang(30103))) else: return
def PLAY(payload, params): anime_url, episode = payload.rsplit("/", 1) sources = _BROWSER.get_episode_sources(anime_url, episode) serverChoice = filter(lambda x: control.getSetting(x[0]) == 'true', SERVER_CHOICES.iteritems()) serverChoice = map(lambda x: x[1], serverChoice) sources = filter(lambda x: x[0] in serverChoice, sources) autoplay = True if 'true' in control.getSetting('autoplay') else False s = SourcesList( sources, autoplay, sortResultsByRes, { 'title': control.lang(30100), 'processing': control.lang(30101), 'choose': control.lang(30102), 'notfound': control.lang(30103), }) if isDirectoryStyle(): if s._read_sources(): items = sorted(s._sources.iteritems(), key=lambda x: x[0]) items = [(title[5:], url) for title, url in items] items = map( lambda x: utils.allocate_item(x[0], 'playlink&url=/' + x[1], '', False, ''), items) return control.draw_items(items) else: res = control.play_source(s.get_video_link()) bookmark_episode_playing(sources[0]) return res
def PLAY(payload, params): anime_url, episode = payload.rsplit("/", 1) sources = _BROWSER.get_episode_sources(anime_url, episode) serverChoice = filter(lambda x: control.getSetting(x[0]) == 'true', SERVER_CHOICES.iteritems()) serverChoice = map(lambda x: x[1], serverChoice) sources = filter(lambda x: x[0] in serverChoice, sources) autoplay = True if 'true' in control.getSetting('autoplay') else False s = SourcesList(sources, autoplay, sortResultsByRes, { 'title': control.lang(30100), 'processing': control.lang(30101), 'choose': control.lang(30102), 'notfound': control.lang(30103), }) if isDirectoryStyle(): if s._read_sources(): items = sorted(s._sources.iteritems(), key=lambda x: x[0]) items = [(title[5:], url) for title, url in items] items = map(lambda x: utils.allocate_item(x[0], 'playlink&url=/'+x[1],'', False, ''), items) return control.draw_items(items) else: res = control.play_source(s.get_video_link()) bookmark_episode_playing(sources[0]) return res
def auth(self): data = {'client_id': self.client_id, 'response_type': 'device_code'} token = requests.post('https://www.premiumize.me/token', data=data).json() expiry = token['expires_in'] token_ttl = token['expires_in'] poll_again = True success = False control.copy2clip(token['user_code']) control.progressDialog.create( control.ADDON_NAME, line1=control.lang(30100).format( control.colorString(token['verification_uri'])), line2=control.lang(30101).format( control.colorString(token['user_code'])), line3=control.lang(30102)) control.progressDialog.update(0) while poll_again and not token_ttl <= 0 and not control.progressDialog.iscanceled( ): poll_again, success = self.poll_token(token['device_code']) progress_percent = 100 - int((float( (expiry - token_ttl) / expiry) * 100)) control.progressDialog.update(progress_percent) time.sleep(token['interval']) token_ttl -= int(token['interval']) control.progressDialog.close() if success: control.ok_dialog(control.ADDON_NAME, 'Premiumize ' + control.lang(30103))
def PLAY(payload): anime_url, episode = payload.rsplit("/", 1) s = SourcesList( NineAnimeBrowser().get_episode_sources(anime_url, int(episode)), { 'title': control.lang(30100), 'processing': control.lang(30101), 'choose': control.lang(30102), 'notfound': control.lang(30103), }) return control.play_source(s.get_video_link())
def GOGO_PLAY(payload, params): sources = GogoAnimeBrowser().get_episode_sources(payload) autoplay = True if 'true' in control.getSetting('autoplay') else False s = SourcesList( sorted(sources.items()), autoplay, sortResultsByRes, { 'title': control.lang(30100), 'processing': control.lang(30101), 'choose': control.lang(30102), 'notfound': control.lang(30103), }) control.play_source(s.get_video_link())
def PLAY(payload, params): ep_id = payload sources = _BROWSER.get_episode_sources(ep_id, params['session']) autoplay = True if 'true' in control.getSetting('autoplay') else False s = SourcesList( sorted(sources.items()), autoplay, sortResultsByRes, { 'title': control.lang(30100), 'processing': control.lang(30101), 'choose': control.lang(30102), 'notfound': control.lang(30103), }) control.play_source(s.get_video_link())
def TOOLS_MENU(payload, params): TOOLS_ITEMS = [ (control.lang(30020), "settings", ''), (control.lang(30021), "clear_cache", ''), (control.lang(30022), "clear_torrent_cache", ''), (control.lang(30023), "clear_history", ''), (control.lang(30024), "wipe_addon_data", ''), ] return control.draw_items( [ utils.allocate_item(name, url, True, image) for name, url, image in TOOLS_ITEMS ], contentType=control.getSetting("contenttype.menu"), )
def update_bookmark_cm(u): if not _BROWSER.is_logged_in(): return [] sysaddon = sys.argv[0] move_to = control.lang(40001) return [ (move_to + control.lang(30301), 'RunPlugin(%s?action=update_bookmark&anime_id=%s&folder=watching)' % (sysaddon, u)), (move_to + control.lang(30302), 'RunPlugin(%s?action=update_bookmark&anime_id=%s&folder=watched)' % (sysaddon, u)), (move_to + control.lang(30303), 'RunPlugin(%s?action=update_bookmark&anime_id=%s&folder=onhold)' % (sysaddon, u)), (move_to + control.lang(30304), 'RunPlugin(%s?action=update_bookmark&anime_id=%s&folder=dropped)' % (sysaddon, u)), (move_to + control.lang(30305), 'RunPlugin(%s?action=update_bookmark&anime_id=%s&folder=planned)' % (sysaddon, u)), (control.lang(40002), 'RunPlugin(%s?action=update_bookmark&anime_id=%s&folder=remove)' % (sysaddon,u)), ]
def update_bookmark_cm(u): if not _BROWSER.is_logged_in(): return [] sysaddon = sys.argv[0] move_to = control.lang(40001) return [ (move_to + control.lang(30301), 'RunPlugin(%s?action=update_bookmark&anime_id=%s&folder=watching)' % (sysaddon, u)), (move_to + control.lang(30302), 'RunPlugin(%s?action=update_bookmark&anime_id=%s&folder=watched)' % (sysaddon, u)), (move_to + control.lang(30303), 'RunPlugin(%s?action=update_bookmark&anime_id=%s&folder=onhold)' % (sysaddon, u)), (move_to + control.lang(30304), 'RunPlugin(%s?action=update_bookmark&anime_id=%s&folder=dropped)' % (sysaddon, u)), (move_to + control.lang(30305), 'RunPlugin(%s?action=update_bookmark&anime_id=%s&folder=planned)' % (sysaddon, u)), (control.lang(40002), 'RunPlugin(%s?action=update_bookmark&anime_id=%s&folder=remove)' % (sysaddon, u)), ]
def _add_last_watched(): if not control.getSetting(LASTWATCHED_URL_KEY): return MENU_ITEMS.insert( 0, ("%s[I]%s[/I]" % (control.lang(30000), control.getSetting(LASTWATCHED_NAME_KEY)), control.getSetting(LASTWATCHED_URL_KEY), control.getSetting(LASTWATCHED_IMAGE_KEY)))
def unbookmark_cm(u): if not _BROWSER.is_logged_in(): return [] sysaddon = sys.argv[0] return [ (control.lang(40001), 'RunPlugin(%s?action=bookmark&anime_id=%s&folder=remove)' % (sysaddon, u)), ]
def SEARCH(payload, params): query = control.keyboard(control.lang(30009)) if not query: return False # TODO: Better logic here, maybe move functionatly into router? if "Yes" in control.getSetting('searchhistory'): database.addSearchHistory(query, 'show') history = database.getSearchHistory('show') return control.draw_items(_ANILIST_BROWSER.get_search(query))
def SEARCH(payload, params): query = control.keyboard(control.lang(30007)) if query: if "Yes" in control.getSetting('searchhistory') : history = control.getSetting("9anime.history") if history != "" : query = query+HISTORY_DELIM history=query+history while history.count(HISTORY_DELIM) > 6 : history=history.rsplit(HISTORY_DELIM, 1)[0] control.setSetting("9anime.history",history) return control.draw_items(_BROWSER.search_site(query)) return False
def PLAY(payload, params): anime_url, kitsu_id = payload.rsplit("/", 1) anime_url, episode = anime_url.rsplit("/", 1) anime_url, season = anime_url.rsplit("/", 1) anime_url, flavor = anime_url.rsplit("/", 1) is_dubbed = True if "dub" == flavor else False name, image = _BROWSER.get_anime_metadata(anime_url, is_dubbed) sources = _BROWSER.get_episode_sources(anime_url, is_dubbed, season, episode) autoplay = True if 'true' in control.getSetting('autoplay') else False s = SourcesList( sorted(sources.items()), autoplay, sortResultsByRes, { 'title': control.lang(30100), 'processing': control.lang(30101), 'choose': control.lang(30102), 'notfound': control.lang(30103), }) __set_last_watched(anime_url, is_dubbed, name, image) control.play_source(s.get_video_link(), watchlist_update(episode, kitsu_id), on_stopped)
def SEARCH(payload, params): query = control.keyboard(control.lang(30007)) if query: if "Yes" in control.getSetting('searchhistory'): history = control.getSetting("9anime.history") if history != "": query = query + HISTORY_DELIM history = query + history while history.count(HISTORY_DELIM) > 6: history = history.rsplit(HISTORY_DELIM, 1)[0] control.setSetting("9anime.history", history) return control.draw_items(_BROWSER.search_site(query)) return False
def _add_last_watched(): anilist_id = control.getSetting("addon.last_watched") if not anilist_id: return try: last_watched = ast.literal_eval( database.get_show(anilist_id)['kodi_meta']) except: return MENU_ITEMS.insert( 0, ("%s[I]%s[/I]" % (control.lang(30000), last_watched['name']), "animes/%s/" % anilist_id, last_watched['poster']))
def auth(self): self.ClientSecret = '' self.ClientID = 'X245A4XAIBGVM' url = ("client_id=%s&new_credentials=yes" % self.ClientID) url = self.OauthUrl + self.DeviceCodeUrl % url response = json.loads(requests.get(url).text) control.copy2clip(response['user_code']) control.progressDialog.create('Real-Debrid Auth') control.progressDialog.update(-1, control.lang(30100).format(control.colorString('https://real-debrid.com/device')), control.lang(30101).format(control.colorString(response['user_code'])), control.lang(30102)) self.OauthTimeout = int(response['expires_in']) self.OauthTimeStep = int(response['interval']) self.DeviceCode = response['device_code'] while self.ClientSecret == '': self.auth_loop() self.token_request() user_information = self.get_url('https://api.real-debrid.com/rest/1.0/user') if user_information['type'] != 'premium': control.ok_dialog(control.ADDON_NAME, control.lang(30104))
def SEARCH(payload, params): query = control.keyboard(control.lang(30008)) if not query: return False # TODO: Better logic here, maybe move functionatly into router? if "Yes" in control.getSetting('searchhistory'): history = control.getSetting(HISTORY_KEY) if history != "": query = query + HISTORY_DELIM history = query + history while history.count(HISTORY_DELIM) > 6: history = history.rsplit(HISTORY_DELIM, 1)[0] control.setSetting(HISTORY_KEY, history) return control.draw_items(_BROWSER.search_site(query))
def token_request(self): if self.ClientSecret is '': return postData = {'client_id': self.ClientID, 'client_secret': self.ClientSecret, 'code': self.DeviceCode, 'grant_type': 'http://oauth.net/grant_type/device/1.0'} url = self.OauthUrl + self.TokenUrl response = requests.post(url, data=postData).text response = json.loads(response) control.setSetting('rd.auth', response['access_token']) control.setSetting('rd.refresh', response['refresh_token']) self.token = response['access_token'] self.refresh = response['refresh_token'] control.setSetting('rd.expiry', str(time.time() + int(response['expires_in']))) username = self.get_url('https://api.real-debrid.com/rest/1.0/user')['username'] control.setSetting('rd.username', username) control.ok_dialog(control.ADDON_NAME, 'Real Debrid ' + control.lang(30103))
def auth_loop(self): if control.progressDialog.iscanceled(): control.progressDialog.close() return time.sleep(self.OauthTimeStep) url = "client_id=%s&code=%s" % (self.ClientID, self.DeviceCode) url = self.OauthUrl + self.DeviceCredUrl % url response = json.loads(requests.get(url).text) if 'error' in response: return else: try: control.progressDialog.close() control.setSetting('rd.client_id', response['client_id']) control.setSetting('rd.secret', response['client_secret']) self.ClientSecret = response['client_secret'] self.ClientID = response['client_id'] except: control.ok_dialog(control.ADDON_NAME, control.lang(30105)) return
def SEARCH(payload): query = control.keyboard(control.lang(30002)) if query: return control.draw_items(NineAnimeBrowser().search_site(query)) return False
def on_stopped(): return control.yesno_dialog(control.lang(30200), control.lang(30201), control.lang(30202))
def SEARCH(payload): query = control.keyboard(control.lang(30002)) if query: return control.draw_items(_BROWSER.search_site(query)) return False
from resources.lib.ui import control from resources.lib.ui import utils from resources.lib.ui.SourcesList import SourcesList from resources.lib.ui.router import route, router_process from resources.lib.NineAnimeBrowser import NineAnimeBrowser AB_LIST = [".", "0"] + [chr(i) for i in range(ord("A"), ord("Z") + 1)] MENU_ITEMS = [(control.lang(30000), "latest"), (control.lang(30001), "newest"), (control.lang(30002), "genres"), (control.lang(30003), "search")] @route('animes/*') def ANIMES_PAGE(animeurl): return control.draw_items(NineAnimeBrowser().get_anime_episodes(animeurl)) @route('newest') def NEWEST(payload): return control.draw_items(NineAnimeBrowser().get_newest()) @route('newest/*') def NEWEST_PAGES(payload): return control.draw_items(NineAnimeBrowser().get_newest(int(payload))) @route('latest') def LATEST(payload): return control.draw_items(NineAnimeBrowser().get_latest())
def CLEAR_SETTINGS(payload, params): dialog = control.yesno_dialog(control.lang(30300), control.lang(30301)) return control.clear_settings(dialog)
import urlparse AB_LIST = ["none"] + [chr(i) for i in range(ord("a"), ord("z") + 1)] AB_LIST_NAMING = ["No Letter" ] + [chr(i) for i in range(ord("A"), ord("Z") + 1)] HISTORY_KEY = "addon.history" LASTWATCHED_KEY = "addon.last_watched" LASTWATCHED_NAME_KEY = "%s.name" % LASTWATCHED_KEY LASTWATCHED_URL_KEY = "%s.url" % LASTWATCHED_KEY LASTWATCHED_IMAGE_KEY = "%s.image" % LASTWATCHED_KEY HISTORY_DELIM = ";" MENU_ITEMS = [ (control.lang(30005), "latest", ''), (control.lang(30006), "anichart_popular", ''), (control.lang(30004), "anilist_genres", ''), (control.lang(30008), "search_history", ''), (control.lang(30009), "settings", ''), ] _BROWSER = AnimepaheBrowser() def _add_last_watched(): if not control.getSetting(LASTWATCHED_URL_KEY): return MENU_ITEMS.insert( 0, ("%s[I]%s[/I]" %
from resources.lib.ui import control from resources.lib.ui import utils from resources.lib.ui.SourcesList import SourcesList from resources.lib.ui.router import on_param, route, router_process from resources.lib.NineAnimeBrowser import NineAnimeBrowser import urlparse AB_LIST = [".", "0"] + [chr(i) for i in range(ord("A"), ord("Z") + 1)] MENU_ITEMS = [ (control.lang(30009), "watchlist", True), (control.lang(30000), "latest", False), (control.lang(30001), "newest", False), (control.lang(30002), "recent_subbed", False), (control.lang(30003), "popular_subbed", False), (control.lang(30004), "recent_dubbed", False), (control.lang(30005), "popular_dubbed", False), (control.lang(30006), "genres", False), (control.lang(30007), "search_history", False), (control.lang(30008), "settings", False), (control.lang(30010), "logout", True), ] SERVER_CHOICES = { "serverstreamango": "Streamango", "serverrapid": "RapidVideo", "servermycloud": "MyCloud", "serveropenload": "OpenLoad", } WATCHLIST_ITEMS = [(control.lang(30300), "watchlist_all"), (control.lang(30301), "watchlist_watching"), (control.lang(30302), "watchlist_completed"),
import urlparse AB_LIST = ["none"] + [chr(i) for i in range(ord("a"), ord("z") + 1)] AB_LIST_NAMING = ["No Letter" ] + [chr(i) for i in range(ord("A"), ord("Z") + 1)] HISTORY_KEY = "addon.history" LASTWATCHED_KEY = "addon.last_watched" LASTWATCHED_NAME_KEY = "%s.name" % LASTWATCHED_KEY LASTWATCHED_URL_KEY = "%s.url" % LASTWATCHED_KEY LASTWATCHED_IMAGE_KEY = "%s.image" % LASTWATCHED_KEY HISTORY_DELIM = ";" MENU_ITEMS = [ (control.lang(30001), "anichart_airing", ''), (control.lang(30002), "all", ''), (control.lang(30003), "letter", ''), (control.lang(30004), "anilist_genres", ''), (control.lang(30005), "latest", ''), (control.lang(30006), "popular", ''), (control.lang(30007), "random", ''), (control.lang(30008), "search_history", ''), (control.lang(30009), "settings", ''), ] _FLAVOR = control.getSetting('baseflavor') _BROWSER = WonderfulSubsBrowser(_FLAVOR) def _add_last_watched():
from resources.lib.ui import control from resources.lib.ui import utils from resources.lib.ui.SourcesList import SourcesList from resources.lib.ui.router import route, router_process from resources.lib.NineAnimeBrowser import NineAnimeBrowser import urlparse AB_LIST = [".", "0"] + [chr(i) for i in range(ord("A"), ord("Z") + 1)] MENU_ITEMS = [(control.lang(30000), "latest"), (control.lang(30001), "newest"), (control.lang(30002), "recent_subbed"), (control.lang(30003), "popular_subbed"), (control.lang(30004), "recent_dubbed"), (control.lang(30005), "popular_dubbed"), (control.lang(30006), "genres"), (control.lang(30007), "search"), (control.lang(30008), "settings")] SERVER_CHOICES = { "serverg4": "Server G4", "serverrapid": "RapidVideo", "servermycloud": "MyCloud", "serveropenload": "OpenLoad", } _BROWSER = NineAnimeBrowser() control.setContent('tvshows') def isDirectoryStyle(): style = control.getSetting('displaystyle') return "Directory" == style
from resources.lib.ui import control from resources.lib.ui import player from resources.lib.ui import utils from resources.lib.ui import database from resources.lib.ui.router import on_param, route, router_process from resources.lib.KaitoBrowser import KaitoBrowser from resources.lib.AniListBrowser import AniListBrowser from resources.lib.WatchlistIntegration import set_browser, add_watchlist, watchlist_update import ast MENU_ITEMS = [ (control.lang(30001), "anilist_airing", ''), (control.lang(30002), "airing_dub", ''), (control.lang(30003), "latest", ''), (control.lang(30004), "latest_dub", ''), (control.lang(30005), "anilist_trending", ''), (control.lang(30006), "anilist_popular", ''), (control.lang(30007), "anilist_upcoming", ''), (control.lang(30008), 'anilist_all_time_popular', ''), (control.lang(30009), "anilist_genres", ''), (control.lang(30010), "search_history", ''), (control.lang(30011), "tools", ''), ] _TITLE_LANG = control.getSetting("titlelanguage") _BROWSER = KaitoBrowser() _ANILIST_BROWSER = AniListBrowser(_TITLE_LANG)
def WIPE_ADDON_DATA(payload, params): dialog = control.yesno_dialog(control.lang(30010), control.lang(30025)) return control.clear_settings(dialog)
def genre_dialog(genre_display_list): return control.multiselect_dialog(control.lang(30004), genre_display_list)
from resources.lib.ui import control from resources.lib.ui import utils from resources.lib.ui.SourcesList import SourcesList from resources.lib.ui.router import on_param, route, router_process from resources.lib.NineAnimeBrowser import NineAnimeBrowser import urlparse AB_LIST = [".", "0"] + [chr(i) for i in range(ord("A"), ord("Z")+1)] MENU_ITEMS = [ (control.lang(30009), "watchlist", True), (control.lang(30000), "latest", False), (control.lang(30001), "newest", False), (control.lang(30002), "recent_subbed", False), (control.lang(30003), "popular_subbed", False), (control.lang(30004), "recent_dubbed", False), (control.lang(30005), "popular_dubbed", False), (control.lang(30006), "genres", False), (control.lang(30007), "search_history", False), (control.lang(30008), "settings", False), (control.lang(30010), "logout", True), ] SERVER_CHOICES = { "serverstreamango": "Streamango", "serverrapid": "RapidVideo", "servermycloud": "MyCloud", "serveropenload": "OpenLoad", } WATCHLIST_ITEMS = [ (control.lang(30300), "watchlist_all"), (control.lang(30301), "watchlist_watching"),