1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
|
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)
self.settings.autochapter = ConfigInteger(default = 0, limits = (0, 99))
self.filekeys = ["vmgm", "menubg", "menuaudio", "font_face"]
def addService(self, service):
import DVDTitle
title = DVDTitle.DVDTitle()
title.addService(service)
self.titles.append(title)
return title
def saveProject(self, path):
import xml.dom.minidom
from Tools.XMLTools import elementsWithTag, mergeText, stringToXML
list = []
list.append('<?xml version="1.0" encoding="utf-8" ?>\n')
list.append('<DreamDVDBurnerProject>\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()))
list.append('</path>\n')
list.append('\t</titles>\n')
list.append('</DreamDVDBurnerProject>\n')
name = self.settings.name.getValue()
i = 0
filename = path + name + ".ddvdp.xml"
while fileExists(filename):
i = i+1
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
try:
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
for key in self.filekeys:
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
|