fix(ui): Masks password input, renders empty list if no search or seasons results...
[plugin.video.netflix.git] / resources / lib / KodiHelper.py
index 85bbd44b87161c57c663c46ef1d5c69b3d47da5c..04d268e1c861a94b60e3108217d2e5877b7db76b 100644 (file)
@@ -61,17 +61,6 @@ class KodiHelper:
         dlg = xbmcgui.Dialog()
         return dlg.numeric(heading=self.get_local_string(string_id=30019) + ' ' + self.get_local_string(string_id=30022), type=0)
 
-    def show_adult_pin_dialog (self):
-        """Asks the user for the adult pin
-
-        Returns
-        -------
-        :obj:`int`
-            4 digit adult pin needed for adult movies
-        """
-        dlg = xbmcgui.Dialog()
-        return dlg.input(self.get_local_string(string_id=30002), type=xbmcgui.INPUT_NUMERIC)
-
     def show_search_term_dialog (self):
         """Asks the user for a term to query the netflix search for
 
@@ -111,7 +100,7 @@ class KodiHelper:
             Netflix password
         """
         dlg = xbmcgui.Dialog()
-        return dlg.input(self.get_local_string(string_id=30004), type=xbmcgui.INPUT_ALPHANUM)
+        return dlg.input(self.get_local_string(string_id=30004), type=xbmcgui.INPUT_ALPHANUM, option=xbmcgui.ALPHANUM_HIDE_INPUT)
 
     def show_email_dialog (self):
         """Asks the user for its Netflix account email
@@ -124,8 +113,8 @@ class KodiHelper:
         dlg = xbmcgui.Dialog()
         return dlg.input(self.get_local_string(string_id=30005), type=xbmcgui.INPUT_ALPHANUM)
 
-    def show_wrong_adult_pin_notification (self):
-        """Shows notification that a wrong adult pin was given
+    def show_login_failed_notification (self):
+        """Shows notification that the login failed
 
         Returns
         -------
@@ -133,11 +122,11 @@ class KodiHelper:
             Dialog shown
         """
         dialog = xbmcgui.Dialog()
-        dialog.notification(self.get_local_string(string_id=30006), self.get_local_string(string_id=30007), xbmcgui.NOTIFICATION_ERROR, 5000)
+        dialog.notification(self.get_local_string(string_id=30008), self.get_local_string(string_id=30009), xbmcgui.NOTIFICATION_ERROR, 5000)
         return True
 
-    def show_login_failed_notification (self):
-        """Shows notification that the login failed
+    def show_missing_inputstream_addon_notification (self):
+        """Shows notification that the inputstream addon couldn't be found
 
         Returns
         -------
@@ -145,11 +134,11 @@ class KodiHelper:
             Dialog shown
         """
         dialog = xbmcgui.Dialog()
-        dialog.notification(self.get_local_string(string_id=30008), self.get_local_string(string_id=30009), xbmcgui.NOTIFICATION_ERROR, 5000)
+        dialog.notification(self.get_local_string(string_id=30028), self.get_local_string(string_id=30029), xbmcgui.NOTIFICATION_ERROR, 5000)
         return True
 
-    def show_missing_inputstream_addon_notification (self):
-        """Shows notification that the inputstream addon couldn't be found
+    def show_no_search_results_notification (self):
+        """Shows notification that no search results could be found
 
         Returns
         -------
@@ -157,7 +146,19 @@ class KodiHelper:
             Dialog shown
         """
         dialog = xbmcgui.Dialog()
-        dialog.notification(self.get_local_string(string_id=30028), self.get_local_string(string_id=30029), xbmcgui.NOTIFICATION_ERROR, 5000)
+        dialog.notification(self.get_local_string(string_id=30011), self.get_local_string(string_id=30013))
+        return True
+
+    def show_no_seasons_notification (self):
+        """Shows notification that no seasons be found
+
+        Returns
+        -------
+        bool
+            Dialog shown
+        """
+        dialog = xbmcgui.Dialog()
+        dialog.notification(self.get_local_string(string_id=30010), self.get_local_string(string_id=30012))
         return True
 
     def set_setting (self, key, value):
@@ -432,9 +433,7 @@ class KodiHelper:
                 if video_list[video_list_id]['type'] == 'movie':
                     # it´s a movie, so we need no subfolder & a route to play it
                     isFolder = False
