chore(performace): Prefetching of user video lists
authorSebastian Golasch <public@asciidisco.com>
Tue, 7 Mar 2017 21:30:32 +0000 (22:30 +0100)
committerSebastian Golasch <public@asciidisco.com>
Tue, 7 Mar 2017 21:30:32 +0000 (22:30 +0100)
addon.xml
resources/language/English/strings.po
resources/language/German/strings.po
resources/lib/Navigation.py
resources/lib/NetflixHttpSubRessourceHandler.py
resources/lib/NetflixSession.py

index f60679cd3a5d30a6a2ab487fc250b61aad11cc8a..b341ab6c1b176f7a5bdd3f60baaa114c0606d95f 100644 (file)
--- a/addon.xml
+++ b/addon.xml
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<addon id="plugin.video.netflix" name="Netflix" version="0.10.2" provider-name="libdev + jojo + asciidisco">
+<addon id="plugin.video.netflix" name="Netflix" version="0.10.3" provider-name="libdev + jojo + asciidisco">
   <requires>
     <import addon="xbmc.python" version="2.24.0"/>
     <import addon="script.module.beautifulsoup4" version="4.3.2"/>
index 7c48394c5fbc239f3c72b72262a75d8aeedeef80..918b0d879b163fc3d1f07284f7bd974a51cd5f4d 100644 (file)
@@ -1,7 +1,7 @@
 # Kodi Media Center language file
 # Addon Name: Netflix
 # Addon id: plugin.video.netflix
-# Addon version: 0.10.2
+# Addon version: 0.10.3
 # Addon Provider: libdev + jojo + asciidisco
 msgid ""
 msgstr ""
index 0ff4357c546ba74d7f6c6b67b0ac4263abe57bf9..cd7fa98e5fc0b172d1cdbdd594b451f03e350816 100644 (file)
@@ -1,7 +1,7 @@
 # Kodi Media Center language file
 # Addon Name: Netflix
 # Addon id: plugin.video.netflix
-# Addon version: 0.10.2
+# Addon version: 0.10.3
 # Addon Provider: libdev + jojo + asciidisco
 msgid ""
 msgstr ""
index 813b6444e11f4a4a936c3bcfdd08a257c21b48f6..33711a7494714b174ad6b551a2e4a1fbc76c7bbb 100644 (file)
@@ -415,7 +415,6 @@ class Navigation:
             self.call_netflix_service({'method': 'switch_profile', 'profile_id': params['profile_id']})
         # check login, in case of main menu
         if 'action' not in params:
-            self.kodi_helper.log('ES Called - Zeile 428')
             self.establish_session(account=credentials)
         return options
 
@@ -486,7 +485,6 @@ class Navigation:
         if 'error' in response:
             # check if we do not have a valid session, in case that happens: (re)login
             if self._is_expired_session(response=response):
-                self.kodi_helper.log('ES Called - Zeile 499')
                 if self.establish_session(account=self.kodi_helper.get_credentials()):
                     return True
             message = response['message'] if 'message' in response else ''
index dd0fa08a608e56e1870327c8ea4fcf137c9d7a57..47230f459d0aea8405ea47c106bc656f6e9670e9 100644 (file)
@@ -9,6 +9,7 @@ class NetflixHttpSubRessourceHandler:
         self.kodi_helper = kodi_helper
         self.netflix_session = netflix_session
         self.credentials = self.kodi_helper.get_credentials()
+        self.video_list_cache = {}
 
         if self.credentials['email'] != '' and self.credentials['password'] != '':
             if self.netflix_session.is_logged_in(account=self.credentials):
@@ -16,9 +17,16 @@ class NetflixHttpSubRessourceHandler:
             else:
                 self.netflix_session.login(account=self.credentials)
             self.profiles = self.netflix_session.profiles
+            self._prefetch_user_video_lists()
         else:
             self.profiles = []
 
+    def _prefetch_user_video_lists (self):
+        for profile_id in self.profiles:
+            self.switch_profile({'profile_id': [profile_id]})
+            self.video_list_cache[profile_id] = self.fetch_video_list_ids({})
+        print self.video_list_cache
+
     def is_logged_in (self, params):
         if self.credentials['email'] == '' or self.credentials['password'] == '':
             return False
@@ -46,6 +54,10 @@ class NetflixHttpSubRessourceHandler:
         return self.netflix_session.esn
 
     def fetch_video_list_ids (self, params):
+        cached_list = self.video_list_cache.get(self.netflix_session.user_data['guid'], None)
+        if cached_list != None:
+            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
index 0ad98b1757fe24170a0f34ff4707a971cb345bb6..3f9173be29adac83336bf0ab289bfad350f16f29 100644 (file)
@@ -2296,5 +2296,5 @@ class NetflixSession:
         self.esn = self._parse_esn_data(netflix_page_data=netflix_page_data)
         self.api_data = self._parse_api_base_data(netflix_page_data=netflix_page_data)
         self.profiles = self._parse_profile_data(netflix_page_data=netflix_page_data)
-        self.log('Found ESN "' + self.esn)
+        self.log('Found ESN "' + self.esn + '"')
         return netflix_page_data