def judgeTurtleNextAction(self, actionObj): ProgressDisplayer().displayMessage(80, line1='Preparing items for display or play', line2='Total items: ' + str(len(self.response_obj.get_item_list()))) if self.response_obj.get_redirect_action_name() is None: isAnyVideoItem = False for item in self.response_obj.get_item_list(): nextActionId = actionObj.get_next_action_map()[item.get_next_action_name()] if nextActionId == '__play__': if not isAnyVideoItem: XBMCInterfaceUtils.clearPlayList() #Clear playlist item only when at least one video item is found. XBMCInterfaceUtils.addPlayListItem(item) isAnyVideoItem = True elif nextActionId == '__service_response__': #Do Nothing , get response object from container for parameters to be returned pass else: is_Folder = self.addon_context.isNextActionFolder(actionObj.get_action_id(), item.get_next_action_name()) XBMCInterfaceUtils.addFolderItem(item, nextActionId, is_Folder) if isAnyVideoItem == True: ProgressDisplayer().end() XBMCInterfaceUtils.play() else: if self.response_obj.get_xbmc_sort_method() is not None: XBMCInterfaceUtils.sortItems(self.response_obj.get_xbmc_sort_method()) if self.response_obj.get_xbmc_content_type() is not None: XBMCInterfaceUtils.setContentType(self.response_obj.get_xbmc_content_type()) else: redirectActionId = actionObj.get_redirect_action_map()[self.response_obj.get_redirect_action_name()] self.response_obj.set_redirect_action_name(None) return redirectActionId
def performAction(self, actionId): ProgressDisplayer().start('Processing request...') while actionId is not None: Logger.logInfo('Action to be performed ::' + actionId) turtle_route = self.getTurtleRoute(actionId) for move in turtle_route.moves: self.moveTurtle(move) actionId = self.judgeTurtleNextAction(turtle_route) ProgressDisplayer().end()
def getTurtleRoute(self, actionId): actionTag = self.turtle_map.find(name='action', attrs={'id': actionId}) actionObj = Action(actionTag['id']) if actionTag.has_key('pmessage'): ProgressDisplayer().displayMessage(5, pmessage=actionTag['pmessage']) for moveTag in actionTag.findAll('move'): modulePath = moveTag['module'] functionName = moveTag['function'] pmessage = None if moveTag.has_key('pmessage'): pmessage = moveTag['pmessage'] actionObj.addMove(Move(modulePath, functionName, pmessage)) for nextActionTag in actionTag.findAll('next-action'): actionName = nextActionTag['name'] actionId = nextActionTag['id'] actionObj.addNextAction(actionName, actionId) for redirectActionTag in actionTag.findAll('redirect-action'): actionName = redirectActionTag['name'] actionId = redirectActionTag['id'] actionObj.addRedirectAction(actionName, actionId) return actionObj
def moveTurtle(self, moveObj): if moveObj.get_pmessage() is not None: ProgressDisplayer().displayMessage(50, pmessage=moveObj.get_pmessage()) components = moveObj.module_path.split('.') module = __import__(moveObj.module_path) if components is not None and isinstance(components, list): for index in range(1, len(components)): module = getattr(module, components[index]) function = getattr(module, moveObj.function_name) function(self.request_obj, self.response_obj)
def judgeTurtleNextAction(self, actionObj): ProgressDisplayer().displayMessage( 80, line1='Preparing items for display or play', line2='Total items: ' + str(len(self.response_obj.get_item_list()))) if self.response_obj.get_redirect_action_name() is None: isAnyPlayableItem = False isItemsList = False playlist_type = None for item in self.response_obj.get_item_list(): nextActionId = actionObj.get_next_action_map()[ item.get_next_action_name()] if nextActionId == '__play__': if item.get_moving_data().has_key('pluginUrl'): XBMCInterfaceUtils.executePlugin( item.get_moving_data()['pluginUrl']) else: if not isAnyPlayableItem and not XBMCInterfaceUtils.isPlaying( ): XBMCInterfaceUtils.clearPlayList( ) # Clear playlist item only when at least one video item is found. playlist_type = XBMCInterfaceUtils.addPlayListItem( item) isAnyPlayableItem = True elif nextActionId == '__service_response__': # Do Nothing , get response object from container for parameters to be returned pass elif nextActionId == '__download__': downloadPath = self.addon_context.addon.getSetting( 'downloadPath') if downloadPath is None or downloadPath == '': XBMCInterfaceUtils.displayDialogMessage( "Download path not provided", "Please provide download path in add-on settings.", "The download path should be a local directory.") self.addon_context.addon.openSettings(sys.argv[0]) downloadPath = self.addon_context.addon.getSetting( 'downloadPath') if downloadPath is not None and downloadPath != '': XBMCInterfaceUtils.downloadVideo(item, downloadPath) elif nextActionId == '__resolved__': XBMCInterfaceUtils.setResolvedMediaUrl(item) else: isItemsList = True is_Folder = self.addon_context.isNextActionFolder( actionObj.get_action_id(), item.get_next_action_name()) downloadAction = self.addon_context.getDownloadActionIfDownloadable( actionObj.get_action_id(), item.get_next_action_name()) if (downloadAction is not None): XBMCInterfaceUtils.addContextMenuItem( item, 'Download Video', downloadAction) XBMCInterfaceUtils.addFolderItem(item, nextActionId, is_Folder) del item # deletes item if isAnyPlayableItem == True: ProgressDisplayer().end() try: if playlist_type is not None: XBMCInterfaceUtils.play(list_type=playlist_type) else: XBMCInterfaceUtils.play() except Exception, e: Logger.logFatal(e) elif isItemsList: if self.response_obj.get_xbmc_sort_method() is not None: XBMCInterfaceUtils.sortMethod( self.response_obj.get_xbmc_sort_method()) if self.response_obj.get_xbmc_content_type() is not None: XBMCInterfaceUtils.setContentType( self.response_obj.get_xbmc_content_type()) XBMCInterfaceUtils.setSortMethods()