X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/87372cbc59371c6d8b8e5dc4f77d1c84fef3423e..519da68556638c7502a4f679f859e6032e258421:/lib/python/Plugins/Extensions/DVDBurn/TitleList.py diff --git a/lib/python/Plugins/Extensions/DVDBurn/TitleList.py b/lib/python/Plugins/Extensions/DVDBurn/TitleList.py index 3a732115..fd4c7134 100644 --- a/lib/python/Plugins/Extensions/DVDBurn/TitleList.py +++ b/lib/python/Plugins/Extensions/DVDBurn/TitleList.py @@ -1,14 +1,15 @@ -import DVDProject, TitleList, TitleCutter, ProjectSettings, DVDToolbox +import DVDProject, TitleList, TitleCutter, TitleProperties, ProjectSettings, DVDToolbox, Process from Screens.Screen import Screen from Screens.ChoiceBox import ChoiceBox from Screens.InputBox import InputBox from Screens.MessageBox import MessageBox from Screens.HelpMenu import HelpableScreen +from Screens.TaskView import JobView +from Components.Task import job_manager from Components.ActionMap import HelpableActionMap, ActionMap from Components.Sources.List import List from Components.Sources.StaticText import StaticText from Components.Sources.Progress import Progress -from Components.FileList import FileList from Components.Label import Label from enigma import eListboxPythonMultiContent, gFont, RT_HALIGN_LEFT from Tools.Directories import resolveFilename, SCOPE_PLUGINS @@ -40,10 +41,10 @@ class TitleList(Screen, HelpableScreen): self["titleactions"] = HelpableActionMap(self, "DVDTitleList", { "addTitle": (self.addTitle, _("Add a new title"), _("Add title")), - "editTitle": (self.editTitle, _("Edit chapters of current title"), _("Edit title")), + "titleProperties": (self.titleProperties, _("Properties of current title"), _("Title properties")), "removeCurrentTitle": (self.removeCurrentTitle, _("Remove currently selected title"), _("Remove title")), "settings": (self.settings, _("Collection settings"), _("Settings")), - "burnProject": (self.burnProject, _("Burn DVD"), _("Burn DVD")), + "burnProject": (self.askBurnProject, _("Burn DVD"), _("Burn DVD")), }) self["MovieSelectionActions"] = HelpableActionMap(self, "MovieSelectionActions", @@ -56,9 +57,9 @@ class TitleList(Screen, HelpableScreen): "cancel": self.leave }) - self["key_red"] = StaticText(_("Remove title")) + self["key_red"] = StaticText() self["key_green"] = StaticText(_("Add title")) - self["key_yellow"] = StaticText(_("Edit title")) + self["key_yellow"] = StaticText() self["key_blue"] = StaticText(_("Settings")) self["title_label"] = StaticText() @@ -73,38 +74,51 @@ class TitleList(Screen, HelpableScreen): self["titles"] = List(list = [ ], enableWrapAround = True, item_height=30, fonts = [gFont("Regular", 20)]) self.updateTitleList() - + self.previous_size = 0 + + def checkBackgroundJobs(self): + for job in job_manager.getPendingJobs(): + print "type(job):", type(job) + print "Process.DVDJob:", Process.DVDJob + if type(job) == Process.DVDJob: + self.backgroundJob = job + return + self.backgroundJob = None + def showMenu(self): menu = [] - menu.append((_("Burn DVD"), "burn")); - menu.append((_("Preview menu"), "previewMenu")); - menu.append((_("DVD media toolbox"), "toolbox")); - menu.append((_("Collection settings"), "settings")); - menu.append((_("Add a new title"), "addtitle")); - menu.append((_("Remove title"), "removetitle")); - menu.append((_("Edit chapters of current title"), "edittitle")); - menu.append((_("Exit"), "exit")); + self.checkBackgroundJobs() + if self.backgroundJob: + j = self.backgroundJob + menu.append(("%s: %s (%d%%)" % (j.getStatustext(), j.name, int(100*j.progress/float(j.end))), self.showBackgroundJob)) + menu.append((_("DVD media toolbox"), self.toolbox)) + menu.append((_("Preview menu"), self.previewMenu)) + if self.project.settings.output.getValue() == "dvd": + if len(self["titles"].list): + menu.append((_("Burn DVD"), self.burnProject)) + elif self.project.settings.output.getValue() == "iso": + menu.append((_("Create DVD-ISO"), self.burnProject)) + menu.append((_("Burn existing image to DVD"), self.selectImage)) + menu.append((_("Edit chapters of current title"), self.editTitle)) + menu.append((_("Reset and renumerate title names"), self.resetTitles)) + menu.append((_("Exit"), self.leave)) self.session.openWithCallback(self.menuCallback, ChoiceBox, title="", list=menu) def menuCallback(self, choice): - if choice is None: - return - if choice[1] == "removetitle": - self.removeCurrentTitle() - elif choice[1] == "addtitle": - self.addTitle() - elif choice[1] == "edittitle": - self.editTitle() - elif choice[1] == "toolbox": - self.toolbox() - elif choice[1] == "settings": - self.settings() - elif choice[1] == "previewMenu": - self.previewMenu() - elif choice[1] == "burn": - self.burnProject() - elif choice[1] == "exit": - self.leave() + if choice: + choice[1]() + + def showBackgroundJob(self): + job_manager.in_background = False + self.session.openWithCallback(self.JobViewCB, JobView, self.backgroundJob) + self.backgroundJob = None + + def titleProperties(self): + if self.getCurrentTitle(): + self.session.openWithCallback(self.updateTitleList, TitleProperties.TitleProperties, self, self.project, self["titles"].getIndex()) + + def selectImage(self): + self.session.openWithCallback(self.burnISO, ProjectSettings.FileBrowser, "image", self.project.settings) def newProject(self): self.project = DVDProject.DVDProject() @@ -163,7 +177,7 @@ class TitleList(Screen, HelpableScreen): self.updateTitleList() def toolbox(self): - self.session.open(DVDToolbox.DVDToolbox, self.project) + self.session.open(DVDToolbox.DVDToolbox) def settings(self): self.session.openWithCallback(self.settingsCB, ProjectSettings.ProjectSettings, self.project) @@ -174,8 +188,8 @@ class TitleList(Screen, HelpableScreen): self["title_label"].text = _("Table of content for collection") + " \"" + self.project.settings.name.getValue() + "\":" def loadTemplate(self): - filename = resolveFilename(SCOPE_PLUGINS)+"Extensions/DVDBurn/DreamboxDVDtemplate.ddvdp.xml" - if self.project.loadProject(filename): + filename = resolveFilename(SCOPE_PLUGINS)+"Extensions/DVDBurn/DreamboxDVD.ddvdp.xml" + if self.project.load(filename): self["error_label"].hide() return True else: @@ -183,36 +197,55 @@ class TitleList(Screen, HelpableScreen): self["error_label"].show() return False - def burnProject(self): + def askBurnProject(self): + if len(self["titles"].list): + self.session.openWithCallback(self.burnProject,MessageBox,text = _("Do you want to burn this collection to DVD medium?"), type = MessageBox.TYPE_YESNO) + + def burnProject(self, answer=True): + if not answer: + return if self.project.settings.authormode.getValue() == "data_ts": - import Process - job = Process.BurnDataTS(self.session, self.project) - from Screens.TaskView import JobView - self.session.open(JobView, job) + job = Process.DVDdataJob(self.project) + job_manager.AddJob(job) + job_manager.in_background = False + self.session.openWithCallback(self.JobViewCB, JobView, job) else: - autochapter = self.project.settings.autochapter.getValue() - if autochapter > 0: - for title in self.project.titles: - title.produceAutoChapter(autochapter) - import Process - job = Process.Burn(self.session, self.project) - from Screens.TaskView import JobView - self.session.open(JobView, job) + job = Process.DVDJob(self.project) + job_manager.AddJob(job) + job_manager.in_background = False + self.session.openWithCallback(self.JobViewCB, JobView, job) - def previewMenu(self): - import Process - job = Process.PreviewMenu(self.session, self.project) + def burnISO(self, path, scope, configRef): + if path: + job = Process.DVDisoJob(self.project, path) + job_manager.AddJob(job) + job_manager.in_background = False + self.session.openWithCallback(self.JobViewCB, JobView, job) + def JobViewCB(self, in_background): + job_manager.in_background = in_background + + def previewMenu(self): + job = Process.DVDJob(self.project, menupreview=True) + job_manager.in_background = False + job_manager.AddJob(job) + def updateTitleList(self): res = [ ] totalsize = 0 for title in self.project.titles: - a = [ title, (eListboxPythonMultiContent.TYPE_TEXT, 0, 10, 500, 50, 0, RT_HALIGN_LEFT, title.name) ] + a = [ title, (eListboxPythonMultiContent.TYPE_TEXT, 0, 5, 500, 25, 0, RT_HALIGN_LEFT, title.properties.menutitle.getValue()) ] res.append(a) totalsize += title.estimatedDiskspace self["titles"].list = res self.updateSize(totalsize) - + if len(res): + self["key_red"].text = _("Remove title") + self["key_yellow"].text = _("Title properties") + else: + self["key_red"].text = "" + self["key_yellow"].text = "" + def updateSize(self, totalsize): size = int((totalsize/1024)/1024) max_SL = 4370 @@ -221,14 +254,19 @@ class TitleList(Screen, HelpableScreen): percent = 100 * size / float(max_DL) self["space_label"].text = "%d MB - " % size + _("exceeds dual layer medium!") + " (%.2f%% " % (100-percent) + _("free") + ")" self["space_bar"].value = int(percent) + if self.previous_size < max_DL: + self.session.open(MessageBox,text = _("exceeds dual layer medium!"), type = MessageBox.TYPE_ERROR) elif size > max_SL: percent = 100 * size / float(max_DL) self["space_label"].text = "%d MB " % size + _("of a DUAL layer medium used.") + " (%.2f%% " % (100-percent) + _("free") + ")" self["space_bar"].value = int(percent) + if self.previous_size < max_SL: + self.session.open(MessageBox,text = _("Your collection exceeds the size of a single layer medium, you will need a blank dual layer DVD!"), type = MessageBox.TYPE_INFO) elif size < max_SL: percent = 100 * size / float(max_SL) self["space_label"].text = "%d MB " % size + _("of a SINGLE layer medium used.") + " (%.2f%% " % (100-percent) + _("free") + ")" self["space_bar"].value = int(percent) + self.previous_size = size def getCurrentTitle(self): t = self["titles"].getCurrent() @@ -245,13 +283,21 @@ class TitleList(Screen, HelpableScreen): def titleEditDone(self, cutlist): t = self.current_edit_title + t.initDVDmenuText(self.project,len(self.project.titles)) t.cuesheet = cutlist t.produceFinalCuesheet() - if t.sVideoType != 0: + if t.VideoType != 0: self.session.openWithCallback(self.DVDformatCB,MessageBox,text = _("The DVD standard doesn't support H.264 (HDTV) video streams. Do you want to create a Dreambox format data DVD (which will not play in stand-alone DVD players) instead?"), type = MessageBox.TYPE_YESNO) else: self.updateTitleList() + def resetTitles(self): + count = 0 + for title in self.project.titles: + count += 1 + title.initDVDmenuText(self.project,count) + self.updateTitleList() + def DVDformatCB(self, answer): t = self.current_edit_title if answer == True: