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