def _cleanClassification(self, target, items): securityDetails = {} # Make the call to the DB to get all the specific security settings if target == MenuNavigator.MOVIES: pinDB = PinSentryDB() securityDetails = pinDB.getAllMovieClassificationSecurity(True) del pinDB elif target == MenuNavigator.TVSHOWS: pinDB = PinSentryDB() securityDetails = pinDB.getAllTvClassificationSecurity(True) del pinDB else: # No Classifications to deal with return items # Generate a list of certificates to check against certValues = securityDetails.keys() log("PinSentryPlugin: Allowing certificates for %s" % str(certValues)) # Check each of the items and add a flag if they are protected by a classification rule for item in items: if 'mpaa' in item: if item['mpaa'] not in [None, ""]: cert = item['mpaa'].strip().split(':')[-1] cert = cert.strip().split()[-1] try: cert = cert.encode("utf-8") except: log("PinSentryPlugin: Failed to encode certificate") # Need to decode the title as it doesn't link it for the logging that follows # if we don't title = item['title'] try: title = item['title'].decode("utf-8") except: log("PinSentryPlugin: Failed to decode title") if cert in certValues: item['mpaa'] = cert log("PinSentryPlugin: Setting mpaa for %s to %s" % (title, cert)) else: log("PinSentryPlugin: Clearing mpaa for %s (was %s)" % (title, item['mpaa'])) item['mpaa'] = "" return items
def _setClassificationList(self, type="", subtype=""): classifications = () securityDetails = {} # Make the call to the DB to get all the specific security settings pinDB = PinSentryDB() if type == MenuNavigator.CLASSIFICATIONS_MOVIES: classifications = Settings.movieCassificationsNames securityDetails = pinDB.getAllMovieClassificationSecurity() elif type == MenuNavigator.CLASSIFICATIONS_TV: classifications = Settings.tvCassificationsNames securityDetails = pinDB.getAllTvClassificationSecurity() del pinDB # Get the root location of the icons iconLocation = os_path_join(__resource__, 'media') iconLocation = os_path_join(iconLocation, 'classifications') # Check if we are showing the root classification listing if type in [None, ""]: url = self._build_url({'mode': 'folder', 'foldername': MenuNavigator.CLASSIFICATIONS, 'type': MenuNavigator.CLASSIFICATIONS_MOVIES}) li = xbmcgui.ListItem(__addon__.getLocalizedString(32207), iconImage=__icon__) li.setProperty("Fanart_Image", __fanart__) li.addContextMenuItems([], replaceItems=True) xbmcplugin.addDirectoryItem(handle=self.addon_handle, url=url, listitem=li, isFolder=True) url = self._build_url({'mode': 'folder', 'foldername': MenuNavigator.CLASSIFICATIONS, 'type': MenuNavigator.CLASSIFICATIONS_TV}) li = xbmcgui.ListItem(__addon__.getLocalizedString(32208), iconImage=__icon__) li.setProperty("Fanart_Image", __fanart__) li.addContextMenuItems([], replaceItems=True) xbmcplugin.addDirectoryItem(handle=self.addon_handle, url=url, listitem=li, isFolder=True) elif subtype in [None, ""]: # Get all the different language that are supported languages = [] for classification in classifications: if classification['lang'] not in languages: languages.append(classification['lang']) # Check to see if we can sort all the entries alphabetically for the given language try: languages = sorted(languages, key=__addon__.getLocalizedString) except: # If it fails to sort, then we just list them unsorted log("PinSentryPlugin: Failed to sort language list") # Now print out the item for each language for lang in languages: url = self._build_url({'mode': 'folder', 'foldername': MenuNavigator.CLASSIFICATIONS, 'type': type, 'subtype': str(lang)}) iconImage = __icon__ for flag in Settings.flags: if flag['lang'] == lang: iconImage = os_path_join(iconLocation, flag['icon']) li = xbmcgui.ListItem(__addon__.getLocalizedString(lang), iconImage=iconImage) li.setProperty("Fanart_Image", __fanart__) li.addContextMenuItems([], replaceItems=True) xbmcplugin.addDirectoryItem(handle=self.addon_handle, url=url, listitem=li, isFolder=True) else: for classification in classifications: # Check if we are looking for a specific country if subtype != str(classification['lang']): continue fullName = classification['name'] % __addon__.getLocalizedString(classification['lang']) idStr = str(classification['id']) securityLevel = 0 if idStr in securityDetails: securityLevel = securityDetails[idStr] log("PinSentryPlugin: Classification %s has security level %d" % (fullName, securityLevel)) # Set the icon to the certificate one if available iconImage = __icon__ if classification['icon'] not in [None, ""]: iconImage = os_path_join(iconLocation, classification['icon']) li = xbmcgui.ListItem(fullName, iconImage=iconImage) # Add a tick if security is set if securityLevel > 0: li.setInfo('video', {'PlayCount': 1}) li.setProperty("Fanart_Image", __fanart__) li.addContextMenuItems([], replaceItems=True) url = self._build_url({'mode': 'setsecurity', 'type': type, 'id': classification['id'], 'title': classification['match'], 'level': securityLevel}) xbmcplugin.addDirectoryItem(handle=self.addon_handle, url=url, listitem=li, isFolder=False) xbmcplugin.endOfDirectory(self.addon_handle)