Beispiel #1
0
    def onAction(self, action):
        if action.getId() in [ACTION_PARENT_DIR, ACTION_PREVIOUS_MENU, KEY_NAV_BACK, KEY_CONTEXT_MENU]:
            self.close()
            return

        if action.getId() in [ACTION_LEFT]:
            if isinstance(self.menu.parentMenu, MenuHelper):
                self.menu = self.menu.parentMenu
                self.menu.render()
            else:
                self.close()
                return

        if action.getId() in [ACTION_SELECT_ITEM, ACTION_RIGHT]:
            curItem = self.menu.getSelectedMenuItem()
            if 'Submenu' in curItem:
                self.menu = MenuHelper(self, curItem['Submenu'], self.mainMenuControls, self.mainMenuIconControls, 
                               self.C_MENU_LEFT_ARROW, self.C_MENU_RIGHT_ARROW, self.C_MENU_OK_BUTTON, self.C_MENU_SELECTED_INDEX,
                               self.submenuControls, self.menu, 0, True)
            else:
                if curItem['Type'] == 'E':
                    xbmc.executeJSONRPC('{ "jsonrpc": "2.0", "id": "1", "method": "Player.Open", "params":{"item": {"episodeid": %d}}}' % curItem['ActionId'])
                    self.close()
                elif curItem['Type'] == 'M':
                    xbmc.executeJSONRPC('{ "jsonrpc": "2.0", "id": "1", "method": "Player.Open", "params":{"item": {"movieid": %d}}}' % curItem['ActionId'])
                    self.close()

        elif action.getId() in [ACTION_UP]:
            self.menu.moveUpOne()

        elif action.getId() in [ACTION_DOWN]:
            self.menu.moveDownOne()

        self._showSubMenu()
        return
Beispiel #2
0
 def onInit(self):
     self._prepareMenuOptions()
     self.menu = MenuHelper(self, self.menuOptions, self.mainMenuControls, self.mainMenuIconControls, 
                            self.C_MENU_LEFT_ARROW, self.C_MENU_RIGHT_ARROW, self.C_MENU_OK_BUTTON, self.C_MENU_SELECTED_INDEX,
                            self.submenuControls, None, None, True)
     self._showSubMenu()
     GUIHelpers.hide(self, self.C_SUBMENU_VISIBILITY)
     GUIHelpers.hide(self, EpisodeInfo.visibility)
