class MovieRetitle(Screen, ConfigListScreen):
	def __init__(self, session, services):
		Screen.__init__(self, session)

		self.skinName = ["MovieRetitle", "Setup"]
		self.list = [ ]
		ConfigListScreen.__init__(self, self.list, session)

		self["Path"] = Label(_("Location:"))# + ' ' + os.path.dirname(os.path.splitext(path)[0]))
		self["HelpWindow"] = Pixmap()
		self.onLayoutFinish.append(self.setCustomTitle)

		self["key_green"] = StaticText(_("Save"))
		self["key_red"] = StaticText(_("Cancel"))
		self["actions"] = ActionMap(["SetupActions"],
		{
			"ok": self.keyGo,
			"save": self.keyGo,
			"cancel": self.keyCancel,
		}, -2)

		self["VirtualKB"] = ActionMap(["VirtualKeyboardActions"],
		{
			"showVirtualKeyboard": self.KeyText,
		}, -2)
		self["VirtualKB"].setEnabled(False)
		self["HelpWindow"] = Pixmap()
		self["VKeyIcon"] = Pixmap()
		self["VKeyIcon"].hide()

		self.serviceHandler = ServiceCenter.getInstance()

		if isinstance(services, list):
			self.services = services
		else:
			self.services = [services]

		self.buildSetup(self.services.pop())

	def buildSetup(self, service):
		self.service = service
		self.is_dir = service.flags & eServiceReference.mustDescent
		info = self.serviceHandler.info(service)
		path = service.getPath()
		self["Path"] = Label(_("Location:") + ' ' + os.path.dirname(os.path.splitext(path)[0]))
		if self.is_dir:
			self.original_file = service.getName()
		else:
			self.original_file = os.path.basename(os.path.splitext(path)[0])
		self.original_name = info.getName(service)
		self.original_desc = info.getInfoString(service, iServiceInformation.sDescription)
		self.input_file = ConfigText(default=self.original_file, fixed_size=False, visible_width=82)
		self.input_title = ConfigText(default=self.original_name, fixed_size=False, visible_width=82)
		self.input_descr = ConfigText(default=self.original_desc, fixed_size=False, visible_width=82)
		self.createSetup()

	def createSetup(self):
		self.list = []
		if self.is_dir:
			self.list.append(getConfigListEntry(_("Foldername:"), self.input_file))
		else:
			self.list.append(getConfigListEntry(_("Filename:"), self.input_file))
			self.list.append(getConfigListEntry(_("Movietitle:"), self.input_title))
			self.list.append(getConfigListEntry(_("Description:"), self.input_descr))
		self["config"].setList(self.list)

	def handleInputHelpers(self):
		return
		if self["config"].getCurrent() is not None:
			if isinstance(self["config"].getCurrent()[1], ConfigText) or isinstance(self["config"].getCurrent()[1], ConfigPassword):
				if self.has_key("VKeyIcon"):
					self["VirtualKB"].setEnabled(True)
					self["VKeyIcon"].boolean = True
				if self.has_key("HelpWindow"):
					if self["config"].getCurrent()[1].help_window.instance is not None:
						helpwindowpos = self["HelpWindow"].getPosition()

						if helpwindowpos:
							helpwindowposx, helpwindowposy = helpwindowpos
							if helpwindowposx and helpwindowposy:
								from enigma import ePoint
								self["config"].getCurrent()[1].help_window.instance.move(ePoint(helpwindowposx,helpwindowposy))
			else:
				if self.has_key("VKeyIcon"):
					self["VirtualKB"].setEnabled(False)
					self["VKeyIcon"].boolean = False
		else:
			if self.has_key("VKeyIcon"):
				self["VirtualKB"].setEnabled(False)
				self["VKeyIcon"].boolean = False

	def setCustomTitle(self):
		if self.is_dir:
			self.setTitle(_("Change Foldername"))
		else:
			self.setTitle(_("Change File/Moviename and/or Description"))

	def keyGo(self):
		if self.is_dir:
			if self.input_file.getText() != self.original_file:
				self.renameDirectory(self.service, self.input_file.getText())
				self.original_file = self.input_file.getText()
		else:
			if self.input_title.getText() != self.original_name or self.input_descr.getText() != self.original_desc:
				self.setTitleDescr(self.service, self.input_title.getText(), self.input_descr.getText())
				self.original_name = self.input_title.getText()
				self.original_desc = self.input_descr.getText()
			if self.input_file.getText() != self.original_file:
				self.renameFile(self.service, self.input_file.getText())
				self.original_file = self.input_file.getText()
		if self.services:
			service = self.services.pop()
			self.buildSetup(service)
		else:
			self.close()

	def keyCancel(self):
		self.close()

	def setTitleDescr(self, service, title, descr):
		#TODO Use MetaSupport class
		if service.getPath().endswith(".ts"):
			meta_file = service.getPath() + ".meta"
		else:
			meta_file = service.getPath() + ".ts.meta"

		# Create new meta for ts files
		if not os.path.exists(meta_file):
			if os.path.isfile(service.getPath()):
				_title = os.path.basename(os.path.splitext(service.getPath())[0])
			else:
				_title = service.getName()
			_sid = ""
			_descr = ""
			_time = ""
			_tags = ""
			metafile = open(meta_file, "w")
			metafile.write("%s\n%s\n%s\n%s\n%s" % (_sid, _title, _descr, _time, _tags))
			metafile.close()

		if os.path.exists(meta_file):
			metafile = open(meta_file, "r")
			sid = metafile.readline()
			oldtitle = metafile.readline().rstrip()
			olddescr = metafile.readline().rstrip()
			rest = metafile.read()
			metafile.close()
			if not title and title != "":
				title = oldtitle
			if not descr and descr != "":
				descr = olddescr
			metafile = open(meta_file, "w")
			metafile.write("%s%s\n%s\n%s" % (sid, title, descr, rest))
			metafile.close()

	def renameDirectory(self, service, new_name):
		try:
			dir = os.path.dirname(self.service.getPath()[0:-1])
			os.rename(self.service.getPath(), os.path.join(dir, self.input_file.getText() + "/"))
			self.original_file = self.input_file.getText()
		except Exception, e:
			print e