-                    # check maturity index, to determine if we need the adult pin
-                    needs_pin = (True, False)[int(video['maturity']['level']) >= 1000]
-                    url = build_url({'action': 'play_video', 'video_id': video_list_id, 'pin': needs_pin})
+                    url = build_url({'action': 'play_video', 'video_id': video_list_id})
                 # add list item info
                 li = self._generate_entry_info(entry=video, li=li)
                 li = self._generate_context_menu_items(entry=video, li=li)
@@ -477,8 +476,7 @@ class KodiHelper:
         bool
             List could be build
         """
-        li = xbmcgui.ListItem(label=self.get_local_string(30012))
-        xbmcplugin.addDirectoryItem(handle=self.plugin_handle, url='', listitem=li, isFolder=False)
+        self.show_no_seasons_notification()
         xbmcplugin.endOfDirectory(self.plugin_handle)
         return True
 
@@ -498,10 +496,8 @@ class KodiHelper:
         bool
             List could be build
         """
-        li = xbmcgui.ListItem(label=self.get_local_string(30013))
-        xbmcplugin.addDirectoryItem(handle=self.plugin_handle, url=build_url({'action': action}), listitem=li, isFolder=False)
-        xbmcplugin.endOfDirectory(self.plugin_handle)
-        return True
+        self.show_no_search_results_notification()
+        return xbmcplugin.endOfDirectory(self.plugin_handle)
 
     def build_user_sub_listing (self, video_list_ids, type, action, build_url):
         """Builds the video lists screen for user subfolders (genres & recommendations)
@@ -557,7 +553,7 @@ class KodiHelper:
         for index in seasons_sorted:
             for season_id in season_list:
                 season = season_list[season_id]
-                if int(season['id']) == index:
+                if int(season['idx']) == index:
                     li = xbmcgui.ListItem(label=season['text'])
                     # add some art to the item
                     li = self._generate_art_info(entry=season, li=li)
@@ -604,9 +600,7 @@ class KodiHelper:
                     # add list item info
                     li = self._generate_entry_info(entry=episode, li=li, base_info={'mediatype': 'episode'})
                     li = self._generate_context_menu_items(entry=episode, li=li)
-                    # check maturity index, to determine if we need the adult pin
-                    needs_pin = (True, False)[int(episode['maturity']['rating']['maturityLevel']) >= 1000]
-                    url = build_url({'action': 'play_video', 'video_id': episode_id, 'pin': needs_pin, 'start_offset': episode['bookmark']})
+                    url = build_url({'action': 'play_video', 'video_id': episode_id, 'start_offset': episode['bookmark']})
                     xbmcplugin.addDirectoryItem(handle=self.plugin_handle, url=url, listitem=li, isFolder=False)
 
         xbmcplugin.addSortMethod(handle=self.plugin_handle, sortMethod=xbmcplugin.SORT_METHOD_EPISODE)
@@ -657,7 +651,7 @@ class KodiHelper:
 
         # check if we have a bookmark e.g. start offset position
         if int(start_offset) > 0:
-            play_item.setProperty('StartOffset', str(start_offset))
+            play_item.setProperty('StartOffset', str(start_offset) + '.0')
         return xbmcplugin.setResolvedUrl(self.plugin_handle, True, listitem=play_item)
 
     def _generate_art_info (self, entry, li):
@@ -832,7 +826,7 @@ class KodiHelper:
         li.addContextMenuItems(items)
         return li
 
-    def log (self, msg, level=xbmc.LOGNOTICE):
+    def log (self, msg, level=xbmc.LOGDEBUG):
         """Adds a log entry to the Kodi log
 
         Parameters
@@ -843,12 +837,9 @@ class KodiHelper:
         level : :obj:`int`
             Kodi log level
         """
-        if self.verb_log:
-            if level == xbmc.LOGDEBUG and self.verb_log:
-                level = xbmc.LOGNOTICE
-            if isinstance(msg, unicode):
-                msg = msg.encode('utf-8')
-            xbmc.log('[%s] %s' % (self.plugin, msg.__str__()), level)
+        if isinstance(msg, unicode):
+            msg = msg.encode('utf-8')
+        xbmc.log('[%s] %s' % (self.plugin, msg.__str__()), level)
 
     def get_local_string (self, string_id):
         """Returns the localized version of a string