def add_videos_to_directory(loading_progress, run_as_widget, video_metadatas, video_type, page = None, url=None, viewing_activity = False): removable = url != None and 'mylist' in url if not viewing_activity: sorted_video_metadata = sorted(video_metadatas, key=lambda t: t['title'], reverse = viewing_activity) else: sorted_video_metadata = video_metadatas allowed_types = calc_allowed_types(video_type, viewing_activity) filtered_video_metadata = [] for video_metadata in sorted_video_metadata: if video_metadata['type'] in allowed_types: filtered_video_metadata.append(video_metadata) add.videos(filtered_video_metadata, removable, viewing_activity=viewing_activity) items_per_page = int(generic_utility.get_setting('items_per_page')) if (not url or 'list_viewing_activity' not in url) and len(video_metadatas) == items_per_page: add.add_next_item('zzz[Next]zzz', page + 1, url, video_type, 'list_videos', '') if len(video_metadatas) == 0: generic_utility.notification(generic_utility.get_string(30306)) if not viewing_activity: add_sort_methods()
def add_or_remove(video_id, is_add): root_list = get_root_list() my_list = get_mylist(root_list)[0] auth = generic_utility.get_setting('authorization_url') track_id = get.track_id_list(my_list) if is_add: add_or_remove_str = 'addToList' add_or_remove_msg = 'added' else: add_or_remove_str = 'removeFromList' add_or_remove_msg = 'removed' post = ('{"callPath":["lolomos","%s","%s"],"params":["%s",2,["videos",%s],%s,null,null],' + '"authURL":"%s"}') % (root_list, add_or_remove_str, my_list, video_id, track_id, auth) content = connect.load_netflix_site(generic_utility.evaluator()+'&method=call', post, options=True) jsn = json.loads(content) generic_utility.log('mylist: '+my_list) generic_utility.log(str(jsn)) if '"invalidated"' in content: generic_utility.notification('Successfully '+add_or_remove_msg) elif 'already exists' in content: generic_utility.notification('already exists') generic_utility.debug('add to mylist content: '+content)
def cache(): try: xbmcvfs.rmdir(generic_utility.cache_dir(), force=True) generic_utility.log('Cache folder deleted.') generic_utility.notification(generic_utility.get_string(30309)) except Exception: pass
def playInternal (self, video_id, series_id): xbmc.audioSuspend() self.disable_screensaver() if generic_utility.get_setting('disable_lirc') == 'true': xbmc.executebuiltin('LIRC.Stop') try: self.launch_browser('http://netflix.com/watch/%s' % video_id) except: generic_utility.log(traceback.format_exc(), xbmc.LOGERROR) generic_utility.notification('Error launching browser. See logfile') self.enable_screensaver() xbmc.audioResume() if generic_utility.get_setting('disable_lirc') == 'true': xbmc.executebuiltin('LIRC.Start') if generic_utility.get_setting('sync_viewstate') == 'true': try: self.update_playcount(video_id) except: generic_utility.log(traceback.format_exc(), xbmc.LOGERROR) generic_utility.notification('Cannot update playcount. See logfile') self.close()
def cookies(): if xbmcvfs.exists(generic_utility.cookies_file()): xbmcvfs.delete(generic_utility.cookies_file()) generic_utility.notification(generic_utility.get_string(30301)) if xbmcvfs.exists(generic_utility.headers_file()): xbmcvfs.delete(generic_utility.headers_file()) generic_utility.notification(generic_utility.get_string(30302))
def read_browser(self): self.browser = generic_utility.get_setting('browser') if self.browser not in(BROWSER_CHROME, BROWSER_CHROME_LAUNCHER, BROWSER_EDGE, BROWSER_INTERNET_EXPLORER, BROWSER_SAFARI, BROWSER_CHROMIUM, BROWSER_ANDROID): generic_utility.notification(generic_utility.get_string(50001)) xbmc.sleep(2000) self.valid_browser = False generic_utility.open_setting() self.valid_browser = True
def addon(): dialog = xbmcgui.Dialog() if dialog.yesno(generic_utility.addon_name + ':', generic_utility.get_string(30307)): try: xbmcvfs.rmdir(generic_utility.data_dir(), force=True) generic_utility.log('Addon userdata folder deleted.') generic_utility.notification(generic_utility.get_string(30308)) except Exception: pass
def login(): if not test: login_progress = xbmcgui.DialogProgress() login_progress.create('Netflix', generic_utility.get_string(30200) + '...') generic_utility.progress_window(login_progress, 25, generic_utility.get_string(30201)) content = connect.load_netflix_site(generic_utility.main_url + 'Login', new_session=True, login_process=True) if not 'Sorry, Netflix ' in content: match = re.compile('locale: "(.+?)"', re.DOTALL|re.UNICODE).findall(content) locale = None if(len(match)) == 0: match = re.compile('"pageName":"login","locale":"(.+?)"', re.DOTALL|re.UNICODE).findall(content) if(len(match)) == 0: generic_utility.error('Cannot find locale on page. content: '+content) login_url = 'Login' else: locale = match[0] login_url = 'Login?locale=' + locale else: locale = match[0] login_url = 'Login?locale=' + locale generic_utility.set_setting('language', locale) post_data = {'authURL': generic_utility.get_setting('authorization_url'), 'email': generic_utility.get_setting('username'), 'password': generic_utility.get_setting('password'), 'RememberMe': 'on'} if not test: generic_utility.progress_window(login_progress, 50, generic_utility.get_string(30202)) content = connect.load_netflix_site( generic_utility.main_url + login_url, post=post_data, login_process=True) if 'id="page-LOGIN"' in content: if not test: generic_utility.notification(generic_utility.get_string(30303)) return False parse_data_set_cookies(content) if not test: generic_utility.progress_window(login_progress, 75, generic_utility.get_string(30203)) profile_selection() if login_progress: if not test: if not generic_utility.progress_window(login_progress, 100, generic_utility.get_string(30204)): return False xbmc.sleep(500) login_progress.close() return True else: if not test: generic_utility.notification(generic_utility.get_string(30300)) if login_progress: login_progress.close() return False
def trailer(video_type, title): content = search.tmdb(video_type, title) if content['total_results'] > 0: content = content['results'][0] tmdb_id = content['id'] content = search.trailer(video_type, tmdb_id) else: generic_utility.notification(generic_utility.get_string(30305)) content = None return content
def trailer(video_type, title): import search content = search.tmdb(video_type, title) if content["total_results"] > 0: content = content["results"][0] tmdb_id = content["id"] content = search.trailer(video_type, tmdb_id) else: generic_utility.notification(generic_utility.get_string(30305)) content = None return content
def viewing_activity(video_type, run_as_widget=False): loading_progress = show_loading_progress(run_as_widget) xbmcplugin.setContent(plugin_handle, 'movies') metadata = get.viewing_activity_matches(video_type) if len(metadata) > 0: add_videos_to_directory(loading_progress, run_as_widget, metadata, video_type, viewing_activity=True) else: generic_utility.notification(generic_utility.get_string(30306)) if generic_utility.get_setting('force_view') and not run_as_widget: xbmc.executebuiltin('Container.SetViewMode(' + generic_utility.get_setting('view_id_activity') + ')') xbmcplugin.endOfDirectory(plugin_handle)
def add_videos_to_directory(loading_progress, run_as_widget, video_metadatas, video_type, page=None, url=None, viewing_activity=False): removable = url != None and 'mylist' in url if viewing_activity and type != "movie": xbmcplugin.setContent(int(sys.argv[1]), "episodes") elif video_type == "movie": xbmcplugin.setContent(int(sys.argv[1]), "movies") elif video_type == "show": xbmcplugin.setContent(int(sys.argv[1]), "tvshows") elif video_type == "both": xbmcplugin.setContent(int(sys.argv[1]), "tvshows") if not viewing_activity: sorted_video_metadata = sorted(video_metadatas, key=lambda t: t['date_watched'], reverse=viewing_activity) else: sorted_video_metadata = video_metadatas allowed_types = calc_allowed_types(video_type, viewing_activity) filtered_video_metadata = [] for video_metadata in sorted_video_metadata: if video_metadata['type'] in allowed_types: filtered_video_metadata.append(video_metadata) add.videos(filtered_video_metadata, removable, viewing_activity=viewing_activity) items_per_page = int(generic_utility.get_setting('items_per_page')) if len(video_metadatas) == 0: generic_utility.notification(generic_utility.get_string(30306)) if not viewing_activity: add_sort_methods() else: xbmcplugin.addSortMethod(plugin_handle, xbmcplugin.SORT_METHOD_LABEL) if page is not None and (not url or 'list_viewing_activity' not in url ) and len(video_metadatas) == items_per_page: add.add_next_item(page + 1, url, video_type, 'list_videos')
def load_videos_to_directory(loading_progress, run_as_widget, metadatas, video_type, page = None, url=None, viewing_activity = False): video_metadatas = multiprocessor.load_data(metadatas, video_type, run_as_widget, loading_progress, url, viewing_activity) removable = url != None and 'my-list' in url sorted_video_metadata = sorted(video_metadatas, key=lambda t: t['title'], reverse = viewing_activity) for video_metadata in sorted_video_metadata: if (video_metadata != None): video_add(video_metadata, removable, viewing_activity) # generic_utility.log(url) items_per_page = int(generic_utility.get_setting('items_per_page')) if ((url == None or 'list_viewing_activity' not in url) and len(video_metadatas) == items_per_page): add.add_next_item('Next', page + 1, url, video_type, 'list_videos', '') if len(video_metadatas) == 0: generic_utility.notification(generic_utility.get_string(30306)) add_sort_methods()
def playInternal (self, video_id, series_id): xbmc.audioSuspend() self.disable_screensaver() try: self.launch_browser('https://www.netflix.com/watch/%s' % video_id) except: generic_utility.log(traceback.format_exc(), xbmc.LOGERROR) generic_utility.notification('Error launching browser. See logfile') self.enable_screensaver() xbmc.audioResume() try: self.update_playcount(video_id) except: generic_utility.log(traceback.format_exc(), xbmc.LOGERROR) generic_utility.notification('Cannot update playcount. See logfile') self.close()
def login(): if not test: login_progress = xbmcgui.DialogProgress() login_progress.create('Netflix', generic_utility.get_string(30200) + '...') generic_utility.progress_window(login_progress, 25, generic_utility.get_string(30201)) content = connect.load_netflix_site(generic_utility.main_url + 'Login', new_session=True, login_process=True) if not 'Sorry, Netflix ' in content: match = re.compile('locale: "(.+?)"', re.DOTALL|re.UNICODE).findall(content) generic_utility.set_setting('language', match[0]) post_data = {'authURL': generic_utility.get_setting('authorization_url'), 'email': generic_utility.get_setting('username'), 'password': generic_utility.get_setting('password'), 'RememberMe': 'on'} if not test: generic_utility.progress_window(login_progress, 50, generic_utility.get_string(30202)) content = connect.load_netflix_site( generic_utility.main_url + 'Login?locale=' + generic_utility.get_setting('language'), post=post_data, login_process=True) if 'id="page-LOGIN"' in content: if not test: generic_utility.notification(generic_utility.get_string(30303)) return False parse_data_set_cookies(content) if not test: generic_utility.progress_window(login_progress, 75, generic_utility.get_string(30203)) profile_selection() if login_progress: if not test: if not generic_utility.progress_window(login_progress, 100, generic_utility.get_string(30204)): return False xbmc.sleep(500) login_progress.close() return True else: if not test: generic_utility.notification(generic_utility.get_string(30300)) if login_progress: login_progress.close() return False
def login(): login_progress = xbmcgui.DialogProgress() login_progress.create('Netflix', generic_utility.get_string(30200) + '...') generic_utility.progress_window(login_progress, 25, generic_utility.get_string(30201)) content = connect.load_netflix_site(generic_utility.main_url + 'Login', new_session=True) if not 'Sorry, Netflix ' in content: match = re.compile('name="authURL" value="(.+?)"', re.DOTALL| re.UNICODE).findall(content) # utility.log('Setting authorization url: ' + match[0]) generic_utility.set_setting('authorization_url', match[0]) match = re.compile('locale: "(.+?)"', re.DOTALL|re.UNICODE).findall(content) generic_utility.set_setting('language', match[0]) post_data = {'authURL': generic_utility.get_setting('authorization_url'), 'email': generic_utility.get_setting('username'), 'password': generic_utility.get_setting('password'), 'RememberMe': 'on'} generic_utility.progress_window(login_progress, 50, generic_utility.get_string(30202)) content = connect.load_netflix_site( generic_utility.main_url + 'Login?locale=' + generic_utility.get_setting('language'), post=post_data) # utility.log(content) if 'id="page-LOGIN"' in content: generic_utility.notification(generic_utility.get_string(30303)) return False match = re.compile('"apiUrl":"(.+?)",', re.UNICODE).findall(content) generic_utility.set_setting('api_url', match[0]) connect.set_chrome_netflix_cookies() generic_utility.progress_window(login_progress, 75, generic_utility.get_string(30203)) profile_selection() if login_progress: if not generic_utility.progress_window(login_progress, 100, generic_utility.get_string(30204)): return False xbmc.sleep(500) login_progress.close() return True else: generic_utility.notification(generic_utility.get_string(30300)) if login_progress: login_progress.close() return False
def playInternal(self, video_id, series_id): xbmc.audioSuspend() self.disable_screensaver() try: self.launch_browser('https://www.netflix.com/watch/%s' % video_id) except: generic_utility.log(traceback.format_exc(), xbmc.LOGERROR) generic_utility.notification( 'Error launching browser. See logfile') self.enable_screensaver() xbmc.audioResume() try: self.update_playcount(video_id) except: generic_utility.log(traceback.format_exc(), xbmc.LOGERROR) generic_utility.notification( 'Cannot update playcount. See logfile') self.close()
def add_videos_to_directory(loading_progress, run_as_widget, video_metadatas, video_type, page = None, url=None, viewing_activity = False): removable = url != None and 'mylist' in url if viewing_activity and type!="movie": xbmcplugin.setContent(int(sys.argv[1]), "episodes") elif video_type=="movie": xbmcplugin.setContent(int(sys.argv[1]), "movies") elif video_type == "show": xbmcplugin.setContent(int(sys.argv[1]), "tvshows") elif video_type == "both": xbmcplugin.setContent(int(sys.argv[1]), "tvshows") if not viewing_activity: sorted_video_metadata = sorted(video_metadatas, key=lambda t: t['date_watched'], reverse = viewing_activity) else: sorted_video_metadata = video_metadatas allowed_types = calc_allowed_types(video_type, viewing_activity) filtered_video_metadata = [] for video_metadata in sorted_video_metadata: if video_metadata['type'] in allowed_types: filtered_video_metadata.append(video_metadata) add.videos(filtered_video_metadata, removable, viewing_activity=viewing_activity) items_per_page = int(generic_utility.get_setting('items_per_page')) if len(video_metadatas) == 0: generic_utility.notification(generic_utility.get_string(30306)) if not viewing_activity: add_sort_methods() else: xbmcplugin.addSortMethod(plugin_handle, xbmcplugin.SORT_METHOD_LABEL) if page is not None and (not url or 'list_viewing_activity' not in url) and len(video_metadatas) == items_per_page: add.add_next_item(page + 1, url, video_type, 'list_videos')
def load_videos_to_directory(loading_progress, run_as_widget, metadatas, video_type, page=None, url=None, viewing_activity=False): video_metadatas = multiprocessor.load_data( metadatas, video_type, run_as_widget, loading_progress, viewing_activity=viewing_activity) removable = url != None and 'my-list' in url if not viewing_activity: sorted_video_metadata = sorted(video_metadatas, key=lambda t: t['title'], reverse=viewing_activity) else: sorted_video_metadata = video_metadatas for video_metadata in sorted_video_metadata: if (video_metadata != None): video_add(video_metadata, removable, viewing_activity) # generic_utility.log(url) items_per_page = int(generic_utility.get_setting('items_per_page')) if ((url == None or 'list_viewing_activity' not in url) and len(video_metadatas) == items_per_page): add.add_next_item('Next', page + 1, url, video_type, 'list_videos', '') if len(video_metadatas) == 0: generic_utility.notification(generic_utility.get_string(30306)) if not viewing_activity: add_sort_methods()
def trailer(title, video_type): trailers = [] content = get.trailer(video_type, title) if content: for match in content['results']: if match['site'] == 'YouTube': if match['iso_639_1']: name = match['name'] + ' (' + match['iso_639_1'] + ')' else: name = match['name'] match = {'name': name, 'key': match['key']} trailers.append(match) if len(trailers) > 0: dialog = xbmcgui.Dialog() nr = dialog.select('Trailer', [match['name'] for match in trailers]) if nr >= 0: selected_trailer = trailers[nr] match = 'PlayMedia(plugin://plugin.video.youtube/play/?video_id=%s)' % selected_trailer['key'] xbmc.executebuiltin(match) else: generic_utility.notification(generic_utility.get_string(30305)) else: generic_utility.notification(generic_utility.get_string(30305)) pass
def login(): if not test: login_progress = xbmcgui.DialogProgress() login_progress.create('Netflix', generic_utility.get_string(30200) + '...') generic_utility.progress_window(login_progress, 25, generic_utility.get_string(30201)) content = connect.load_netflix_site(generic_utility.main_url + 'Login', new_session=True, login_process=True) if 'Sorry, Netflix ' not in content: match = re.compile('locale: "(.+?)"', re.DOTALL | re.UNICODE).findall(content) locale = None if (len(match)) == 0: match = re.compile('"pageName":"login","locale":"(.+?)"', re.DOTALL | re.UNICODE).findall(content) if (len(match)) == 0: generic_utility.error('Cannot find locale on page. content: ' + content) login_url = 'Login' else: locale = match[0] login_url = 'Login?locale=' + locale else: locale = match[0] login_url = 'Login?locale=' + locale generic_utility.set_setting('language', locale) post_data = { 'authURL': generic_utility.get_setting('authorization_url'), 'email': generic_utility.get_setting('username'), 'password': generic_utility.get_setting('password'), 'rememberMe': 'true', 'flow': 'websiteSignUp', 'mode': 'loginPassword', 'action': 'loginAction', 'withFields': 'email,password,rememberMe,nextPage', 'nextPage': '' } if not test: generic_utility.progress_window(login_progress, 50, generic_utility.get_string(30202)) content = connect.load_netflix_site(generic_utility.main_url + login_url, post=post_data, login_process=True) if 'id="page-LOGIN"' in content: if not test: generic_utility.notification(generic_utility.get_string(30303)) return False parse_data_set_cookies(content) if not test: generic_utility.progress_window(login_progress, 75, generic_utility.get_string(30203)) profile_selection() if login_progress: if not test: if not generic_utility.progress_window( login_progress, 100, generic_utility.get_string(30204)): return False xbmc.sleep(500) login_progress.close() return True else: if not test: generic_utility.notification(generic_utility.get_string(30300)) if login_progress: login_progress.close() return False
def login(): if not test: login_progress = xbmcgui.DialogProgress() login_progress.create("Netflix", generic_utility.get_string(30200) + "...") generic_utility.progress_window(login_progress, 25, generic_utility.get_string(30201)) content = connect.load_netflix_site(generic_utility.main_url + "Login", new_session=True, login_process=True) if "Sorry, Netflix " not in content: match = re.compile('locale: "(.+?)"', re.DOTALL | re.UNICODE).findall(content) locale = None if (len(match)) == 0: match = re.compile('"pageName":"login","locale":"(.+?)"', re.DOTALL | re.UNICODE).findall(content) if (len(match)) == 0: generic_utility.error("Cannot find locale on page. content: " + content) login_url = "Login" else: locale = match[0] login_url = "Login?locale=" + locale else: locale = match[0] login_url = "Login?locale=" + locale generic_utility.set_setting("language", locale) post_data = { "authURL": generic_utility.get_setting("authorization_url"), "email": generic_utility.get_setting("username"), "password": generic_utility.get_setting("password"), "rememberMe": "true", "flow": "websiteSignUp", "mode": "loginPassword", "action": "loginAction", "withFields": "email,password,rememberMe,nextPage", "nextPage": "", } if not test: generic_utility.progress_window(login_progress, 50, generic_utility.get_string(30202)) content = connect.load_netflix_site(generic_utility.main_url + login_url, post=post_data, login_process=True) if 'id="page-LOGIN"' in content: if not test: generic_utility.notification(generic_utility.get_string(30303)) return False parse_data_set_cookies(content) if not test: generic_utility.progress_window(login_progress, 75, generic_utility.get_string(30203)) profile_selection() if login_progress: if not test: if not generic_utility.progress_window(login_progress, 100, generic_utility.get_string(30204)): return False xbmc.sleep(500) login_progress.close() return True else: if not test: generic_utility.notification(generic_utility.get_string(30300)) if login_progress: login_progress.close() return False
elif mode == 'search': search.netflix(video_type) elif mode == 'delete_cookies': delete.cookies() elif mode == 'delete_cache': delete.cache() elif mode == 'reset_addon': delete.addon() elif mode == 'play_video': # utility.log('play_video: '+url) play.video(url, series_id); elif mode == 'play_video_main': # utility.log('play_video_main: '+url) play.video(url, series_id); elif mode == 'relogin': connect.do_login() else: general.index() try: handle_request() except: generic_utility.log('parameters: ' + sys.argv[2]) generic_utility.log(traceback.format_exc(), xbmc.LOGERROR) dialog = xbmcgui.Dialog() do_fresh_login = dialog.yesno(generic_utility.get_string(50002), generic_utility.get_string(50003), generic_utility.get_string(50004)) if do_fresh_login: if connect.do_login()==True: generic_utility.notification(generic_utility.get_string(50006))
search.netflix(video_type) elif mode == 'delete_cookies': delete.cookies() elif mode == 'delete_cache': delete.cache() elif mode == 'reset_addon': delete.addon() elif mode == 'play_video': # utility.log('play_video: '+url) play.video(url, series_id) elif mode == 'play_video_main': # utility.log('play_video_main: '+url) play.video(url, series_id) elif mode == 'relogin': connect.do_login() else: general.index() try: handle_request() except: generic_utility.log('parameters: ' + sys.argv[2]) generic_utility.log(traceback.format_exc(), xbmc.LOGERROR) dialog = xbmcgui.Dialog() do_fresh_login = dialog.yesno('Sorry', 'Flix2Kodi crashed.', 'Try to refresh your login?') if do_fresh_login: if connect.do_login() == True: generic_utility.notification('Login refreshed. please try again.')
elif mode == 'delete_cookies': delete.cookies() elif mode == 'delete_cache': delete.cache() elif mode == 'reset_addon': delete.addon() elif mode == 'play_video': # utility.log('play_video: '+url) play.video(url, series_id) elif mode == 'play_video_main': # utility.log('play_video_main: '+url) play.video(url, series_id) elif mode == 'relogin': connect.do_login() else: general.index() try: handle_request() except: generic_utility.log('parameters: ' + sys.argv[2]) generic_utility.log(traceback.format_exc(), xbmc.LOGERROR) dialog = xbmcgui.Dialog() do_fresh_login = dialog.yesno(generic_utility.get_string(50002), generic_utility.get_string(50003), generic_utility.get_string(50004)) if do_fresh_login: if connect.do_login() == True: generic_utility.notification(generic_utility.get_string(50006))
elif mode == 'search': search.netflix(video_type) elif mode == 'delete_cookies': delete.cookies() elif mode == 'delete_cache': delete.cache() elif mode == 'reset_addon': delete.addon() elif mode == 'play_video': # utility.log('play_video: '+url) play.video(url, series_id); elif mode == 'play_video_main': # utility.log('play_video_main: '+url) play.video(url, series_id); elif mode == 'relogin': connect.do_login() else: general.index() try: handle_request() except: generic_utility.log('parameters: ' + sys.argv[2]) generic_utility.log(traceback.format_exc(), xbmc.LOGERROR) dialog = xbmcgui.Dialog() do_fresh_login = dialog.yesno(generic_utility.get_string(50002), generic_utility.get_string(50003), generic_utility.get_string(50004)) if do_fresh_login: if connect.do_login()==True: generic_utility.notification('Login refreshed. please try again.')
def force_choose(): generic_utility.set_setting('single_profile', 'false') generic_utility.notification(generic_utility.get_string(30304)) choose()