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