fix(kids-profiles): Reenables Kids profiles after NEtflix API changes
[plugin.video.netflix.git] / resources / lib / Navigation.py
index 813b6444e11f4a4a936c3bcfdd08a257c21b48f6..c2ee4cc05396c692c15c2275b62ba6d8deb19e7a 100644 (file)
@@ -6,6 +6,7 @@
 import urllib
 import urllib2
 import json
+from xbmcaddon import Addon
 from urlparse import parse_qsl
 from utils import noop, log
 
@@ -45,6 +46,10 @@ class Navigation:
         """
         params = self.parse_paramters(paramstring=paramstring)
 
+        # open foreign settings dialog
+        if 'mode' in params.keys() and params['mode'] == 'openSettings':
+            return self.open_settings(params['url'])
+
         # log out the user
         if 'action' in params.keys() and params['action'] == 'logout':
             return self.call_netflix_service({'method': 'logout'})
@@ -155,7 +160,15 @@ class Navigation:
         user_list_id : :obj:`str`
             Type of list to display
         """
-        video_list_ids = self.call_netflix_service({'method': 'fetch_video_list_ids', 'type': type})
+        # determine if we´re in kids mode
+        user_data = self.call_netflix_service({'method': 'get_user_data'})
+        profiles = self.call_netflix_service({'method': 'list_profiles'})
+        is_kids = profiles.get(user_data['guid']).get('isKids', False)
+        # fetch video lists
+        if is_kids == True:
+            video_list_ids = self.call_netflix_service({'method': 'fetch_video_list_ids_for_kids'})
+        else:
+            video_list_ids = self.call_netflix_service({'method': 'fetch_video_list_ids', 'type': type})
         # check for any errors
         if self._is_dirty_response(response=video_list_ids):
             return False
@@ -252,13 +265,21 @@ class Navigation:
         if self.kodi_helper.has_cached_item(cache_id=cache_id):
             video_list_ids = self.kodi_helper.get_cached_item(cache_id=cache_id)
         else:
+            # determine if we´re in Kids profile mode
+            user_data = self.call_netflix_service({'method': 'get_user_data'})
+            profiles = self.call_netflix_service({'method': 'list_profiles'})
+            is_kids = profiles.get(user_data['guid']).get('isKids', False)
             # fetch video lists
-            video_list_ids = self.call_netflix_service({'method': 'fetch_video_list_ids'})
+            if is_kids == True:
+                video_list_ids = self.call_netflix_service({'method': 'fetch_video_list_ids_for_kids'})
+            else:
+                video_list_ids = self.call_netflix_service({'method': 'fetch_video_list_ids'})
+
             # check for any errors
             if self._is_dirty_response(response=video_list_ids):
                 return False
-            # parse the video list ids
-            self.kodi_helper.add_cached_item(cache_id=cache_id, contents=video_list_ids)
+            # cache the video list ids
+            #self.kodi_helper.add_cached_item(cache_id=cache_id, contents=video_list_ids)
         # defines an order for the user list, as Netflix changes the order at every request
         user_list_order = ['queue', 'continueWatching', 'topTen', 'netflixOriginals', 'trendingNow', 'newRelease', 'popularTitles']
         # define where to route the user
@@ -415,7 +436,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 +506,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 ''
@@ -539,3 +558,9 @@ class Navigation:
         data = urllib2.urlopen(full_url).read()
         parsed_json = json.loads(data)
         return parsed_json.get('result', None)
+
+    def open_settings(self, url):
+        """Opens a foreign settings dialog"""
+        is_addon = self.kodi_helper.get_inputstream_addon()
+        url = is_addon if url == 'is' else url
+        return Addon(url).openSettings()