class ProgramOptions(xbmcgui.WindowXMLDialog):
    C_MENU_OPTION_1 = 4001
    C_MENU_OPTION_2 = 4002
    C_MENU_OPTION_3 = 4003
    C_MENU_OPTION_4 = 4004
    C_MENU_OPTION_5 = 4005
    C_MENU_OPTION_6 = 4006
    C_MENU_OPTION_7 = 4007
    C_MENU_OPTION_8 = 4008
    
    C_PROGRAM_CHANNEL = 4100
    C_PROGRAM_NAME = 4101
    C_PROGRAM_DATE = 4102
    C_PROGRAM_GENRE = 4103
    C_PROGRAM_EPISODE_MOVIE_LABEL = 4110
    C_PROGRAM_EPISODE_MOVIE_INFO = 4104
    C_PROGRAM_CAST = 4105
    C_PROGRAM_START_TIME = 4106
    C_PROGRAM_END_TIME = 4107
    C_PROGRAM_DESCRIPTION = 4108
    C_PROGRAM_PROGRESS = 4109
    
    controls = [
        C_MENU_OPTION_1,
        C_MENU_OPTION_2,
        C_MENU_OPTION_3,
        C_MENU_OPTION_4,
        C_MENU_OPTION_5,
        C_MENU_OPTION_6,
        C_MENU_OPTION_7,
        C_MENU_OPTION_8
    ]

    def __new__(cls, program):
        return super(ProgramOptions, cls).__new__(cls, 'script-tvguide-programoptions.xml', ADDON.getAddonInfo('path'))

    def __init__(self, program):
        """
        @param program:
        @type program: source.Program
        """
        super(ProgramOptions, self).__init__()
        self.program = program

        if program.category == 'Movie':
            if self.program.startDate > datetime.datetime.today():
                self.type = ProgramType.MOVIE_FUTURE
            else:
                self.type = ProgramType.MOVIE
        else:
            if self.program.startDate > datetime.datetime.today():
                self.type = ProgramType.EPISODE_FUTURE
            else:
                self.type = ProgramType.EPISODE

    @buggalo.buggalo_try_except({'method' : 'ProgramOptions.onInit'})
    def onInit(self):
        self._prepareMenuOptions()
        self.menu = MenuHelper(self, self.menuOptions, self.controls, [], 0, 0, 0, 2)
        self._renderProgramInfo()
        #if not self.program.channel.isPlayable():
        #    playControl.setEnabled(False)
        #if self.program.channel.logo is not None:
        #    channelLogoControl.setImage(self.program.channel.logo)
        #    channelTitleControl.setVisible(False)

    @buggalo.buggalo_try_except({'method' : 'ProgramOptions.onAction'})
    def onAction(self, action):
        if action.getId() in [ACTION_PARENT_DIR, ACTION_PREVIOUS_MENU, KEY_NAV_BACK, KEY_CONTEXT_MENU, ACTION_LEFT]:
            self.close()
            return

        if action.getId() in [ACTION_SELECT_ITEM]:
            self.close()

        elif action.getId() in [ACTION_UP]:
            self.menu.moveUpOne()
            return

        elif action.getId() in [ACTION_DOWN]:
            self.menu.moveDownOne()
            return

    def _renderProgramInfo(self):
        channelControl = self.getControl(self.C_PROGRAM_CHANNEL)
        if channelControl:
            channelControl.setLabel('[B]%s[/B]' % (self.program.channel.title))

        nameControl = self.getControl(self.C_PROGRAM_NAME)
        if nameControl:
            nameControl.setLabel('[B]%s[/B]' % (self.program.title))

        dateControl = self.getControl(self.C_PROGRAM_DATE)
        if dateControl:
            dateControl.setLabel('[B]%s - %s (%d min) on %s[/B]' % (self.program.startDate.strftime("%I:%M %p").lstrip('0'), self.program.endDate.strftime("%I:%M %p").lstrip('0'),(self.program.endDate - self.program.startDate).seconds / 60, self.program.startDate.strftime("%a %d/%m/%y")))

        genreControl = self.getControl(self.C_PROGRAM_GENRE)
        if genreControl:
            genreControl.setLabel('[B]%s[/B]' % (self.program.category))

        episodeMovieLabelControl = self.getControl(self.C_PROGRAM_EPISODE_MOVIE_LABEL)
        episodeMovieInfoControl = self.getControl(self.C_PROGRAM_EPISODE_MOVIE_INFO)
        if self.type == ProgramType.MOVIE:
            if episodeMovieLabelControl:
                episodeMovieLabelControl.setLabel('[B]Movie Yr:[/B]')
            if episodeMovieInfoControl:
                episodeMovieInfoControl.setLabel('[B]%s[/B]' % ('1500'))
        else:
            if episodeMovieLabelControl:
                episodeMovieLabelControl.setLabel('[B]Episode:[/B]')
            if episodeMovieInfoControl:
                episodeMovieInfoControl.setLabel('[B]"%s" (AirDate: %s)[/B]' % (self.program.title, '0/0/00'))

        castControl = self.getControl(self.C_PROGRAM_CAST)
        if castControl:
            castControl.setLabel('[B]%s[/B]' % ('cast info not available'))

        startTimeControl = self.getControl(self.C_PROGRAM_START_TIME)
        if startTimeControl:
            startTimeControl.setLabel('[B]%s[/B]' % (self.program.startDate.strftime("%I:%M %p").lstrip('0')))

        endTimeControl = self.getControl(self.C_PROGRAM_END_TIME)
        if endTimeControl:
            endTimeControl.setLabel('[B]%s[/B]' % (self.program.endDate.strftime("%I:%M %p").lstrip('0')))

        descriptionControl = self.getControl(self.C_PROGRAM_DESCRIPTION)
        if descriptionControl:
            descriptionControl.setLabel('[B]%s[/B]' % (self.program.description))

        progressControl = self.getControl(self.C_PROGRAM_PROGRESS)
        if progressControl:
            if datetime.datetime.today() > self.program.endDate:
                percent = 100
            else:
                percent = (self.program.endDate - datetime.datetime.today()).seconds / (self.program.endDate - self.program.startDate).seconds
            progressControl.setPercent(percent)

    def _prepareMenuOptions(self):
        if self.type == ProgramType.MOVIE:
            self.menuOptions = [
                {'ActionId':ProgramAction.WATCH_NOW, 'Label':'Watch Now'},
                {'ActionId':ProgramAction.RECORD, 'Label':'Record'},
                {'ActionId':ProgramAction.FULL_INFO, 'Label':'Full Info'},
                {'ActionId':ProgramAction.MORE_LIKE_THIS, 'Label':'More Like This'},
                {'ActionId':ProgramAction.UPCOMING_SHOWS, 'Label':'Upcoming Shows'},
                {'ActionId':ProgramAction.EXIT, 'Label':'Exit'}]
        elif self.type == ProgramType.MOVIE_FUTURE:
            self.menuOptions = [
                {'ActionId':ProgramAction.TUNE_TO_CHANNEL, 'Label':'Tune to Channel'},
                {'ActionId':ProgramAction.RECORD, 'Label':'Record'},
                {'ActionId':ProgramAction.SET_REMINDER, 'Label':'Set Reminder'},
                {'ActionId':ProgramAction.FULL_INFO, 'Label':'Full Info'},
                {'ActionId':ProgramAction.MORE_LIKE_THIS, 'Label':'More Like This'},
                {'ActionId':ProgramAction.UPCOMING_SHOWS, 'Label':'Upcoming Shows'},
                {'ActionId':ProgramAction.EXIT, 'Label':'Exit'}]
        elif self.type == ProgramType.EPISODE:
            if self.program.sickbeardManaged:
                self.menuOptions = [
                    {'ActionId':ProgramAction.WATCH_NOW, 'Label':'Watch Now'},
                    {'ActionId':ProgramAction.CANCEL_RECORDING, 'Label':'Cancel This Recording'},
                    {'ActionId':ProgramAction.CANCEL_SERIES, 'Label':'Cancel This Series'},
                    {'ActionId':ProgramAction.MODIFY_SERIES, 'Label':'Modify Series'},
                    {'ActionId':ProgramAction.FULL_INFO, 'Label':'Full Info'},
                    {'ActionId':ProgramAction.UPCOMING_SHOWS, 'Label':'Upcoming Shows'},
                    {'ActionId':ProgramAction.EXIT, 'Label':'Exit'}]
            else:
                self.menuOptions = [
                    {'ActionId':ProgramAction.WATCH_NOW, 'Label':'Watch Now'},
                    {'ActionId':ProgramAction.RECORD_EPISODE, 'Label':'Record Episode'},
                    {'ActionId':ProgramAction.RECORD_SERIES, 'Label':'Record Series'},
                    {'ActionId':ProgramAction.RECORD_SERIES_W_OPTIONS, 'Label':'Record Series w Options'},
                    {'ActionId':ProgramAction.FULL_INFO, 'Label':'Full Info'},
                    {'ActionId':ProgramAction.UPCOMING_SHOWS, 'Label':'Upcoming Shows'},
                    {'ActionId':ProgramAction.EXIT, 'Label':'Exit'}]
        elif self.type == ProgramType.EPISODE_FUTURE:
            if self.program.sickbeardManaged:
                self.menuOptions = [
                    {'ActionId':ProgramAction.TUNE_TO_CHANNEL, 'Label':'Tune to Channel'},
                    {'ActionId':ProgramAction.CANCEL_RECORDING, 'Label':'Cancel This Recording'},
                    {'ActionId':ProgramAction.CANCEL_SERIES, 'Label':'Cancel This Series'},
                    {'ActionId':ProgramAction.MODIFY_SERIES, 'Label':'Modify Series'},
                    {'ActionId':ProgramAction.SET_REMINDER, 'Label':'Set Reminder'},
                    {'ActionId':ProgramAction.FULL_INFO, 'Label':'Full Info'},
                    {'ActionId':ProgramAction.UPCOMING_SHOWS, 'Label':'Upcoming Shows'},
                    {'ActionId':ProgramAction.EXIT, 'Label':'Exit'}]
            else:
                self.menuOptions = [
                    {'ActionId':ProgramAction.TUNE_TO_CHANNEL, 'Label':'Tune to Channel'},
                    {'ActionId':ProgramAction.RECORD_EPISODE, 'Label':'Record Episode'},
                    {'ActionId':ProgramAction.RECORD_SERIES, 'Label':'Record Series'},
                    {'ActionId':ProgramAction.RECORD_SERIES_W_OPTIONS, 'Label':'Record Series w Options'},
                    {'ActionId':ProgramAction.SET_REMINDER, 'Label':'Set Reminder'},
                    {'ActionId':ProgramAction.FULL_INFO, 'Label':'Full Info'},
                    {'ActionId':ProgramAction.UPCOMING_SHOWS, 'Label':'Upcoming Shows'},
                    {'ActionId':ProgramAction.EXIT, 'Label':'Exit'}]

    @buggalo.buggalo_try_except({'method' : 'ProgramOptions.onClick'})
    def onClick(self, controlId):
        self.close()

    def onFocus(self, controlId):
        pass

    def getSelectedMenuOption(self):
        return self.menu.getSelectedMenuItem()
 def onInit(self):
     self._prepareMenuOptions()
     self.menu = MenuHelper(self, self.menuOptions, self.controls, [], 0, 0, 0, 2)
     self._renderProgramInfo()
