Example #1
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)
Example #2
0
class AdvancedCutInput(Screen, ConfigListScreen):
	def __init__(self, session, name, path, descr):
		Screen.__init__(self, session)
		self.skinName = ["AdvancedCutInput", "Setup"]

		self["key_green"] = StaticText(_("OK"))
		self["key_red"] = StaticText(_("Cancel"))

		if self.baseName(path) == self.baseName(name):
			title = ""
		else:
			title = name
		dir = self.dirName(path)
		file = self.baseName(path) + " cut"
		self.input_replace = ConfigSelection(choices=[("no", _("No")), ("yes", _("Yes"))], default="no")
		self.input_file = ConfigText(default=file, fixed_size=False, visible_width=45)
		self.input_title = ConfigText(default=title, fixed_size=False, visible_width=45)
		self.input_descr = ConfigText(default=descr, fixed_size=False, visible_width=45)
		tmp = config.movielist.videodirs.value
		if not dir in tmp:
			tmp.append(dir)
		self.input_dir = ConfigSelection(choices=tmp, default=dir)
		self.input_manual = ConfigSelection(choices=[("no", _("Cutlist")), ("yes", _("Manual specification"))], default="no")
		self.input_space = ConfigNothing()
		self.input_manualcuts = ConfigText(default="", fixed_size=False)
		self.input_manualcuts.setUseableChars(" 0123456789:.")

		self["actions"] = ActionMap(["SetupActions"],
		{
			"ok": self.keySelectOrGo,
			"save": self.keyGo,
			"cancel": self.keyCancel,
		}, -2)

		self.list = []
		ConfigListScreen.__init__(self, self.list)
		self.entry_replace = getConfigListEntry(_("Replace original:"), self.input_replace)
		self.entry_file = getConfigListEntry(_("New filename:"), self.input_file)
		self.entry_title = getConfigListEntry(_("New title:"), self.input_title)
		self.entry_descr = getConfigListEntry(_("New description:"), self.input_descr)
		self.entry_dir = getConfigListEntry(_("New location:"), self.input_dir)
		self.entry_manual = getConfigListEntry(_("Cut source:"), self.input_manual)
		self.entry_space = getConfigListEntry(_("Cuts (an IN OUT IN OUT ... sequence of hour:min:sec)"), self.input_space)
		self.entry_manualcuts = getConfigListEntry(":", self.input_manualcuts)
		self.createSetup(self["config"])

		self.onLayoutFinish.append(self.layoutFinished)

	def layoutFinished(self):
		self.setTitle(_("Cut Parameter Input"))

	def createSetup(self, configlist):
		list = [
			self.entry_replace
		]
		if self.input_replace.value == "no":
			list.extend((
				self.entry_file,
				self.entry_dir,
			))
		list.extend((
			self.entry_title,
			self.entry_descr,
			self.entry_manual,
		))
		if self.input_manual.value == "yes":
			list.extend((
				self.entry_space,
				self.entry_manualcuts,
			))
		self.list = list
		configlist.list = list
		configlist.l.setList(list)

	def keyLeft(self):
		ConfigListScreen.keyLeft(self)
		cc = self["config"].getCurrent()
		if cc is self.entry_replace or cc is self.entry_manual:
			self.createSetup(self["config"])

	def keyRight(self):
		ConfigListScreen.keyRight(self)
		cc = self["config"].getCurrent()
		if cc is self.entry_replace or cc is self.entry_manual:
			self.createSetup(self["config"])

	def pathSelected(self, res):
		if res is not None:
			if config.movielist.videodirs.value != self.input_dir.choices:
				self.input_dir.setChoices(config.movielist.videodirs.value, default=res)
			self.input_dir.value = res

	def keySelectOrGo(self):
		if self["config"].getCurrent() == self.entry_dir:
			self.session.openWithCallback(
				self.pathSelected,
				MovieLocationBox,
				_("Choose target folder"),
				self.input_dir.value,
			)
		else:
			self.keyGo()

	def keyGo(self):
		if self.input_replace.value == "yes":
			path = False
		else:
			path = self.rejoinName(self.input_dir.value, self.input_file.value)
		if self.input_manual.value == "no":
			cuts = False
		else:
			cuts = self.input_manualcuts.value.split(' ')
			while "" in cuts:
				cuts.remove("")
		self.close((True, self.input_replace.value == "yes", path, self.input_title.value, self.input_descr.value, cuts))

	def keyCancel(self):
		self.close((False,))

	def baseName(self, str):
		name = str.split('/')[-1]
		if name.endswith(".ts") is True:
			return name[:-3]
		else:
			return name

	def dirName(self, str):
		return '/'.join(str.split('/')[:-1]) + '/'

	def rejoinName(self, dir, name):
		name = name.strip()
		if name.endswith(".ts") is True:
			return dir + name[:-3]
		else:
			return dir + name