class AdvancedKeyBoard(VirtualKeyBoard, NumericalTextInput, SkinResolutionHelper):
    KEYBOARD = 0x01
    NUM_KEYB = 0x02
    BOTH = KEYBOARD | NUM_KEYB

    def __init__(self, session, title="", text=""):
        VirtualKeyBoard.__init__(self, session, title, text)
        NumericalTextInput.__init__(self, nextFunc=self.nextFunc)
        SkinResolutionHelper.__init__(self)
        self.configText = None
        if config.AdvancedMovieSelection.keyboard.value == "virtual":
            use = self.KEYBOARD
        elif config.AdvancedMovieSelection.keyboard.value == "numerical":
            use = self.NUM_KEYB
        else:
            use = self.BOTH
        if not use & self.KEYBOARD:
            # hide the keyboard
            self["list"].hide()
            # overwrite VirtualKeyBoard actions
            # make sure not overwrite any action of base class
            self["actions"] = ActionMap(
                [
                    "OkCancelActions",
                    "WizardActions",
                    "ColorActions",
                    "KeyboardInputActions",
                    "InputBoxActions",
                    "InputAsciiActions",
                ],
                {
                    "ok": self.__ok,
                    "cancel": self.__cancel,
                    "left": self.dummy,
                    "right": self.dummy,
                    "up": self.dummy,
                    "down": self.dummy,
                    "red": self.__cancel,
                    "green": self.__ok,
                    "yellow": self.dummy,
                    "deleteBackward": self.dummy,
                    "back": self.dummy,
                },
                -2,
            )

        if use & self.NUM_KEYB:
            self.timer = eTimer()
            self.timer.callback.append(self.timeout)
            self.configText = ConfigText("", False)
            if text:
                self.configText.text = text
                self.configText.marked_pos = len(text)
            self["config_actions"] = NumberActionMap(
                ["SetupActions", "InputAsciiActions", "KeyboardInputActions"],
                {
                    "1": self.keyNumberGlobal,
                    "2": self.keyNumberGlobal,
                    "3": self.keyNumberGlobal,
                    "4": self.keyNumberGlobal,
                    "5": self.keyNumberGlobal,
                    "6": self.keyNumberGlobal,
                    "7": self.keyNumberGlobal,
                    "8": self.keyNumberGlobal,
                    "9": self.keyNumberGlobal,
                    "0": self.keyNumberGlobal,
                },
                -1,
            )  # to prevent left/right overriding the listbox
            if use & self.KEYBOARD:
                self.selectedKey = self.getKeyIndex(u"OK")

        self.onLayoutFinish.append(self.__onLayoutFinish)
        self.onClose.append(self.__onClose)

    def __onLayoutFinish(self):
        self.setTitle(_("Advanced Movie Selection - Input help"))
        if self.configText:
            self.configText.help_window = self.session.instantiateDialog(AdvancedTextInputHelpDialog, self)
            self.configText.help_window.show()

    def __onClose(self):
        if self.configText and self.configText.help_window:
            self.session.deleteDialog(self.configText.help_window)
            self.configText.help_window = None

    def getKeyIndex(self, key):
        index = 0
        for x in self.keys_list:
            for k in x:
                if k == key:
                    return index
                index += 1
        return index

    def buildVirtualKeyBoard(self, selectedKey=0):
        VirtualKeyBoard.buildVirtualKeyBoard(self, selectedKey=self.selectedKey)

    def dummy(self):
        pass

    def __ok(self):
        self.close(self["text"].getText())

    def __cancel(self):
        self.close(None)

    def timeout(self):
        self.handleKey(KEY_TIMEOUT)
        self["text"].setMarkedPos(-1)

    def handleKey(self, key):
        if self.configText:
            self.configText.handleKey(key)
            if key in KEY_NUMBERS:
                self.timer.start(1000, 1)

    def keyNumberGlobal(self, number):
        self.handleKey(KEY_0 + number)
        self.getKey(number)
        self.text = self.configText.getText()
        self["text"].setText(self.configText.getText())
        self["text"].setMarkedPos(self.configText.marked_pos)

    def okClicked(self):
        VirtualKeyBoard.okClicked(self)
        self["text"].setMarkedPos(-1)
        if self.configText:
            self.configText.text = self.text
            self.configText.marked_pos = len(self.text)

    def nextFunc(self):
        self["text"].setMarkedPos(-1)
