Пример #1
0
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")
Пример #2
0
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")