X-Git-Url: http://git.code-monkey.de/?a=blobdiff_plain;f=resources%2Flib%2FNetflixHttpSubRessourceHandler.py;h=5123ceb5d1f7b184a2c3e9d35aefd78656602249;hb=0ecc215ce1942ce4304b6d4514d190af7ae7e7d8;hp=1c6d29e3529082f7954d6145f91c3e4190f07807;hpb=2b1c5fa796929d522c9b9c366d8e01423b15121c;p=plugin.video.netflix.git diff --git a/resources/lib/NetflixHttpSubRessourceHandler.py b/resources/lib/NetflixHttpSubRessourceHandler.py index 1c6d29e..5123ceb 100644 --- a/resources/lib/NetflixHttpSubRessourceHandler.py +++ b/resources/lib/NetflixHttpSubRessourceHandler.py @@ -3,6 +3,9 @@ # Module: NetflixHttpSubRessourceHandler # Created on: 07.03.2017 +from urllib2 import urlopen, URLError +from time import sleep + class NetflixHttpSubRessourceHandler: """ Represents the callable internal server routes & translates/executes them to requests for Netflix""" @@ -22,18 +25,29 @@ class NetflixHttpSubRessourceHandler: self.kodi_helper = kodi_helper self.netflix_session = netflix_session self.credentials = self.kodi_helper.get_credentials() + self.profiles = [] + self.prefetch_login() self.video_list_cache = {} + self.lolomo = None - # check if we have stored credentials, if so, do the login before the user requests it - # if that is done, we cache the profiles - if self.credentials['email'] != '' and self.credentials['password'] != '': - if self.netflix_session.is_logged_in(account=self.credentials): - self.netflix_session.refresh_session_data(account=self.credentials) + def prefetch_login (self): + """Check if we have stored credentials. + If so, do the login before the user requests it + If that is done, we cache the profiles + """ + if self._network_availble(): + if self.credentials['email'] != '' and self.credentials['password'] != '': + if self.netflix_session.is_logged_in(account=self.credentials): + self.netflix_session.refresh_session_data(account=self.credentials) + self.profiles = self.netflix_session.profiles + else: + self.netflix_session.login(account=self.credentials) + self.profiles = self.netflix_session.profiles else: - self.netflix_session.login(account=self.credentials) - self.profiles = self.netflix_session.profiles + self.profiles = [] else: - self.profiles = [] + sleep(1) + self.prefetch_login() def is_logged_in (self, params): """Existing login proxy function @@ -67,6 +81,7 @@ class NetflixHttpSubRessourceHandler: """ self.profiles = [] self.credentials = {'email': '', 'password': ''} + self.lolomo = None return self.netflix_session.logout() def login (self, params): @@ -143,6 +158,24 @@ class NetflixHttpSubRessourceHandler: return video_list_ids_raw return self.netflix_session.parse_video_list_ids(response_data=video_list_ids_raw) + def fetch_video_list_ids_for_kids (self, params): + """Video list ids proxy function (thanks to Netflix that we need to use a different API for Kids profiles) + + Parameters + ---------- + params : :obj:`dict` of :obj:`str` + Request params + + Returns + ------- + :obj:`list` + Transformed response of the remote call + """ + if self.lolomo == None: + self.lolomo = self.netflix_session.get_lolomo_for_kids() + response = self.netflix_session.fetch_lists_for_kids(lolomo=self.lolomo) + return response + def fetch_video_list (self, params): """Video list proxy function @@ -284,6 +317,7 @@ class NetflixHttpSubRessourceHandler: Response of the remote call """ profile_id = params.get('profile_id', [''])[0] + self.lolomo = None return self.netflix_session.switch_profile(profile_id=profile_id, account=self.credentials) def get_user_data (self, params): @@ -345,3 +379,16 @@ class NetflixHttpSubRessourceHandler: if 'error' in raw_search_contents: return raw_search_contents return self.netflix_session.parse_video_list(response_data=raw_search_contents) + + def _network_availble(self): + """Check if the network is available + Returns + ------- + bool + Network can be accessed + """ + try: + urlopen('http://216.58.192.142', timeout=1) + return True + except URLError as err: + return False