diff options
| author | Andreas Frisch <andreas.frisch@multimedia-labs.de> | 2008-09-05 16:46:08 +0000 |
|---|---|---|
| committer | Andreas Frisch <andreas.frisch@multimedia-labs.de> | 2008-09-05 16:46:08 +0000 |
| commit | 3728486e40b02d9d316a7491d2b7b1e3577c1872 (patch) | |
| tree | af02d3c839e9b6a364f66171ac7d4f27da59fca7 /lib/python/Plugins/Extensions/DVDBurn/DVDProject.py | |
| parent | 3c066dfc061d51c59caf201e302cfb2301b5f0f7 (diff) | |
| download | enigma2-3728486e40b02d9d316a7491d2b7b1e3577c1872.tar.gz enigma2-3728486e40b02d9d316a7491d2b7b1e3577c1872.zip | |
introduce a collection settings screen, delivery of template and menu source files
Diffstat (limited to 'lib/python/Plugins/Extensions/DVDBurn/DVDProject.py')
| -rw-r--r-- | lib/python/Plugins/Extensions/DVDBurn/DVDProject.py | 150 |
1 files changed, 77 insertions, 73 deletions
diff --git a/lib/python/Plugins/Extensions/DVDBurn/DVDProject.py b/lib/python/Plugins/Extensions/DVDBurn/DVDProject.py index fe09642b..9ee3bdb9 100644 --- a/lib/python/Plugins/Extensions/DVDBurn/DVDProject.py +++ b/lib/python/Plugins/Extensions/DVDBurn/DVDProject.py @@ -1,9 +1,32 @@ from Tools.Directories import fileExists +from Components.config import config, ConfigSubsection, ConfigInteger, ConfigYesNo, ConfigText, ConfigSelection, getConfigListEntry, ConfigSequence + +class ConfigColor(ConfigSequence): + def __init__(self): + ConfigSequence.__init__(self, seperator = "#", limits = [(0,255),(0,255),(0,255)]) + +class ConfigPixelvals(ConfigSequence): + def __init__(self): + ConfigSequence.__init__(self, seperator = ",", limits = [(0,200),(0,200),(0,200)]) class DVDProject: def __init__(self): self.titles = [ ] self.target = None + self.settings = ConfigSubsection() + self.settings.name = ConfigText(visible_width = 40) + self.settings.authormode = ConfigSelection(choices = [("menu_linked", _("Linked titles with a DVD menu")), ("just_linked", _("Direct playback of linked titles without menu")), ("menu_seperate", _("Seperate titles with a main menu")), ]) + self.settings.menubg = ConfigText(visible_width = 40) + self.settings.menuaudio = ConfigText(visible_width = 40) + self.settings.titleformat = ConfigText(visible_width = 40) + self.settings.subtitleformat = ConfigText(visible_width = 40) + self.settings.color_headline = ConfigColor() + self.settings.color_highlight = ConfigColor() + self.settings.color_button = ConfigColor() + self.settings.font_face = ConfigText(visible_width = 40) + self.settings.font_size = ConfigPixelvals() + self.settings.space = ConfigPixelvals() + self.settings.vmgm = ConfigText(visible_width = 40) def addService(self, service): import DVDTitle @@ -18,26 +41,11 @@ class DVDProject: list = [] list.append('<?xml version="1.0" encoding="utf-8" ?>\n') list.append('<DreamDVDBurnerProject>\n') - list.append('\t<project') - list.append(' name="' + self.name + '"') - list.append(' vmgm="' + self.vmgm + '"') - list.append(' />\n') - list.append('\t<menu') - list.append('\tuse="' + str(self.menu) + '"\n') - list.append('\tbg="' + self.menubg + '"\n') - list.append('\t\taudio="' + self.menuaudio + '"\n') - list.append('\t\tcolor_button="' + str(self.color_button) + '"\n') - list.append('\t\tcolor_highlight="' + str(self.color_highlight) + '"\n') - list.append('\t\tcolor_headline="' + str(self.color_headline) + '"\n') - list.append('\t\tfont_face="' + self.font_face + '"\n') - list.append('\t\tfont_size="' + str(self.font_size) + '"\n') - list.append('\t\tspace_left="' + str(self.space_left) + '"\n') - list.append('\t\tspace_top="' + str(self.space_top) + '"\n') - list.append('\t\tspace_rows="' + str(self.space_rows) + '"') - list.append(' />\n') - list.append('\t<titles') - list.append(' link="' + str(self.linktitles) + '"') - list.append(' />\n') + list.append('\t<settings ') + for key, val in self.settings.dict().iteritems(): + list.append( key + '="' + str(val.getValue()) + '" ' ) + list.append(' />\n') + list.append('\t<titles>\n') for title in self.titles: list.append('\t\t<path>') list.append(stringToXML(title.source.getPath())) @@ -45,65 +53,61 @@ class DVDProject: list.append('\t</titles>\n') list.append('</DreamDVDBurnerProject>\n') + name = self.settings.name.getValue() i = 0 - filename = path + "/" + self.name + ".ddvdp.xml" + filename = path + name + ".ddvdp.xml" while fileExists(filename): i = i+1 - filename = path + "/" + self.name + str(i).zfill(3) + ".ddvdp.xml" - - file = open(filename, "w") - for x in list: - file.write(x) - file.close() + filename = path + name + str(i).zfill(3) + ".ddvdp.xml" + try: + file = open(filename, "w") + for x in list: + file.write(x) + file.close() + except: + return False + return filename def loadProject(self, filename): import xml.dom.minidom - print "[loadProject]", filename try: - if not fileExists(filename): - self.error = "file not found!" - raise AttributeError - else: - self.error = "" - file = open(filename, "r") - data = file.read().decode("utf-8").replace('&',"&").encode("ascii",'xmlcharrefreplace') - file.close() - projectfiledom = xml.dom.minidom.parseString(data) - for project in projectfiledom.childNodes[0].childNodes: - if project.nodeType == xml.dom.minidom.Element.nodeType: - if project.tagName == 'project': - self.name = project.getAttribute("name").encode("utf-8") - self.vmgm = project.getAttribute("vmgm").encode("utf-8") - if project.tagName == 'menu': - self.menu = eval(project.getAttribute("use")) - self.menubg = project.getAttribute("bg").encode("utf-8") - self.menuaudio = project.getAttribute("audio").encode("utf-8") - # tuples with R, G, B values - self.color_button = eval(project.getAttribute("color_button")) - self.color_highlight = eval(project.getAttribute("color_highlight")) - self.color_headline = eval(project.getAttribute("color_headline")) - self.font_face = project.getAttribute("font_face").encode("utf-8") - # tuple with three pixel sizes ( headline, title, subtitle ) - self.font_size = eval(project.getAttribute("font_size")) - # please supply even numbers for all dimensions - self.space_left = int(project.getAttribute("space_left")) - self.space_top = int(project.getAttribute("space_top")) - self.space_rows = int(project.getAttribute("space_rows")) - if project.tagName == 'titles': - self.linktitles = eval(project.getAttribute("link")) - if not fileExists(self.vmgm): - self.error += "\nvmgm '%s' not found" % self.vmgm - if not fileExists(self.menubg): - self.error += "\nmenu background '%s' not found" % self.menubg - if not fileExists(self.menuaudio): - self.error += "\nmenu audio '%s' not found" % self.menuaudio - if not fileExists(self.font_face): - self.error += "\nmenu font '%s' not found" % self.font_face - print "len(self.error):", len(self.error) - if len(self.error): - raise AttributeError - except: - print "len(self.error):, error", len(self.error), len(self.error) - self.error = ("error parsing project xml file '%s'" % filename) + self.error + if not fileExists(filename): + self.error = "xml file not found!" + raise AttributeError + else: + self.error = "" + file = open(filename, "r") + data = file.read().decode("utf-8").replace('&',"&").encode("ascii",'xmlcharrefreplace') + file.close() + projectfiledom = xml.dom.minidom.parseString(data) + for project in projectfiledom.childNodes[0].childNodes: + if project.nodeType == xml.dom.minidom.Element.nodeType: + if project.tagName == 'settings': + i = 0 + if project.attributes.length < 11: + self.error = "project attributes missing" + raise AttributeError + while i < project.attributes.length: + item = project.attributes.item(i) + key = item.name.encode("utf-8") + try: + val = eval(item.nodeValue) + except (NameError, SyntaxError): + val = item.nodeValue.encode("utf-8") + try: + self.settings.dict()[key].setValue(val) + except (KeyError): + self.error = "unknown attribute '%s'" % (key) + raise AttributeError + i += 1 + checkfiles = ["vmgm", "menubg", "menuaudio", "font_face"] + for key in checkfiles: + val = self.settings.dict()[key].getValue() + if not fileExists(val): + self.error += "\n%s '%s' not found" % (key, val) + if len(self.error): + raise AttributeError + except AttributeError: + self.error += (" in project '%s'") % (filename) return False return True |
