class DPS_MainMenu(Screen): g_wolon = False g_wakeserver = "00-11-32-12-C5-F9" g_woldelay = 10 selectedEntry = None s_url = None s_mode = None s_final = False g_serverDataMenu = None g_filterDataMenu = None nextExitIsQuit = True currentService = None plexInstance = None selectionOverride = None secondRun = False #=========================================================================== # #=========================================================================== def __init__(self, session, allowOverride=True): printl("", self, "S") Screen.__init__(self, session) self.selectionOverride = None printl("selectionOverride:" +str(self.selectionOverride), self, "D") self.session = session self["title"] = StaticText() self["welcomemessage"] = StaticText() # get all our servers as list self.getServerList(allowOverride) self["menu"]= List(self.mainMenuList, True) self.menu_main_list = self["menu"].list self["actions"] = HelpableActionMap(self, "DP_MainMenuActions", { "ok": (self.okbuttonClick, ""), "left": (self.left, ""), "right": (self.right, ""), "up": (self.up, ""), "down": (self.down, ""), "cancel": (self.cancel, ""), }, -2) self.onFirstExecBegin.append(self.onExec) self.onFirstExecBegin.append(self.onExecRunDev) if config.plugins.dreamplex.stopLiveTvOnStartup.value: self.currentService = self.session.nav.getCurrentlyPlayingServiceReference() self.session.nav.stopService() self.onLayoutFinish.append(self.setCustomTitle) self.onShown.append(self.checkSelectionOverride) printl("", self, "C") #=============================================================================== # SCREEN FUNCTIONS #=============================================================================== #=============================================================================== # #=============================================================================== def setCustomTitle(self): printl("", self, "S") self.setTitle(_("DreamPlex")) printl("", self, "C") #=============================================================================== # #=============================================================================== def checkSelectionOverride(self): printl("", self, "S") printl("self.selectionOverride: " + str(self.selectionOverride), self, "D") if self.selectionOverride is not None: self.okbuttonClick(self.selectionOverride) printl("", self, "C") #=========================================================================== # #=========================================================================== def showWakeMessage(self): printl("", self, "S") self.session.openWithCallback(self.executeWakeOnLan, MessageBox, _("Plexserver seems to be offline. Start with Wake on Lan settings? \n\nPlease note: \nIf you press yes the spinner will run for " + str(self.g_woldelay) + " seconds. \nAccording to your settings."), MessageBox.TYPE_YESNO) printl("", self, "C") #=========================================================================== # #=========================================================================== def showOfflineMessage(self): printl("", self, "S") self.session.openWithCallback(self.setMainMenu,MessageBox,_("Plexserver seems to be offline. Please check your your settings or connection!\n Retry?"), MessageBox.TYPE_YESNO) printl("", self, "C") #=========================================================================== # #=========================================================================== def setMainMenu(self, answer): printl("", self, "S") printl("answer: " + str(answer), self, "D") if answer: self.checkServerState() else: self.session.open(DPS_MainMenu,allowOverride=False) printl("", self, "C") #=============================================================================== # KEYSTROKES #=============================================================================== #=============================================================== # #=============================================================== def okbuttonClick(self, selectionOverride = None): printl("", self, "S") # this is used to step in directly into a server when there is only one entry in the serverlist if selectionOverride is not None: selection = selectionOverride else: selection = self["menu"].getCurrent() printl("selection = " + str(selection), self, "D") self.nextExitIsQuit = False if selection is not None: self.selectedEntry = selection[1] printl("selected entry " + str(self.selectedEntry), self, "D") if type(self.selectedEntry) is int: printl("selected entry is int", self, "D") if self.selectedEntry == Plugin.MENU_MAIN: printl("found Plugin.MENU_MAIN", self, "D") self["menu"].setList(self.menu_main_list) elif self.selectedEntry == Plugin.MENU_SERVER: printl("found Plugin.MENU_SERVER", self, "D") self.g_serverConfig = selection[3] # now that we know the server we establish global plexInstance self.plexInstance = Singleton().getPlexInstance(PlexLibrary(self.session, self.g_serverConfig)) self.checkServerState() elif self.selectedEntry == Plugin.MENU_MOVIES: printl("found Plugin.MENU_MOVIES", self, "D") self.getServerData("movies") elif self.selectedEntry == Plugin.MENU_TVSHOWS: printl("found Plugin.MENU_TVSHOWS", self, "D") self.getServerData("tvshow") elif self.selectedEntry == Plugin.MENU_MUSIC: printl("found Plugin.MENU_MUSIC", self, "D") self.getServerData("music") elif self.selectedEntry == Plugin.MENU_FILTER: printl("found Plugin.MENU_FILTER", self, "D") params = selection[3] printl("params: " + str(params), self, "D") self.s_url = params.get('t_url', "notSet") self.s_mode = params.get('t_mode', "notSet") self.s_final = params.get('t_final', "notSet") self.s_source = params.get('t_source', "notSet") self.s_uuid = params.get('t_uuid', "notSet") self.getFilterData() elif self.selectedEntry == Plugin.MENU_SYSTEM: printl("found Plugin.MENU_SYSTEM", self, "D") self["menu"].setList(self.getSettingsMenu()) self.refreshMenu(0) elif type(self.selectedEntry) is str: printl("selected entry is string", self, "D") if selection[1] == "DPS_Settings": self.session.open(DPS_Settings) elif selection[1] == "DPS_ServerEntriesListConfigScreen": self.session.open(DPS_ServerEntriesListConfigScreen) elif selection[1] == "DPS_SystemCheck": self.session.open(DPS_SystemCheck) elif selection[1] == "DPS_About": self.session.open(DPS_About) elif selection[1] == "DPS_Help": self.session.open(DPS_Help) elif selection[1] == "DPS_Exit": self.exit() elif selection[1] == "getMusicSections": self.getMusicSections(selection) else: printl("selected entry is executable", self, "D") params = selection[3] printl("params: " + str(params), self, "D") self.s_url = params.get('t_url', "notSet") self.showEpisodesDirectly = params.get('t_showEpisodesDirectly', "notSet") self.uuid = params.get('t_uuid', "notSet") self.source = params.get('t_source', "notSet") self.viewGroup = params.get('t_viewGroup', "notSet") isSearchFilter = params.get('isSearchFilter', "notSet") printl("isSearchFilter: " + str(isSearchFilter), self, "D") if isSearchFilter == "True" or isSearchFilter and isSearchFilter != "notSet": printl("i am here: " + str(isSearchFilter), self, "D") self.session.openWithCallback(self.addSearchString, InputBox, title=_("Please enter your search string!"), text="", maxSize=55, type=Input.TEXT) else: self.executeSelectedEntry() printl("", self, "C") #=========================================================================== # #=========================================================================== def getMusicSections(self, selection): printl("", self, "S") mainMenuList = [] plugin = selection[2] #e.g. Plugin.MENU_MOVIES # ARTISTS params = copy.deepcopy(selection[3]) url = params['t_url'] params['t_url'] = url + "?type=8" mainMenuList.append((_("by Artists"), plugin, "artistsEntry", params)) printl("mainMenuList 1: " + str(mainMenuList), self, "D") #ALBUMS params = copy.deepcopy(selection[3]) params['t_url'] = url + "?type=9" mainMenuList.append((_("by Albums"), plugin, "albumsEntry", params)) printl("mainMenuList 2: " + str(mainMenuList), self, "D") self["menu"].setList(mainMenuList) self.refreshMenu(0) printl("mainMenuList: " + str(mainMenuList), self, "D") printl("", self, "C") #=========================================================================== # #=========================================================================== def getSettingsMenuList(self): printl("", self, "S") self.nextExitIsQuit = False self["menu"].setList(self.getSettingsMenu()) self.refreshMenu(0) printl("", self, "C") #=========================================================================== # #=========================================================================== def addSearchString(self, searchString): printl("", self, "S") # sample: http://192.168.45.190:32400/search?type=1&query=fringe serverUrl = self.plexInstance.getServerFromURL(self.s_url) if searchString is not "" and searchString is not None: self.s_url = serverUrl + "/search?type=1&query=" + searchString self.executeSelectedEntry() printl("", self, "C") #=========================================================================== # this function starts DP_Lib... #=========================================================================== def executeSelectedEntry(self): printl("", self, "S") printl("self.s_url: " + str(self.s_url), self, "D") if self.selectedEntry.start is not None: kwargs = {"url": self.s_url, "uuid": self.uuid, "source": self.source , "viewGroup": self.viewGroup} if self.showEpisodesDirectly != "notSet": kwargs["showEpisodesDirectly"] = self.showEpisodesDirectly self.session.open(self.selectedEntry.start, **kwargs) elif self.selectedEntry.fnc is not None: self.selectedEntry.fnc(self.session) if config.plugins.dreamplex.showFilter.value: self.selectedEntry = Plugin.MENU_FILTER # we overwrite this now to handle correct menu jumps with exit/cancel button printl("", self, "C") #========================================================================== # #========================================================================== def up(self): printl("", self, "S") self["menu"].selectPrevious() printl("", self, "C") #=========================================================================== # #=========================================================================== def down(self): printl("", self, "S") self["menu"].selectNext() printl("", self, "C") #=============================================================================== # #=============================================================================== def right(self): printl("", self, "S") try: self["menu"].pageDown() except Exception, ex: printl("Exception(" + str(type(ex)) + "): " + str(ex), self, "W") self["menu"].selectNext() printl("", self, "C")
class DPS_MainMenu(Screen): g_wolon = False g_wakeserver = "00-11-32-12-C5-F9" g_woldelay = 10 selectedEntry = None s_url = None s_mode = None s_final = False g_serverDataMenu = None g_filterDataMenu = None nextExitIsQuit = True currentService = None plexInstance = None selectionOverride = None secondRun = False #=========================================================================== # #=========================================================================== def __init__(self, session, allowOverride=True): printl("", self, "S") Screen.__init__(self, session) self.selectionOverride = None printl("selectionOverride:" + str(self.selectionOverride), self, "D") self.session = session self["title"] = StaticText() self["welcomemessage"] = StaticText() # get all our servers as list self.getServerList(allowOverride) self["menu"] = List(self.mainMenuList, True) self.menu_main_list = self["menu"].list self["actions"] = HelpableActionMap( self, "DP_MainMenuActions", { "ok": (self.okbuttonClick, ""), "left": (self.left, ""), "right": (self.right, ""), "up": (self.up, ""), "down": (self.down, ""), "cancel": (self.cancel, ""), }, -2) self.onFirstExecBegin.append(self.onExec) self.onFirstExecBegin.append(self.onExecRunDev) if config.plugins.dreamplex.stopLiveTvOnStartup.value: self.currentService = self.session.nav.getCurrentlyPlayingServiceReference( ) self.session.nav.stopService() self.onLayoutFinish.append(self.setCustomTitle) self.onShown.append(self.checkSelectionOverride) printl("", self, "C") #=============================================================================== # SCREEN FUNCTIONS #=============================================================================== #=============================================================================== # #=============================================================================== def setCustomTitle(self): printl("", self, "S") self.setTitle(_("DreamPlex")) printl("", self, "C") #=============================================================================== # #=============================================================================== def checkSelectionOverride(self): printl("", self, "S") printl("self.selectionOverride: " + str(self.selectionOverride), self, "D") if self.selectionOverride is not None: self.okbuttonClick(self.selectionOverride) printl("", self, "C") #=========================================================================== # #=========================================================================== def showWakeMessage(self): printl("", self, "S") self.session.openWithCallback( self.executeWakeOnLan, MessageBox, _("Plexserver seems to be offline. Start with Wake on Lan settings? \n\nPlease note: \nIf you press yes the spinner will run for " + str(self.g_woldelay) + " seconds. \nAccording to your settings."), MessageBox.TYPE_YESNO) printl("", self, "C") #=========================================================================== # #=========================================================================== def showOfflineMessage(self): printl("", self, "S") self.session.openWithCallback( self.setMainMenu, MessageBox, _("Plexserver seems to be offline. Please check your your settings or connection!\n Retry?" ), MessageBox.TYPE_YESNO) printl("", self, "C") #=========================================================================== # #=========================================================================== def setMainMenu(self, answer): printl("", self, "S") printl("answer: " + str(answer), self, "D") if answer: self.checkServerState() else: self.session.open(DPS_MainMenu, allowOverride=False) printl("", self, "C") #=============================================================================== # KEYSTROKES #=============================================================================== #=============================================================== # #=============================================================== def okbuttonClick(self, selectionOverride=None): printl("", self, "S") # this is used to step in directly into a server when there is only one entry in the serverlist if selectionOverride is not None: selection = selectionOverride else: selection = self["menu"].getCurrent() printl("selection = " + str(selection), self, "D") self.nextExitIsQuit = False if selection is not None: self.selectedEntry = selection[1] printl("selected entry " + str(self.selectedEntry), self, "D") if type(self.selectedEntry) is int: printl("selected entry is int", self, "D") if self.selectedEntry == Plugin.MENU_MAIN: printl("found Plugin.MENU_MAIN", self, "D") self["menu"].setList(self.menu_main_list) elif self.selectedEntry == Plugin.MENU_SERVER: printl("found Plugin.MENU_SERVER", self, "D") self.g_serverConfig = selection[3] # now that we know the server we establish global plexInstance self.plexInstance = Singleton().getPlexInstance( PlexLibrary(self.session, self.g_serverConfig)) self.checkServerState() elif self.selectedEntry == Plugin.MENU_MOVIES: printl("found Plugin.MENU_MOVIES", self, "D") self.getServerData("movies") elif self.selectedEntry == Plugin.MENU_TVSHOWS: printl("found Plugin.MENU_TVSHOWS", self, "D") self.getServerData("tvshow") elif self.selectedEntry == Plugin.MENU_MUSIC: printl("found Plugin.MENU_MUSIC", self, "D") self.getServerData("music") elif self.selectedEntry == Plugin.MENU_FILTER: printl("found Plugin.MENU_FILTER", self, "D") params = selection[3] printl("params: " + str(params), self, "D") self.s_url = params.get('t_url', "notSet") self.s_mode = params.get('t_mode', "notSet") self.s_final = params.get('t_final', "notSet") self.s_source = params.get('t_source', "notSet") self.s_uuid = params.get('t_uuid', "notSet") self.getFilterData() elif self.selectedEntry == Plugin.MENU_SYSTEM: printl("found Plugin.MENU_SYSTEM", self, "D") self["menu"].setList(self.getSettingsMenu()) self.refreshMenu(0) elif type(self.selectedEntry) is str: printl("selected entry is string", self, "D") if selection[1] == "DPS_Settings": self.session.open(DPS_Settings) elif selection[1] == "DPS_ServerEntriesListConfigScreen": self.session.open(DPS_ServerEntriesListConfigScreen) elif selection[1] == "DPS_SystemCheck": self.session.open(DPS_SystemCheck) elif selection[1] == "DPS_About": self.session.open(DPS_About) elif selection[1] == "DPS_Help": self.session.open(DPS_Help) elif selection[1] == "DPS_Exit": self.exit() elif selection[1] == "getMusicSections": self.getMusicSections(selection) else: printl("selected entry is executable", self, "D") params = selection[3] printl("params: " + str(params), self, "D") self.s_url = params.get('t_url', "notSet") self.showEpisodesDirectly = params.get( 't_showEpisodesDirectly', "notSet") self.uuid = params.get('t_uuid', "notSet") self.source = params.get('t_source', "notSet") self.viewGroup = params.get('t_viewGroup', "notSet") isSearchFilter = params.get('isSearchFilter', "notSet") printl("isSearchFilter: " + str(isSearchFilter), self, "D") if isSearchFilter == "True" or isSearchFilter and isSearchFilter != "notSet": printl("i am here: " + str(isSearchFilter), self, "D") self.session.openWithCallback( self.addSearchString, InputBox, title=_("Please enter your search string!"), text="", maxSize=55, type=Input.TEXT) else: self.executeSelectedEntry() printl("", self, "C") #=========================================================================== # #=========================================================================== def getMusicSections(self, selection): printl("", self, "S") mainMenuList = [] plugin = selection[2] #e.g. Plugin.MENU_MOVIES # ARTISTS params = copy.deepcopy(selection[3]) url = params['t_url'] params['t_url'] = url + "?type=8" mainMenuList.append((_("by Artists"), plugin, "artistsEntry", params)) printl("mainMenuList 1: " + str(mainMenuList), self, "D") #ALBUMS params = copy.deepcopy(selection[3]) params['t_url'] = url + "?type=9" mainMenuList.append((_("by Albums"), plugin, "albumsEntry", params)) printl("mainMenuList 2: " + str(mainMenuList), self, "D") self["menu"].setList(mainMenuList) self.refreshMenu(0) printl("mainMenuList: " + str(mainMenuList), self, "D") printl("", self, "C") #=========================================================================== # #=========================================================================== def getSettingsMenuList(self): printl("", self, "S") self.nextExitIsQuit = False self["menu"].setList(self.getSettingsMenu()) self.refreshMenu(0) printl("", self, "C") #=========================================================================== # #=========================================================================== def addSearchString(self, searchString): printl("", self, "S") # sample: http://192.168.45.190:32400/search?type=1&query=fringe serverUrl = self.plexInstance.getServerFromURL(self.s_url) if searchString is not "" and searchString is not None: self.s_url = serverUrl + "/search?type=1&query=" + searchString self.executeSelectedEntry() printl("", self, "C") #=========================================================================== # this function starts DP_Lib... #=========================================================================== def executeSelectedEntry(self): printl("", self, "S") printl("self.s_url: " + str(self.s_url), self, "D") if self.selectedEntry.start is not None: kwargs = { "url": self.s_url, "uuid": self.uuid, "source": self.source, "viewGroup": self.viewGroup } if self.showEpisodesDirectly != "notSet": kwargs["showEpisodesDirectly"] = self.showEpisodesDirectly self.session.open(self.selectedEntry.start, **kwargs) elif self.selectedEntry.fnc is not None: self.selectedEntry.fnc(self.session) if config.plugins.dreamplex.showFilter.value: self.selectedEntry = Plugin.MENU_FILTER # we overwrite this now to handle correct menu jumps with exit/cancel button printl("", self, "C") #========================================================================== # #========================================================================== def up(self): printl("", self, "S") self["menu"].selectPrevious() printl("", self, "C") #=========================================================================== # #=========================================================================== def down(self): printl("", self, "S") self["menu"].selectNext() printl("", self, "C") #=============================================================================== # #=============================================================================== def right(self): printl("", self, "S") try: self["menu"].pageDown() except Exception, ex: printl("Exception(" + str(type(ex)) + "): " + str(ex), self, "W") self["menu"].selectNext() printl("", self, "C")