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 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()
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()