from Plugins.Plugin import PluginDescriptor from Screens.Screen import Screen from Screens.MessageBox import MessageBox from Components.config import * from Components.ActionMap import ActionMap, NumberActionMap from Components.ConfigList import ConfigList, ConfigListScreen from Components.Button import Button from Components.Label import Label from Components.Pixmap import Pixmap from Components.MovieUtils import GetDescriptionWithFallbackFromService from enigma import eServiceReference, eServiceCenter, iServiceInformation import os def main(session, service, **kwargs): MovieRetitle(session, service, **kwargs) def Plugins(**kwargs): return PluginDescriptor(name="MovieRetitle", description=_("Change name..."), where = PluginDescriptor.WHERE_MOVIELIST, fnc=main) class MovieRetitle(Screen): def __init__(self, session, service, args = 0): self.session = session self.service = service Screen.__init__(self, session) serviceHandler = eServiceCenter.getInstance() info = serviceHandler.info(self.service) self.path = self.service.getPath() if self.path.endswith(".ts") is True: self.path = self.path[:-3] self.name = info.getName(self.service) event = info.getEvent(self.service) getDescr = GetDescriptionWithFallbackFromService(self.service) # getDescr = getDescrTx.split("~") self.descr = getDescr[0] if getDescr[1] == "1": self.descrChanged = False else: self.descrChanged = True # self.descr = info.getInfoString(self.service, iServiceInformation.sDescription) # self.descrChanged = False # if self.descr == "": # extDescr = event.getExtendedDescription() # extArr = extDescr.split("'",3) # self.descr = extArr[1] # self.descrChanged = True self.session.openWithCallback(self.renameConfirmed, TitleDescrInput, self.name, self.path, self.descr, self.descrChanged) def renameConfirmed(self, ret): if len(ret) <= 1 or not ret[0]: return self.close() if ret[2] != False or ret[3] != False: self.setTitleDescr(self.path, ret[2], ret[3]) if ret[1] != False: self.maybeMoveMovieFiles(self.path, ret[1]) else: self.exitDialog() def setTitleDescr(self, file, title, descr): if os.path.exists(file + ".ts.meta"): metafile = open(file + ".ts.meta", "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(file + ".ts.meta", "w") metafile.write("%s%s\n%s\n%s" %(sid, title, descr, rest)) metafile.close() def maybeMoveMovieFiles(self, fr, to): if os.path.exists(to+".ts"): self.inter_fr = fr self.inter_to = to self.session.openWithCallback(self.confirmedReplace, MessageBox, _("Target file") + " " + to + ".ts " + _("already exist.") + "\n" + _("Do you want to replace it?"), MessageBox.TYPE_YESNO) else: self.moveMovieFiles(fr, to) self.exitDialog() def confirmedReplace(self, answer): if answer == True: self.moveMovieFiles(self.inter_fr, self.inter_to) self.exitDialog() def moveMovieFiles(self, fr, to): self.moveOneFile(fr, to, ".ts") self.moveOneFile(fr, to, ".ts.cuts") self.moveOneFile(fr, to, ".ts.ap") self.moveOneFile(fr, to, ".ts.meta") self.moveOneFile(fr, to, ".eit") def moveOneFile(self, fr, to, suff): if os.path.exists(fr+suff): os.rename(fr+suff, to+suff) def exitDialog(self): session = self.session self.close() # This will try to get back to an updated movie list. # A proper way to do this should be provided in enigma2. try: session.current_dialog.csel.reloadList() session.current_dialog.close() except AttributeError: pass class TitleDescrInput(Screen, ConfigListScreen): skin = """ """ def __init__(self, session, name, path, descr, descrChanged): self.skin = TitleDescrInput.skin Screen.__init__(self, session) self["oktext"] = Label(_("OK")) self["canceltext"] = Label(_("Cancel")) self["ok"] = Pixmap() self["cancel"] = Pixmap() if self.baseName(path) == self.baseName(name): self.title = "" else: self.title = name self.dir = self.dirName(path) self.path = self.baseName(path) self.descr = descr self.descrChanged = descrChanged self.input_path = ConfigText(default = self.path, fixed_size = False, visible_width = 42) self.input_title = ConfigText(default = self.title, fixed_size = False, visible_width = 42) self.input_descr = ConfigText(default = self.descr, fixed_size = False, visible_width = 42) self["actions"] = NumberActionMap(["SetupActions"], { "ok": self.keyGo, "save": self.keyGo, "cancel": self.keyCancel, }, -2) self.list = [] ConfigListScreen.__init__(self, self.list) self.createSetup(self["config"]) def createSetup(self, configlist): self.list = [] self.list.append(getConfigListEntry(_("Filename"), self.input_path)) self.list.append(getConfigListEntry(_("Title"), self.input_title)) self.list.append(getConfigListEntry(_("Description"), self.input_descr)) configlist.list = self.list configlist.l.setList(self.list) def keyGo(self): if self.input_path.value == self.path: self.path = False else: self.path = self.rejoinName(self.dir, self.input_path.value) if self.input_title.value == self.title: self.title = False else: self.title = self.input_title.value if self.input_descr.value == self.descr and self.descrChanged == False: self.descr = False else: self.descr = self.input_descr.value self.close((True, self.path, self.title, self.descr)) 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