+
from Tools.Directories import fileExists
from Components.config import config, ConfigSubsection, ConfigInteger, ConfigYesNo, ConfigText, ConfigSelection, getConfigListEntry, ConfigSequence
def __init__(self):
ConfigSequence.__init__(self, seperator = ",", limits = [(0,200),(0,200),(0,200)])
+class ConfigPixelvals(ConfigSequence):
+ def __init__(self):
+ ConfigSequence.__init__(self, seperator = ",", limits = [(0,200),(0,200),(0,200)])
+
+class ConfigFilename(ConfigText):
+ def __init__(self):
+ ConfigText.__init__(self, default = "", fixed_size = True, visible_width = False)
+
+ def getMulti(self, selected):
+ filename = (self.text.rstrip("/").rsplit("/",1))[1].encode("utf-8")[:40] + " "
+ print "ConfigFilename =", filename
+ if self.allmarked:
+ mark = range(0, len(filename))
+ else:
+ mark = [filename]
+ return ("mtext"[1-selected:], filename, mark)
+
class DVDProject:
def __init__(self):
self.titles = [ ]
self.target = None
self.settings = ConfigSubsection()
- self.settings.name = ConfigText(visible_width = 40)
+ self.settings.name = ConfigText(fixed_size = False, 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.menubg = ConfigFilename()
+ self.settings.menuaudio = ConfigFilename()
+ self.settings.titleformat = ConfigText(fixed_size = False, visible_width = 40)
+ self.settings.subtitleformat = ConfigText(fixed_size = False, 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_face = ConfigFilename()
self.settings.font_size = ConfigPixelvals()
self.settings.space = ConfigPixelvals()
- self.settings.vmgm = ConfigText(visible_width = 40)
+ self.settings.vmgm = ConfigFilename()
self.settings.autochapter = ConfigInteger(default = 0, limits = (0, 99))
self.filekeys = ["vmgm", "menubg", "menuaudio", "font_face"]
--- /dev/null
+<?xml version="1.0" encoding="utf-8" ?>
+<DreamDVDBurnerProject>
+ <settings
+ name="Dreambox DVD record"
+ authormode="linked_nomenu"
+ titleformat="$i. $t"
+ subtitleformat="$D.$M.$Y, $T $C, $d ($c chapters)"
+ vmgm="/usr/lib/enigma2/python/Plugins/Extensions/DVDBurn/vmgmdream.mpg"
+ menubg="/usr/lib/enigma2/python/Plugins/Extensions/DVDBurn/dreamdvd_boat.jpg"
+ menuaudio="/usr/lib/enigma2/python/Plugins/Extensions/DVDBurn/silence.mp2"
+ color_button="[8, 0, 0]"
+ color_highlight="[0, 192, 192]"
+ color_headline="[0, 0, 128]"
+ font_face="/usr/share/fonts/nmsbd.ttf"
+ font_size="[48, 28, 16]"
+ space="[120, 36, 30]" />
+ <titles> </titles>
+</DreamDVDBurnerProject>
plugin.py \
DVDProject.py DVDTitle.py TitleCutter.py TitleList.py Process.py ProjectSettings.py
-install_DATA = keymap.xml
+install_DATA = *.xml *.jpg *.mpg *.mp2
-SUBDIRS = data template
template = template.replace("$t", title.name)
template = template.replace("$d", title.descr)
template = template.replace("$c", str(len(title.chaptermarks)+1))
+ template = template.replace("$A", str(title.audiotracks))
template = template.replace("$f", title.inputfile)
template = template.replace("$C", title.channel)
l = title.length
authorxml.append(' <titles>\n')
for i in range( nr_titles ):
for audiotrack in job.project.titles[i].audiotracks:
- authorxml.append(' <audio format="'+audiotrack[0]+'" lang="'+audiotrack[1]+'" />\n')
+ authorxml.append(' <audio lang="'+audiotrack[0][:2]+'" format="'+audiotrack[1]+'" />\n')
chapters = ','.join(["%d:%02d:%02d.%03d" % (p / (90000 * 3600), p % (90000 * 3600) / (90000 * 60), p % (90000 * 60) / 90000, (p % 90000) / 90) for p in job.project.titles[i].chaptermarks])
title_no = i+1
title_filename = job.workspace + "/dvd_title_%d.mpg" % (title_no)
from Components.Sources.Progress import Progress
from Components.FileList import FileList
from enigma import eListboxPythonMultiContent, gFont, RT_HALIGN_LEFT
-from Tools.Directories import resolveFilename, SCOPE_PLAYLIST, SCOPE_SKIN, SCOPE_FONTS
+from Tools.Directories import resolveFilename, SCOPE_PLUGINS, SCOPE_FONTS
from Components.config import config, getConfigListEntry
from Components.ConfigList import ConfigListScreen
pattern = ""
currDir = "/"
if self.scope == "project":
- currDir = resolveFilename(SCOPE_PLAYLIST)
+ currDir = self.getDir()
pattern = "(?i)^.*\.(ddvdp\.xml)"
if self.scope == "menubg":
- currDir = self.getDir(settings.menubg, resolveFilename(SCOPE_SKIN))
+ currDir = self.getDir(settings.menubg)
pattern = "(?i)^.*\.(jpeg|jpg|jpe|png|bmp)"
elif self.scope == "menuaudio":
- currDir = self.getDir(settings.menuaudio, resolveFilename(SCOPE_SKIN))
+ currDir = self.getDir(settings.menuaudio)
pattern = "(?i)^.*\.(mp2|m2a|ac3)"
elif self.scope == "vmgm":
- currDir = self.getDir(settings.vmgm, resolveFilename(SCOPE_SKIN))
+ currDir = self.getDir(settings.vmgm)
pattern = "(?i)^.*\.(mpg|mpeg)"
elif self.scope == "font_face":
currDir = self.getDir(settings.font_face, resolveFilename(SCOPE_FONTS))
"cancel": self.exit
})
- def getDir(self, key, defaultDir):
- settingDir = key.getValue()
- if len(settingDir) > 1:
- return (settingDir.rstrip("/").rsplit("/",1))[0]
- else:
- return defaultDir
+ def getDir(self, key=None, defaultDir=None):
+ if key:
+ settingDir = key.getValue()
+ if len(settingDir) > 1:
+ return (settingDir.rstrip("/").rsplit("/",1))[0]
+ return defaultDir or (resolveFilename(SCOPE_PLUGINS)+"Extensions/DVDBurn/")
def ok(self):
if self.filelist.canDescent():
self["key_yellow"] = StaticText(_("Load"))
self["key_blue"] = StaticText(_("Save"))
- infotext = _("Available format variables") + ":\n%i=" + _("Track") + ", %t=" + _("Title") + ", %d=" + _("Description") + ", %l=" + _("length") + ", %c=" + _("chapters") + ",\n" + _("Record") + " %T=" + _("Begin time") + ", %Y=" + _("year") + ", %M=" + _("month") + ", %D=" + _("day") + ",\n%C=" + _("Channel") + ", %f=" + _("filename")
+ infotext = _("Available format variables") + ":\n$i=" + _("Track") + ", $t=" + _("Title") + ", $d=" + _("Description") + ", $l=" + _("length") + ", $c=" + _("chapters") + ",\n" + _("Record") + " $T=" + _("Begin time") + ", $Y=" + _("year") + ", $M=" + _("month") + ", $D=" + _("day") + ",\n$A=" + _("audio tracks") + ", $C=" + _("Channel") + ", $f=" + _("filename")
self["info"] = StaticText(infotext)
self.settings = project.settings
from Plugins.Extensions.CutListEditor.plugin import CutListEditor
from Components.ServiceEventTracker import ServiceEventTracker
+from enigma import iPlayableService
class TitleCutter(CutListEditor):
def __init__(self, session, t):
if n > 0:
for x in range(n):
i = audio.getTrackInfo(x)
- language = i.getLanguage()[:2]
+ language = i.getLanguage()
description = i.getDescription()
if description == "MPEG":
- description = "mp2"
- self.t.audiotracks.append((description, language))
+ description = "MP2"
+ self.t.audiotracks.append((language, description))
print "audiotracks", self.t.audiotracks
def exit(self):
from Components.FileList import FileList
from Components.Label import Label
from enigma import eListboxPythonMultiContent, gFont, RT_HALIGN_LEFT
-from Tools.Directories import resolveFilename, SCOPE_PLAYLIST
+from Tools.Directories import resolveFilename, SCOPE_PLUGINS
class TitleList(Screen):
skin = """
if source is None:
return None
t = self.project.addService(source)
- self.editTitle(t, readOnly=True)
+ self.editTitle(t, readOnly=False)
def removeCurrentTitle(self):
title = self.getCurrentTitle()
self["title_label"].text = _("Table of content for collection") + " \"" + self.project.settings.name.getValue() + "\":"
def loadTemplate(self):
- filename = resolveFilename(SCOPE_PLAYLIST)+"DreamboxDVDtemplate.ddvdp.xml"
+ filename = resolveFilename(SCOPE_PLUGINS)+"Extensions/DVDBurn/DreamboxDVDtemplate.ddvdp.xml"
if self.project.loadProject(filename):
self["error_label"].hide()
return True