示例#3
0
文件: plugin.py 项目: 1198s/enigma2
class ModemSetup(Screen):
	skin = """
		<screen position="180,100" size="320,300" title="Modem" >
		<ePixmap pixmap="buttons/green.png" position="10,10" size="140,40" alphatest="on" />
		<ePixmap pixmap="buttons/red.png" position="160,10" size="140,40" alphatest="on" />
		<widget name="key_green" position="10,10" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
		<widget name="key_red" position="160,10" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
		<widget name="list" position="10,60" size="300,120" />
		<widget name="state" position="10,210" size="300,80" font="Regular;20" />
		</screen>"""

	def nothing(self):
		print "nothing!"

	def __init__(self, session, args = None):
		global connected
		global conn
		self.skin = ModemSetup.skin
		secret = getSecretString()
		user = secret[:secret.find('*')]
		password = secret[secret.find('*')+1:]
		self.username = ConfigText(user, fixed_size=False)
		self.password = ConfigPassword(password, fixed_size=False)
		self.phone = ConfigText(getTelephone(), fixed_size=False)
		self.phone.setUseableChars(u"0123456789")
		lst = [ (_("Username"), self.username),
			(_("Password"), self.password),
			(_("Phone number"), self.phone) ]
		self["list"] = ConfigList(lst)
		self["key_green"] = Button("")
		self["key_red"] = Button("")
		self["state"] = Label("")
		self["actions"] = NumberActionMap(["ModemActions"],
		{
			"cancel": self.close,
			"left": self.keyLeft,
			"right": self.keyRight,
			"connect": self.connect,
			"disconnect": self.disconnect,
			"deleteForward": self.deleteForward,
			"deleteBackward": self.deleteBackward,
			"0": self.keyNumber,
			"1": self.keyNumber,
			"2": self.keyNumber,
			"3": self.keyNumber,
			"4": self.keyNumber,
			"5": self.keyNumber,
			"6": self.keyNumber,
			"7": self.keyNumber,
			"8": self.keyNumber,
			"9": self.keyNumber
		}, -1)

		self["ListActions"] = ActionMap(["ListboxDisableActions"],
		{
			"moveUp": self.nothing,
			"moveDown": self.nothing,
			"moveTop": self.nothing,
			"moveEnd": self.nothing,
			"pageUp": self.nothing,
			"pageDown": self.nothing
		}, -1)

		self.stateTimer = eTimer()
		self.stateTimer.callback.append(self.stateLoop)

		conn.appClosed.append(self.pppdClosed)
		conn.dataAvail.append(self.dataAvail)

		Screen.__init__(self, session)
		self.onClose.append(self.__closed)
		self.onLayoutFinish.append(self.__layoutFinished)

	def __layoutFinished(self):
		global conn
		if conn.running():
			self["state"].setText(_("Connected!"))
			self.green_function = NONE
			self.red_function = DISCONNECT
		else:
			self.green_function = CONNECT
			self.red_function = NONE
		self.updateGui()

	def __closed(self):
		global connected
		conn.appClosed.remove(self.pppdClosed)
		conn.dataAvail.remove(self.dataAvail)
		if not connected:
			conn.sendCtrlC()
		setOptions(self.phone.getText(), self.username.getText())
		setSecretString(self.username.getText() + ' * ' + self.password.getText())

	def stateLoop(self):
		txt = self["state"].getText()
		txt += '.'
		self["state"].setText(txt)

	def connect(self):
		if self.green_function == CONNECT:
			global gateway
			gateway = getDefaultGateway()
			self["state"].setText(_("Dialing:"))
			system("route del default")
			system("modprobe ppp_async")
			self.stateTimer.start(1000,False)
			setOptions(self.phone.getText(), self.username.getText())
			setSecretString(self.username.getText() + ' * ' + self.password.getText())
			ret = conn.execute("pppd", "pppd", "-d", "-detach")
			if ret:
				print "execute pppd failed!"
				self.pppdClosed(ret)
				pppdClosed(ret)
			self.green_function = NONE
			self.red_function = ABORT
			self.updateGui()

	def disconnect(self):
		conn.sendCtrlC()
		self.red_function = NONE
		self.updateGui()

	def keyLeft(self):
		if self.green_function == CONNECT:
			self["list"].handleKey(KEY_LEFT)

	def keyRight(self):
		if self.green_function == CONNECT:
			self["list"].handleKey(KEY_RIGHT)

	def keyNumber(self, number):
		if self.green_function == CONNECT:
			self["list"].handleKey(KEY_0 + number)

	def deleteForward(self):
		if self.green_function == CONNECT:
			self["list"].handleKey(KEY_DELETE)

	def deleteBackward(self):
		if self.green_function == CONNECT:
			self["list"].handleKey(KEY_BACKSPACE)

	def pppdClosed(self, retval):
		global connected
		self.stateTimer.stop()
		self.red_function = NONE
		self.green_function = CONNECT
		self["state"].setText("")
		self.updateGui()
		connected = False

	def dataAvail(self, text):
		if text.find("Serial connection established") != -1:
			tmp = self["state"].getText()
			tmp += "OK\nLogin:"******"state"].setText(tmp)
		if text.find("PAP authentication succeeded") != -1:
			tmp = self["state"].getText()
			tmp += "OK\n"
			self["state"].setText(tmp)
			self.stateTimer.stop()
		if text.find("ip-up finished") != -1:
			global connected
			tmp = self["state"].getText()
			tmp += "Connected :)\n"
			self["state"].setText(tmp)
			self.red_function = DISCONNECT
			connected=True
		if text.find("Connect script failed") != -1:
			tmp = self["state"].getText()
			tmp += "FAILED\n"
			self["state"].setText(tmp)
			self.stateTimer.stop()
			self.red_function = NONE
			self.green_function = CONNECT
		self.updateGui()

	def updateGui(self):
		if self.red_function == NONE:
			self["key_red"].setText("")
		elif self.red_function == DISCONNECT:
			self["key_red"].setText(_("Disconnect"))
		elif self.red_function == ABORT:
			self["key_red"].setText(_("Abort"))
		if self.green_function == NONE:
			self["key_green"].setText("")
		elif self.green_function == CONNECT:
			self["key_green"].setText(_("Connect"))
		focus_enabled = self.green_function == CONNECT
		self["list"].instance.setSelectionEnable(focus_enabled)
		self["ListActions"].setEnabled(not focus_enabled)
class MovieRetitle(Screen, ConfigListScreen):
	def __init__(self, session, services):
		Screen.__init__(self, session)

		self.skinName = ["MovieRetitle", "Setup"]
		self.list = [ ]
		ConfigListScreen.__init__(self, self.list, session)
		
		self["Path"] = Label(_("Location:"))# + ' ' + os.path.dirname(os.path.splitext(path)[0]))
		self["HelpWindow"] = Pixmap()
		self.onLayoutFinish.append(self.setCustomTitle)
		
		self["key_green"] = StaticText(_("Save"))
		self["key_red"] = StaticText(_("Cancel"))
		self["actions"] = ActionMap(["SetupActions"],
		{
			"ok": self.keyGo,
			"save": self.keyGo,
			"cancel": self.keyCancel,
		}, -2)
		
		self["VirtualKB"] = ActionMap(["VirtualKeyboardActions"],
		{
			"showVirtualKeyboard": self.KeyText,
		}, -2)
		self["VirtualKB"].setEnabled(False)
		self["HelpWindow"] = Pixmap()
		self["VKeyIcon"] = Pixmap()
		self["VKeyIcon"].hide()
		
		self.serviceHandler = ServiceCenter.getInstance()
		
		if isinstance(services, list):
			self.services = services
		else:
			self.services = [services]
		
		self.buildSetup(self.services.pop())

	def buildSetup(self, service):
		self.service = service
		self.is_dir = service.flags & eServiceReference.mustDescent
		info = self.serviceHandler.info(service)
		path = service.getPath()
		self["Path"] = Label(_("Location:") + ' ' + os.path.dirname(os.path.splitext(path)[0]))
		if self.is_dir:
			self.original_file = service.getName()
		else:
			self.original_file = os.path.basename(os.path.splitext(path)[0])
		self.original_name = info.getName(service)
		self.original_desc = info.getInfoString(service, iServiceInformation.sDescription)
		self.input_file = ConfigText(default=self.original_file, fixed_size=False, visible_width=82)
		self.input_title = ConfigText(default=self.original_name, fixed_size=False, visible_width=82)
		self.input_descr = ConfigText(default=self.original_desc, fixed_size=False, visible_width=82)
		self.createSetup()

	def createSetup(self):
		self.list = []
		if self.is_dir:
			self.list.append(getConfigListEntry(_("Foldername:"), self.input_file))
		else:
			self.list.append(getConfigListEntry(_("Filename:"), self.input_file))
			self.list.append(getConfigListEntry(_("Movietitle:"), self.input_title))
			self.list.append(getConfigListEntry(_("Description:"), self.input_descr))
		self["config"].setList(self.list)

	def handleInputHelpers(self):
		return
		if self["config"].getCurrent() is not None:
			if isinstance(self["config"].getCurrent()[1], ConfigText) or isinstance(self["config"].getCurrent()[1], ConfigPassword):
				if self.has_key("VKeyIcon"):
					self["VirtualKB"].setEnabled(True)
					self["VKeyIcon"].boolean = True
				if self.has_key("HelpWindow"):
					if self["config"].getCurrent()[1].help_window.instance is not None:
						helpwindowpos = self["HelpWindow"].getPosition()
						
						if helpwindowpos:
							helpwindowposx, helpwindowposy = helpwindowpos
							if helpwindowposx and helpwindowposy:
								from enigma import ePoint
								self["config"].getCurrent()[1].help_window.instance.move(ePoint(helpwindowposx,helpwindowposy))
			else:
				if self.has_key("VKeyIcon"):
					self["VirtualKB"].setEnabled(False)
					self["VKeyIcon"].boolean = False
		else:
			if self.has_key("VKeyIcon"):
				self["VirtualKB"].setEnabled(False)
				self["VKeyIcon"].boolean = False

	def setCustomTitle(self):
		if self.is_dir:
			self.setTitle(_("Change Foldername"))
		else:
			self.setTitle(_("Change File/Moviename and/or Description"))

	def keyGo(self):
		if self.is_dir:
			if self.input_file.getText() != self.original_file:
				self.renameDirectory(self.service, self.input_file.getText())
				self.original_file = self.input_file.getText()
		else:
			if self.input_title.getText() != self.original_name or self.input_descr.getText() != self.original_desc:
				self.setTitleDescr(self.service, self.input_title.getText(), self.input_descr.getText())
				self.original_name = self.input_title.getText()
				self.original_desc = self.input_descr.getText()
			if self.input_file.getText() != self.original_file:
				self.renameFile(self.service, self.input_file.getText())
				self.original_file = self.input_file.getText()
		if self.services:
			service = self.services.pop()
			self.buildSetup(service)
		else:
			self.close()
	
	def keyCancel(self):
		self.close()

	def setTitleDescr(self, service, title, descr):
		#TODO Use MetaSupport class
		if service.getPath().endswith(".ts"):
			meta_file = service.getPath() + ".meta"
		else:
			meta_file = service.getPath() + ".ts.meta"
		
		# Create new meta for ts files
		if not os.path.exists(meta_file):
			if os.path.isfile(service.getPath()):
				_title = os.path.basename(os.path.splitext(service.getPath())[0])
			else:
				_title = service.getName()
			_sid = ""
			_descr = ""
			_time = ""
			_tags = ""
			metafile = open(meta_file, "w")
			metafile.write("%s\n%s\n%s\n%s\n%s" % (_sid, _title, _descr, _time, _tags))
			metafile.close()

		if os.path.exists(meta_file):
			metafile = open(meta_file, "r")
			sid = metafile.readline()
			oldtitle = metafile.readline().rstrip()
			olddescr = metafile.readline().rstrip()
			rest = metafile.read()
			metafile.close()
			if not title and title != "":
				title = oldtitle
			if not descr and descr != "":
				descr = olddescr
			metafile = open(meta_file, "w")
			metafile.write("%s%s\n%s\n%s" % (sid, title, descr, rest))
			metafile.close()

	def renameDirectory(self, service, new_name):
		try:
			dir = os.path.dirname(self.service.getPath()[0:-1])
			os.rename(self.service.getPath(), os.path.join(dir, self.input_file.getText() + "/"))
			self.original_file = self.input_file.getText()
		except Exception, e:
			print e
class AdvancedKeyBoard(VirtualKeyBoard, NumericalTextInput):
    KEYBOARD = 0x01
    NUM_KEYB = 0x02
    BOTH = KEYBOARD | NUM_KEYB
    def __init__(self, session, title="", text=""):
        VirtualKeyBoard.__init__(self, session, title, text)
        NumericalTextInput.__init__(self, nextFunc=self.nextFunc)
        self.configText = None
        if config.AdvancedMovieSelection.keyboard.value == "virtual":
            use = self.KEYBOARD
        elif config.AdvancedMovieSelection.keyboard.value == "numerical":
            use = self.NUM_KEYB
        else:
            use = self.BOTH
        if not use & self.KEYBOARD:
            # hide the keyboard
            self["list"].hide()
            # overwrite VirtualKeyBoard actions
            # make sure not overwrite any action of base class
            self["actions"] = ActionMap(["OkCancelActions", "WizardActions", "ColorActions", "KeyboardInputActions", "InputBoxActions", "InputAsciiActions"],
            {
                "ok": self.__ok,
                "cancel": self.__cancel,
                "left": self.keyLeft,
                "right": self.keyRight,
                "up": self.keyHome,
                "down": self.keyEnd,
                "red": self.__cancel,
                "green": self.__ok,
                "yellow": self.dummy,
                "deleteForward": self.keyDelete,
                "deleteBackward": self.keyBackspace,
                "back": self.dummy                
            }, -2)

        if use & self.NUM_KEYB:
            self.timer = xTimer()
            self.timer.addCallback(self.timeout)
            self.configText = ConfigText("", False)
            if text:
                self.configText.text = text
                self.configText.marked_pos = len(text)
            self["config_actions"] = NumberActionMap(["SetupActions", "InputAsciiActions", "KeyboardInputActions"],
            {
                "1": self.keyNumberGlobal,
                "2": self.keyNumberGlobal,
                "3": self.keyNumberGlobal,
                "4": self.keyNumberGlobal,
                "5": self.keyNumberGlobal,
                "6": self.keyNumberGlobal,
                "7": self.keyNumberGlobal,
                "8": self.keyNumberGlobal,
                "9": self.keyNumberGlobal,
                "0": self.keyNumberGlobal
            }, -1) # to prevent left/right overriding the listbox
            if use & self.KEYBOARD:
                self.selectedKey = self.getKeyIndex(u"OK") 
            
        self.onLayoutFinish.append(self.__onLayoutFinish)
        self.onClose.append(self.__onClose)

    def __onLayoutFinish(self):
        self.setTitle(_("Advanced Movie Selection - Input help"))
        if self.configText:
            self.configText.help_window = self.session.instantiateDialog(AdvancedTextInputHelpDialog, self)
            self.configText.help_window.show()
                
    def __onClose(self):
        if self.configText and self.configText.help_window:
            self.session.deleteDialog(self.configText.help_window)
            self.configText.help_window = None
    
    def getKeyIndex(self, key):
        index = 0
        for x in self.keys_list:
            for k in x:
                if k == key:
                    return index
                index += 1
        return index
    
    def buildVirtualKeyBoard(self, selectedKey=0):
        VirtualKeyBoard.buildVirtualKeyBoard(self, selectedKey=self.selectedKey)

    def dummy(self):
        pass
    
    def __ok(self):
        self.close(self["text"].getText())

    def __cancel(self):
        self.close(None)

    def timeout(self):
        self.handleKey(KEY_TIMEOUT)
        self["text"].setMarkedPos(-1)

    def handleKey(self, key):
        if self.configText:
            self.configText.handleKey(key)
            if key in KEY_NUMBERS:
                self.timer.start(1000, 1)

    def __keyNumberGlobal(self, number):
        self.handleKey(number)
        #self.getKey(number)
        self.text = str(self.configText.getText())
        self["text"].setText(self.text)
        self["text"].setMarkedPos(self.configText.marked_pos)

    def keyNumberGlobal(self, number):
        self.__keyNumberGlobal(KEY_0 + number)

    def okClicked(self):
        VirtualKeyBoard.okClicked(self)
        self["text"].setMarkedPos(-1)
        if self.configText:
            self.configText.text = self.text
            self.configText.marked_pos = len(self.text)

    def nextFunc(self):
        self["text"].setMarkedPos(-1)

    def keyLeft(self):
        self.__keyNumberGlobal(KEY_LEFT)

    def keyRight(self):
        self.__keyNumberGlobal(KEY_RIGHT)

    def keyHome(self):
        self.__keyNumberGlobal(KEY_HOME)

    def keyEnd(self):
        self.__keyNumberGlobal(KEY_END)

    def keyDelete(self):
        self.__keyNumberGlobal(KEY_DELETE)

    def keyBackspace(self):
        self.__keyNumberGlobal(KEY_BACKSPACE)
示例#6
0
class ModemSetup(Screen):
    skin = """
		<screen position="180,100" size="320,300" title="Modem" >
		<ePixmap pixmap="buttons/green.png" position="10,10" size="140,40" alphatest="on" />
		<ePixmap pixmap="buttons/red.png" position="160,10" size="140,40" alphatest="on" />
		<widget name="key_green" position="10,10" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#9f1313" transparent="1" />
		<widget name="key_red" position="160,10" zPosition="1" size="140,40" font="Regular;20" halign="center" valign="center" backgroundColor="#1f771f" transparent="1" />
		<widget name="list" position="10,60" size="300,120" />
		<widget name="state" position="10,210" size="300,80" font="Regular;20" />
		</screen>"""

    def nothing(self):
        print("nothing!")

    def __init__(self, session, args=None):
        global connected
        global conn
        self.skin = ModemSetup.skin
        secret = getSecretString()
        user = secret[:secret.find('*')]
        password = secret[secret.find('*') + 1:]
        self.username = ConfigText(user, fixed_size=False)
        self.password = ConfigPassword(password, fixed_size=False)
        self.phone = ConfigText(getTelephone(), fixed_size=False)
        self.phone.setUseableChars(u"0123456789")
        lst = [(_("Username"), self.username), (_("Password"), self.password),
               (_("Phone number"), self.phone)]
        self["list"] = ConfigList(lst)
        self["key_green"] = Button("")
        self["key_red"] = Button("")
        self["state"] = Label("")
        self["actions"] = NumberActionMap(
            ["ModemActions"], {
                "cancel": self.close,
                "left": self.keyLeft,
                "right": self.keyRight,
                "connect": self.connect,
                "disconnect": self.disconnect,
                "deleteForward": self.deleteForward,
                "deleteBackward": self.deleteBackward,
                "0": self.keyNumber,
                "1": self.keyNumber,
                "2": self.keyNumber,
                "3": self.keyNumber,
                "4": self.keyNumber,
                "5": self.keyNumber,
                "6": self.keyNumber,
                "7": self.keyNumber,
                "8": self.keyNumber,
                "9": self.keyNumber
            }, -1)

        self["ListActions"] = ActionMap(
            ["ListboxDisableActions"], {
                "moveUp": self.nothing,
                "moveDown": self.nothing,
                "moveTop": self.nothing,
                "moveEnd": self.nothing,
                "pageUp": self.nothing,
                "pageDown": self.nothing
            }, -1)

        self.stateTimer = eTimer()
        self.stateTimer.callback.append(self.stateLoop)

        conn.appClosed.append(self.pppdClosed)
        conn.dataAvail.append(self.dataAvail)

        Screen.__init__(self, session)
        self.onClose.append(self.__closed)
        self.onLayoutFinish.append(self.__layoutFinished)

    def __layoutFinished(self):
        global conn
        if conn.running():
            self["state"].setText(_("Connected!"))
            self.green_function = NONE
            self.red_function = DISCONNECT
        else:
            self.green_function = CONNECT
            self.red_function = NONE
        self.updateGui()

    def __closed(self):
        global connected
        conn.appClosed.remove(self.pppdClosed)
        conn.dataAvail.remove(self.dataAvail)
        if not connected:
            conn.sendCtrlC()
        setOptions(self.phone.getText(), self.username.getText())
        setSecretString(self.username.getText() + ' * ' +
                        self.password.getText())

    def stateLoop(self):
        txt = self["state"].getText()
        txt += '.'
        self["state"].setText(txt)

    def connect(self):
        if self.green_function == CONNECT:
            global gateway
            gateway = getDefaultGateway()
            self["state"].setText(_("Dialing:"))
            system("route del default")
            system("modprobe ppp_async")
            self.stateTimer.start(1000, False)
            setOptions(self.phone.getText(), self.username.getText())
            setSecretString(self.username.getText() + ' * ' +
                            self.password.getText())
            ret = conn.execute("pppd", "pppd", "-d", "-detach")
            if ret:
                print("execute pppd failed!")
                self.pppdClosed(ret)
                pppdClosed(ret)
            self.green_function = NONE
            self.red_function = ABORT
            self.updateGui()

    def disconnect(self):
        conn.sendCtrlC()
        self.red_function = NONE
        self.updateGui()

    def keyLeft(self):
        if self.green_function == CONNECT:
            self["list"].handleKey(KEY_LEFT)

    def keyRight(self):
        if self.green_function == CONNECT:
            self["list"].handleKey(KEY_RIGHT)

    def keyNumber(self, number):
        if self.green_function == CONNECT:
            self["list"].handleKey(KEY_0 + number)

    def deleteForward(self):
        if self.green_function == CONNECT:
            self["list"].handleKey(KEY_DELETE)

    def deleteBackward(self):
        if self.green_function == CONNECT:
            self["list"].handleKey(KEY_BACKSPACE)

    def pppdClosed(self, retval):
        global connected
        self.stateTimer.stop()
        self.red_function = NONE
        self.green_function = CONNECT
        self["state"].setText("")
        self.updateGui()
        connected = False

    def dataAvail(self, text):
        if text.find("Serial connection established") != -1:
            tmp = self["state"].getText()
            tmp += "OK\nLogin:"******"state"].setText(tmp)
        if text.find("PAP authentication succeeded") != -1:
            tmp = self["state"].getText()
            tmp += "OK\n"
            self["state"].setText(tmp)
            self.stateTimer.stop()
        if text.find("ip-up finished") != -1:
            global connected
            tmp = self["state"].getText()
            tmp += "Connected :)\n"
            self["state"].setText(tmp)
            self.red_function = DISCONNECT
            connected = True
        if text.find("Connect script failed") != -1:
            tmp = self["state"].getText()
            tmp += "FAILED\n"
            self["state"].setText(tmp)
            self.stateTimer.stop()
            self.red_function = NONE
            self.green_function = CONNECT
        self.updateGui()

    def updateGui(self):
        if self.red_function == NONE:
            self["key_red"].setText("")
        elif self.red_function == DISCONNECT:
            self["key_red"].setText(_("Disconnect"))
        elif self.red_function == ABORT:
            self["key_red"].setText(_("Abort"))
        if self.green_function == NONE:
            self["key_green"].setText("")
        elif self.green_function == CONNECT:
            self["key_green"].setText(_("Connect"))
        focus_enabled = self.green_function == CONNECT
        self["list"].instance.setSelectionEnable(focus_enabled)
        self["ListActions"].setEnabled(not focus_enabled)
示例#7
0
class MovieRetitle(Screen, ConfigListScreen):
    def __init__(self, session, service):
        Screen.__init__(self, session)
        self.skinName = "AdvancedMovieSelection_Rename"
        self.service = service
        self.movieConfig = MovieConfig()
        self.is_vdir = isinstance(service, eServiceReferenceVDir)
        self.is_dir = service.flags & eServiceReference.mustDescent
        serviceHandler = ServiceCenter.getInstance()
        info = serviceHandler.info(service)
        path = service.getPath()
        if self.is_vdir:
            parts = path.split("/")
            if len(parts) > 2:
                dirName = parts[-3] + "/" + parts[-2]
            else:
                dirName = parts[-2]
            self.original_file = dirName
        elif self.is_dir:
            self.original_file = service.getName()
        else:
            self.original_file = os.path.basename(os.path.splitext(path)[0])
        if self.is_vdir:
            self.original_name = self.movieConfig.getRenamedName(
                service.getName())
        else:
            self.original_name = info.getName(service)
        self.original_desc = info.getInfoString(
            service, iServiceInformation.sDescription)
        self.input_file = ConfigText(default=self.original_file,
                                     fixed_size=False,
                                     visible_width=82)
        self.input_title = ConfigText(default=self.original_name,
                                      fixed_size=False,
                                      visible_width=82)
        self.input_descr = ConfigText(default=self.original_desc,
                                      fixed_size=False,
                                      visible_width=82)
        self["key_green"] = StaticText(_("Save"))
        self["key_red"] = StaticText(_("Cancel"))
        self["actions"] = ActionMap(["SetupActions"], {
            "ok": self.keyGo,
            "save": self.keyGo,
            "cancel": self.keyCancel,
        }, -2)
        self.list = []
        ConfigListScreen.__init__(self, self.list, session=self.session)
        self.createSetup()
        self["Path"] = Label(
            _("Location:") + ' ' + os.path.dirname(os.path.splitext(path)[0]))
        self["HelpWindow"] = Pixmap()
        self.onLayoutFinish.append(self.setCustomTitle)

    def createSetup(self):
        self.list = []
        if self.is_vdir:
            self.list.append(
                getConfigListEntry(_("Displayed bookmark name:"),
                                   self.input_title))
        elif self.is_dir:
            self.list.append(
                getConfigListEntry(_("Foldername:"), self.input_file))
        else:
            self.list.append(
                getConfigListEntry(_("Filename:"), self.input_file))
            self.list.append(
                getConfigListEntry(_("Movietitle:"), self.input_title))
            self.list.append(
                getConfigListEntry(_("Description:"), self.input_descr))

        self["config"].setList(self.list)

    def showKeypad(self, retval=None):
        current = self["config"].getCurrent()
        helpwindowpos = self["HelpWindow"].getPosition()
        if hasattr(current[1], 'help_window'):
            if current[1].help_window.instance is not None:
                current[1].help_window.instance.show()
                current[1].help_window.instance.move(
                    ePoint(helpwindowpos[0], helpwindowpos[1]))

    def setCustomTitle(self):
        if self.is_vdir:
            self.setTitle(_("Change Bookmarkname"))
        elif self.is_dir:
            self.setTitle(_("Change Foldername"))
        else:
            self.setTitle(_("Change File/Moviename and/or Description"))

    def keyGo(self):
        if self.is_vdir:
            if self.input_title.getText() != self.original_name:
                self.renameVDir(self.original_file, self.input_title.getText())
                self.original_name = self.input_title.getText()
        if self.is_dir:
            if self.input_file.getText() != self.original_file:
                self.renameDirectory(self.service, self.input_file.getText())
                self.original_file = self.input_file.getText()
        else:
            if self.input_title.getText(
            ) != self.original_name or self.input_descr.getText(
            ) != self.original_desc:
                self.setTitleDescr(self.service, self.input_title.getText(),
                                   self.input_descr.getText())
                self.original_name = self.input_title.getText()
                self.original_desc = self.input_descr.getText()
            if self.input_file.getText() != self.original_file:
                self.renameFile(self.service, self.input_file.getText())
                self.original_file = self.input_file.getText()
        self.close()

    def keyCancel(self):
        self.close()

    def setTitleDescr(self, service, title, descr):
        try:
            if service.getPath().endswith(".ts"):
                meta_file = service.getPath() + ".meta"
            else:
                meta_file = service.getPath() + ".ts.meta"

            # Create new meta for ts files
            if not os.path.exists(meta_file):
                if os.path.isfile(service.getPath()):
                    _title = os.path.basename(
                        os.path.splitext(service.getPath())[0])
                else:
                    _title = service.getName()
                _sid = "0:0:0:0:0:0:0:0:0:0:"
                _descr = ""
                _time = ""
                _tags = ""
                metafile = open(meta_file, "w")
                metafile.write("%s\n%s\n%s\n%s\n%s" %
                               (_sid, _title, _descr, _time, _tags))
                metafile.close()

            if os.path.exists(meta_file):
                metafile = open(meta_file, "r")
                sid = metafile.readline()
                oldtitle = metafile.readline().rstrip()
                olddescr = metafile.readline().rstrip()
                rest = metafile.read()
                metafile.close()
                if not title and title != "":
                    title = oldtitle
                if not descr and descr != "":
                    descr = olddescr
                metafile = open(meta_file, "w")
                metafile.write("%s%s\n%s\n%s" % (sid, title, descr, rest))
                metafile.close()
        except:
            printStackTrace()

    def renameDirectory(self, service, new_name):
        try:
            dir_name = os.path.dirname(self.service.getPath()[0:-1])
            os.rename(self.service.getPath(),
                      os.path.join(dir_name,
                                   self.input_file.getText() + "/"))
            self.original_file = self.input_file.getText()
        except:
            printStackTrace()

    def renameFile(self, service, new_name):
        try:
            path = os.path.dirname(service.getPath())
            file_name = os.path.basename(
                os.path.splitext(service.getPath())[0])
            src = os.path.join(path, file_name)
            dst = os.path.join(path, new_name)
            import glob
            for f in glob.glob(os.path.join(path, src + "*")):
                os.rename(f, f.replace(src, dst))
        except:
            printStackTrace()

    def renameVDir(self, dir_name, name):
        try:
            if not dir_name + "\t" + self.original_name in self.movieConfig.rename:
                self.movieConfig.rename.append(dir_name + "\t" + name)
            elif name == "":
                for index, item in enumerate(self.movieConfig.rename):
                    i = item.split("\t")
                    if i[0] == dir_name:
                        print dir_name + "\t" + name
                        del self.movieConfig.rename[index]
            else:
                for index, item in enumerate(self.movieConfig.rename):
                    i = item.split("\t")
                    if i[0] == dir_name:
                        self.movieConfig.rename[index] = dir_name + "\t" + name
            self.movieConfig.safe()
        except:
            printStackTrace()
