示例#1
0
    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
示例#2
0
    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()
示例#3
0
    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
示例#4
0
 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)
示例#5
0
 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()