chore(performance): Speeds up display of main menu, genre and recommendation list
[plugin.video.netflix.git] / resources / lib / NetflixHttpSubRessourceHandler.py
index 1c6d29e3529082f7954d6145f91c3e4190f07807..b1bad7a518d5534e8159ef2b9b9135121acb473e 100644 (file)
@@ -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):
@@ -139,6 +154,7 @@ class NetflixHttpSubRessourceHandler:
             self.kodi_helper.log('Serving cached list for user: ' + self.netflix_session.user_data['guid'])
             return cached_list
         video_list_ids_raw = self.netflix_session.fetch_video_list_ids()
+
         if 'error' in video_list_ids_raw:
             return video_list_ids_raw
         return self.netflix_session.parse_video_list_ids(response_data=video_list_ids_raw)
@@ -284,6 +300,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 +362,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