示例#8
0
class MovieRetitle(Screen, ConfigListScreen):
    def __init__(self, session, service):
        Screen.__init__(self, session)
        self.skinName = SkinTools.appendResolution("AdvancedMovieSelection_Rename_")
        self.service = service
        self.movieConfig = MovieConfig()
        self.is_vdir = isinstance(service, eServiceReferenceVDir)
        self.is_dir = service.flags & eServiceReference.mustDescent
        serviceHandler = ServiceCenter.getInstance()
        info = serviceHandler.info(service)
        path = service.getPath()
        if self.is_vdir:
            parts = path.split("/")
            if len(parts) > 2:
                dirName = parts[-3] + "/" + parts[-2]
            else: 
                dirName = parts[-2]
            self.original_file = dirName 
        elif self.is_dir:
            self.original_file = service.getName()
        else:
            self.original_file = os.path.basename(os.path.splitext(path)[0])
        if self.is_vdir:
            self.original_name = self.movieConfig.getRenamedName(service.getName())
        else:
            self.original_name = info.getName(service)
        self.original_desc = info.getInfoString(service, iServiceInformation.sDescription)
        self.input_file = ConfigText(default=self.original_file, fixed_size=False, visible_width=82)
        self.input_title = ConfigText(default=self.original_name, fixed_size=False, visible_width=82)
        self.input_descr = ConfigText(default=self.original_desc, fixed_size=False, visible_width=82)
        self["key_green"] = StaticText(_("Save"))
        self["key_red"] = StaticText(_("Cancel"))
        self["actions"] = ActionMap(["SetupActions"],
        {
            "ok": self.keyGo,
            "save": self.keyGo,
            "cancel": self.keyCancel,
        }, -2)
        self.list = [ ]
        ConfigListScreen.__init__(self, self.list, session=self.session)
        self.createSetup()
        self["Path"] = Label(_("Location:") + ' ' + os.path.dirname(os.path.splitext(path)[0]))
        self["HelpWindow"] = Pixmap()
        self.onLayoutFinish.append(self.setCustomTitle)

    def createSetup(self):
        self.list = []
        if self.is_vdir:
            self.list.append(getConfigListEntry(_("Displayed bookmark name:"), self.input_title))
        elif self.is_dir:
            self.list.append(getConfigListEntry(_("Foldername:"), self.input_file))
        else:
            self.list.append(getConfigListEntry(_("Filename:"), self.input_file))
            self.list.append(getConfigListEntry(_("Movietitle:"), self.input_title))
            self.list.append(getConfigListEntry(_("Description:"), self.input_descr))

        self["config"].setList(self.list)

    def showKeypad(self, retval = None):
        current = self["config"].getCurrent()
        helpwindowpos = self["HelpWindow"].getPosition()
        if hasattr(current[1], 'help_window'):
            if current[1].help_window.instance is not None:
                current[1].help_window.instance.show()
                current[1].help_window.instance.move(ePoint(helpwindowpos[0],helpwindowpos[1]))
        
    def setCustomTitle(self):
        if self.is_vdir:
            self.setTitle(_("Change Bookmarkname"))
        elif self.is_dir:
            self.setTitle(_("Change Foldername"))
        else:
            self.setTitle(_("Change File/Moviename and/or Description"))

    def keyGo(self):
        if self.is_vdir:
            if self.input_title.getText() != self.original_name:
                self.renameVDir(self.original_file, self.input_title.getText())
                self.original_name = self.input_title.getText()
        if self.is_dir:
            if self.input_file.getText() != self.original_file:
                self.renameDirectory(self.service, self.input_file.getText())
                self.original_file = self.input_file.getText()
        else:
            if self.input_title.getText() != self.original_name or self.input_descr.getText() != self.original_desc:
                self.setTitleDescr(self.service, self.input_title.getText(), self.input_descr.getText())
                self.original_name = self.input_title.getText()
                self.original_desc = self.input_descr.getText()
            if self.input_file.getText() != self.original_file:
                self.renameFile(self.service, self.input_file.getText())
                self.original_file = self.input_file.getText()
        self.close()
    
    def keyCancel(self):
        self.close()

    def setTitleDescr(self, service, title, descr):
        if service.getPath().endswith(".ts"):
            meta_file = service.getPath() + ".meta"
        else:
            meta_file = service.getPath() + ".ts.meta"
        
        # Create new meta for ts files
        if not os.path.exists(meta_file):
            if os.path.isfile(service.getPath()):
                _title = os.path.basename(os.path.splitext(service.getPath())[0])
            else:
                _title = service.getName()
            _sid = ""
            _descr = ""
            _time = ""
            _tags = ""
            metafile = open(meta_file, "w")
            metafile.write("%s\n%s\n%s\n%s\n%s" % (_sid, _title, _descr, _time, _tags))
            metafile.close()

        if os.path.exists(meta_file):
            metafile = open(meta_file, "r")
            sid = metafile.readline()
            oldtitle = metafile.readline().rstrip()
            olddescr = metafile.readline().rstrip()
            rest = metafile.read()
            metafile.close()
            if not title and title != "":
                title = oldtitle
            if not descr and descr != "":
                descr = olddescr
            metafile = open(meta_file, "w")
            metafile.write("%s%s\n%s\n%s" % (sid, title, descr, rest))
            metafile.close()

    def renameDirectory(self, service, new_name):
        try:
            dir = os.path.dirname(self.service.getPath()[0:-1])
            os.rename(self.service.getPath(), os.path.join(dir, self.input_file.getText() + "/"))
            self.original_file = self.input_file.getText()
        except Exception, e:
            print e