Beispiel #5
0
class DVR(xbmcgui.WindowXMLDialog):
    C_MENU_SELECTED_INDEX = 6
    
    C_MENU_OPTION_1 = 4001
    C_MENU_OPTION_2 = 4002
    C_MENU_OPTION_3 = 4003
    C_MENU_OPTION_4 = 4004
    C_MENU_OPTION_5 = 4005
    C_MENU_OPTION_6 = 4006
    C_MENU_OPTION_7 = 4007
    C_MENU_OPTION_8 = 4008
    C_MENU_OPTION_9 = 4009
    C_MENU_OPTION_10 = 4010
    C_MENU_OPTION_11 = 4011
    C_MENU_OPTION_12 = 4012
    
    C_MENU_ICON_1 = 4301
    C_MENU_ICON_2 = 4302
    C_MENU_ICON_3 = 4303
    C_MENU_ICON_4 = 4304
    C_MENU_ICON_5 = 4305
    C_MENU_ICON_6 = 4306
    C_MENU_ICON_7 = 4307
    C_MENU_ICON_8 = 4308
    C_MENU_ICON_9 = 4309
    C_MENU_ICON_10 = 4310
    C_MENU_ICON_11 = 4311
    C_MENU_ICON_12 = 4312
    
    C_MENU_LEFT_ARROW = 4350
    C_MENU_RIGHT_ARROW = 4351
    C_MENU_OK_BUTTON = 4352
    
    C_SUBMENU_VISIBILITY = 4200
    C_SUBMENU_OPTION_1 = 4201
    C_SUBMENU_OPTION_2 = 4202
    C_SUBMENU_OPTION_3 = 4203
    C_SUBMENU_OPTION_4 = 4204
    C_SUBMENU_OPTION_5 = 4205
    C_SUBMENU_OPTION_6 = 4206
    C_SUBMENU_OPTION_7 = 4207
    
    mainMenuControls = [
        C_MENU_OPTION_1,
        C_MENU_OPTION_2,
        C_MENU_OPTION_3,
        C_MENU_OPTION_4,
        C_MENU_OPTION_5,
        C_MENU_OPTION_6,
        C_MENU_OPTION_7,
        C_MENU_OPTION_8,
        C_MENU_OPTION_9,
        C_MENU_OPTION_10,
        C_MENU_OPTION_11,
        C_MENU_OPTION_12
    ]
    
    mainMenuIconControls = [
        C_MENU_ICON_1,
        C_MENU_ICON_2,
        C_MENU_ICON_3,
        C_MENU_ICON_4,
        C_MENU_ICON_5,
        C_MENU_ICON_6,
        C_MENU_ICON_7,
        C_MENU_ICON_8,
        C_MENU_ICON_9,
        C_MENU_ICON_10,
        C_MENU_ICON_11,
        C_MENU_ICON_12
    ]
    
    submenuControls = [
        C_SUBMENU_OPTION_1,
        C_SUBMENU_OPTION_2,
        C_SUBMENU_OPTION_3,
        C_SUBMENU_OPTION_4,
        C_SUBMENU_OPTION_5,
        C_SUBMENU_OPTION_6,
        C_SUBMENU_OPTION_7
    ]

    def __new__(cls):
        return super(DVR, cls).__new__(cls, 'script-tvguide-dvr.xml', ADDON.getAddonInfo('path'))

    def __init__(self):
        super(DVR, self).__init__()

    @buggalo.buggalo_try_except({'method' : 'DVR.onInit'})
    def onInit(self):
        self._prepareMenuOptions()
        self.menu = MenuHelper(self, self.menuOptions, self.mainMenuControls, self.mainMenuIconControls, 
                               self.C_MENU_LEFT_ARROW, self.C_MENU_RIGHT_ARROW, self.C_MENU_OK_BUTTON, self.C_MENU_SELECTED_INDEX,
                               self.submenuControls, None, None, True)
        self._showSubMenu()
        GUIHelpers.hide(self, self.C_SUBMENU_VISIBILITY)
        GUIHelpers.hide(self, EpisodeInfo.visibility)

    @buggalo.buggalo_try_except({'method' : 'DVR.onAction'})
    def onAction(self, action):
        if action.getId() in [ACTION_PARENT_DIR, ACTION_PREVIOUS_MENU, KEY_NAV_BACK, KEY_CONTEXT_MENU]:
            self.close()
            return

        if action.getId() in [ACTION_LEFT]:
            if isinstance(self.menu.parentMenu, MenuHelper):
                self.menu = self.menu.parentMenu
                self.menu.render()
            else:
                self.close()
                return

        if action.getId() in [ACTION_SELECT_ITEM, ACTION_RIGHT]:
            curItem = self.menu.getSelectedMenuItem()
            if 'Submenu' in curItem:
                self.menu = MenuHelper(self, curItem['Submenu'], self.mainMenuControls, self.mainMenuIconControls, 
                               self.C_MENU_LEFT_ARROW, self.C_MENU_RIGHT_ARROW, self.C_MENU_OK_BUTTON, self.C_MENU_SELECTED_INDEX,
                               self.submenuControls, self.menu, 0, True)
            else:
                if curItem['Type'] == 'E':
                    xbmc.executeJSONRPC('{ "jsonrpc": "2.0", "id": "1", "method": "Player.Open", "params":{"item": {"episodeid": %d}}}' % curItem['ActionId'])
                    self.close()
                elif curItem['Type'] == 'M':
                    xbmc.executeJSONRPC('{ "jsonrpc": "2.0", "id": "1", "method": "Player.Open", "params":{"item": {"movieid": %d}}}' % curItem['ActionId'])
                    self.close()

        elif action.getId() in [ACTION_UP]:
            self.menu.moveUpOne()

        elif action.getId() in [ACTION_DOWN]:
            self.menu.moveDownOne()

        self._showSubMenu()
        return

    def _showSubMenu(self):
        if 'Submenu' in self.menu.getSelectedMenuItem():
            GUIHelpers.show(self, self.C_SUBMENU_VISIBILITY)
        else:
            GUIHelpers.hide(self, self.C_SUBMENU_VISIBILITY)

    def _prepareMenuOptions(self):
        #Sample Playback JSONRPC Payload Format
        #  { "jsonrpc": "2.0", "id": "1", "method": "Player.Open", "params":{"item": {"episodeid": 21}}}
        self.menuOptions = []
        jsonQuery = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method": "VideoLibrary.GetEpisodes", "params": {"limits": { "start" : 0, "end": 100 }, "properties": ["showtitle", "title","playcount", "firstaired"], "sort": {"method": "dateadded", "order": "descending"} }, "id": "0"}')
        jsonResponse = unicode(jsonQuery, 'utf-8', errors='ignore')
        jsonObject = simplejson.loads(jsonResponse)
        if jsonObject.has_key('result') and jsonObject['result'] != None and jsonObject['result'].has_key('episodes'):
            shows = []
            for episode in jsonObject['result']['episodes']:
                showIndex = None
                try:
                    showIndex = shows.index(episode['showtitle'])
                    debug('Found %s at index: %s' % (episode['showtitle'], showIndex))
                except ValueError:
                    shows.append(episode['showtitle'])
                    self.menuOptions.append({'ActionId':episode['episodeid'], 'Label':episode['showtitle'], 'Type':'E', 'Episode':episode})
                #Check if the show already existed in the list (then we are adding another episode)
                if showIndex != None:
                    #Create the submenu element if it doesn't already exist
                    if 'Submenu' not in self.menuOptions[showIndex]:
                        #Readd the first encountered episode
                        self.menuOptions[showIndex]['Submenu'] = [{'ActionId':self.menuOptions[showIndex]['ActionId'], 'Label':self.menuOptions[showIndex]['Episode']['title'], 'Type':'E'}]
                    #Add the current episode to the list
                    self.menuOptions[showIndex]['Submenu'].append({'ActionId':episode['episodeid'], 'Label':episode['title'], 'Type':'E'})
                else:
                    showIndex = len(self.menuOptions) - 1
        #Add 10 recent movies
        jsonQuery = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method": "VideoLibrary.GetMovies", "params": {"limits": { "start" : 0, "end": 10 }, "properties": ["title","playcount"], "sort": {"method": "dateadded", "order": "descending"} }, "id": "0"}')
        jsonResponse = unicode(jsonQuery, 'utf-8', errors='ignore')
        jsonObject = simplejson.loads(jsonResponse)
        if jsonObject.has_key('result') and jsonObject['result'] != None and jsonObject['result'].has_key('movies'):
            for movie in jsonObject['result']['movies']:
                self.menuOptions.append({'ActionId':movie['movieid'], 'Label':movie['title'], 'Type':'M', 'Movie':movie})