Example #3
0
class EmailConfigAccount(ConfigListScreen, Screen):
    width = max(2 * 140 + 100, 550)
    height = 5 * 30 + 50
    buttonsGap = (width - 2 * 140) / 3
    skin = """
		<screen position="%d,%d" size="%d,%d" title="Account Setup" >
		<widget name="config" position="0,0" size="%d,%d" scrollbarMode="showOnDemand" />
		<ePixmap position="%d,%d" zPosition="4" size="140,40" pixmap="skin_default/buttons/red.png" transparent="1" alphatest="on" />
		<ePixmap position="%d,%d" zPosition="4" size="140,40" pixmap="skin_default/buttons/green.png" transparent="1" alphatest="on" />
		<widget name="buttonred" position="%d,%d" zPosition="5" size="140,40" valign="center" halign="center" font="Regular;%d" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
		<widget name="buttongreen" position="%d,%d" zPosition="5" size="140,40" valign="center" halign="center" font="Regular;%d" transparent="1" foregroundColor="white" shadowColor="black" shadowOffset="-1,-1" />
		</screen>""" % (
        (DESKTOP_WIDTH - width) / 2,
        (DESKTOP_HEIGHT - height) / 2,
        width,
        height,
        width,
        height - 50,  # config
        buttonsGap,
        height - 45,
        2 * buttonsGap + 140,
        height - 45,
        buttonsGap,
        height - 45,
        scaleV(22, 18),
        2 * buttonsGap + 140,
        height - 45,
        scaleV(22, 18))

    def __init__(self, session, params=None):
        debug("[EmailConfigAccount] __init__")
        self._session = session
        Screen.__init__(self, session)
        self.setTitle(_("Account Setup"))
        self.list = []
        ConfigListScreen.__init__(self, self.list, session=session)
        self["buttonred"] = Label(_("cancel"))
        self["buttongreen"] = Label(_("ok"))
        self["setupActions"] = ActionMap(
            ["SetupActions"], {
                "green": self.save,
                "red": self.cancel,
                "save": self.save,
                "cancel": self.cancel,
                "ok": self.save,
            }, -2)

        if params:
            (self._name, self._server, self._port, self._user, self._password,
             self._interval, self._maxmail, self._listall) = params
        else:
            (self._name, self._server, self._port, self._user, self._password,
             self._interval, self._maxmail,
             self._listall) = ("", "", "993", "", "", "60", "50", False)
        self._cName = ConfigText(self._name, fixed_size=False)
        self._cServer = ConfigText(self._server, fixed_size=False)
        self._cPort = ConfigSelection(choices=[("143", "143"),
                                               ("993", "993 (SSL)")],
                                      default=self._port)
        self._cUser = ConfigText(self._user, fixed_size=False)
        self._cPassword = ConfigPassword(self._password, fixed_size=False)
        self._cInterval = ConfigText(self._interval, fixed_size=False)
        self._cInterval.setUseableChars('0123456789,')
        self._cMaxmail = ConfigText(self._maxmail, fixed_size=False)
        self._cMaxmail.setUseableChars('0123456789,')
        self._cListall = ConfigEnableDisable(self._listall)

        self.list = [
            getConfigListEntry(_("account name"), self._cName),
            getConfigListEntry(_("IMAP Server"), self._cServer),
            getConfigListEntry(_("IMAP Port"), self._cPort),
            getConfigListEntry(_("user name"), self._cUser),
            getConfigListEntry(_("password"), self._cPassword),
            getConfigListEntry(_("mail check interval (minutes)"),
                               self._cInterval),
            getConfigListEntry(_("maximum mail size to fetch"),
                               self._cMaxmail),
            getConfigListEntry(_("list all mailboxes"), self._cListall)
        ]
        self["config"].list = self.list
        self["config"].l.setList(self.list)

    def save(self):
        debug("[EmailConfigAccount] saving")
        # do some sanity checks
        if not self._cName.value or not self._cServer.value or not self._cUser.value or not self._cPassword.value or not self._cInterval.value or not self._cMaxmail.value:
            self._session.open(MessageBox,
                               _("empty values - retry"),
                               type=MessageBox.TYPE_ERROR,
                               timeout=config.plugins.emailimap.timeout.value)
        else:
            if self._cListall.value:
                self.close(
                    (self._cName.value, self._cServer.value, self._cPort.value,
                     self._cUser.value, self._cPassword.value,
                     self._cInterval.value, self._cMaxmail.value, 1))
            else:
                self.close(
                    (self._cName.value, self._cServer.value, self._cPort.value,
                     self._cUser.value, self._cPassword.value,
                     self._cInterval.value, self._cMaxmail.value, 0))

    def cancel(self):
        debug("[EmailConfigAccount] cancel")
        self.close(None)