I needed a function to automatically fill the description with text from the extended description because some senders do not send a correct description for the events.
if description is empty and extended Description contains <'> then the description is replaced by the part of the extended description between the two ' ' characters.
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 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()
+ self.descrChanged = False
if self.path.endswith(".ts") is True:
self.path = self.path[:-3]
self.name = info.getName(self.service)
self.descr = info.getInfoString(self.service, iServiceInformation.sDescription)
+ if self.descr == "":
+ event = info.getEvent(self.service)
+ 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.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 = """
<screen name="TitleDescrInput" position="100,150" size="500,200" title="Name and Description Input">
<widget name="config" position="5,10" size="480,150" />
<widget name="ok" position="110,165" size="53,30" pixmap="ok.png" />
<widget name="oktext" position="110,165" size="53,30" valign="center" halign="center" zPosition="2" font="Regular;20" transparent="1" />
<widget name="cancel" position="310,165" size="100,30" pixmap="cancel.png" />
<widget name="canceltext" position="310,165" size="100,30" valign="center" halign="center" zPosition="2" font="Regular;20" transparent="1" />
</screen>"""
- def __init__(self, session, name, path, descr):
+ 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:
+ 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
Alles anzeigen
Probably you find it usefull for changes in future.
But be careful: There is no error- handling in this code at the moment. Whenever there is no ' in the text it will crash enigma. I will fix that when I am back at home.
regards
Tode