#        self.menuOptions = [
#            {'ActionId':0, 'Label':'Mission Impossible III'},
#            {'ActionId':0, 'Label':'How I Made My Millions'},
#            {'ActionId':0, 'Label':'Bering Sea Gold'},
#            {'ActionId':0, 'Label':'Gold Rush'},
#            {'ActionId':0, 'Label':'Attack of the Show'},
#            {'ActionId':0, 'Label':'Jungle Gold'},
#            {'ActionId':0, 'Label':'Panic 9-1-1', 'Submenu':[
#                {'ActionId':0, 'Label':'Sub item 1'},
#                {'ActionId':0, 'Label':'Sub item 2'},
#                {'ActionId':0, 'Label':'Sub item 3'},
#                {'ActionId':0, 'Label':'Sub item 4', 'Submenu':[
#                    {'ActionId':0, 'Label':'Super Sub item 1'},
#                    {'ActionId':0, 'Label':'Super Sub item 2'},
#                    {'ActionId':0, 'Label':'Super Sub item 3'},
#                    {'ActionId':0, 'Label':'Super Sub item 4'},
#                    {'ActionId':0, 'Label':'Super Sub item 5'},
#                    {'ActionId':0, 'Label':'Super Sub item 6'},
#                    {'ActionId':0, 'Label':'Super Sub item 7'},
#                    {'ActionId':0, 'Label':'Super Sub item 8'}]
#                },
#                {'ActionId':0, 'Label':'Sub item 5'},
#                {'ActionId':0, 'Label':'Sub item 6'},
#                {'ActionId':0, 'Label':'Sub item 7'},
#                {'ActionId':0, 'Label':'Sub item 8'}]
#            },
#            {'ActionId':0, 'Label':'Toy Story'},
#            {'ActionId':0, 'Label':'The Code'},
#            {'ActionId':0, 'Label':'Breaking Code, Broken Something'},
#            {'ActionId':0, 'Label':'Clash of the Titans'},
#            {'ActionId':0, 'Label':'The League'},
#            {'ActionId':0, 'Label':'Another Item'},
#            {'ActionId':0, 'Label':'Southpark'},
#            {'ActionId':0, 'Label':'Family Guy'},
#            {'ActionId':0, 'Label':'Something About Mary'}]

    @buggalo.buggalo_try_except({'method' : 'DVR.onClick'})
    def onClick(self, controlId):
        self.close()

    def onFocus(self, controlId):
        pass

    def getSelectedMenuOption(self):
        return self.menu.getSelectedMenuItem()