actually burn and not just simulate burning to dvd-MINUS-r(w) media
[enigma2.git] / lib / python / Plugins / Extensions / DVDBurn / TitleList.py
index 51b242e79dffc55f09ca128da568a134f2515525..600411ce33775f50b409e6d7237d7ded4a757448 100644 (file)
@@ -1,19 +1,20 @@
-import DVDProject, TitleList, TitleCutter, ProjectSettings
+import DVDProject, TitleList, TitleCutter, 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.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.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
 
 from Components.Label import Label
 from enigma import eListboxPythonMultiContent, gFont, RT_HALIGN_LEFT
 from Tools.Directories import resolveFilename, SCOPE_PLUGINS
 
-class TitleList(Screen):
+class TitleList(Screen, HelpableScreen):
        skin = """
                <screen position="90,83" size="560,445" title="DVD Tool" >
                    <ePixmap pixmap="skin_default/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
        skin = """
                <screen position="90,83" size="560,445" title="DVD Tool" >
                    <ePixmap pixmap="skin_default/buttons/red.png" position="0,0" size="140,40" alphatest="on" />
@@ -35,6 +36,7 @@ class TitleList(Screen):
 
        def __init__(self, session, project = None):
                Screen.__init__(self, session)
 
        def __init__(self, session, project = None):
                Screen.__init__(self, session)
+               HelpableScreen.__init__(self)
                
                self["titleactions"] = HelpableActionMap(self, "DVDTitleList",
                        {
                
                self["titleactions"] = HelpableActionMap(self, "DVDTitleList",
                        {
@@ -72,21 +74,20 @@ class TitleList(Screen):
 
                self["titles"] = List(list = [ ], enableWrapAround = True, item_height=30, fonts = [gFont("Regular", 20)])
                self.updateTitleList()
 
                self["titles"] = List(list = [ ], enableWrapAround = True, item_height=30, fonts = [gFont("Regular", 20)])
                self.updateTitleList()
-                               
-               #self["addTitle"] = ActionButton("titleactions", "addTitle")
-               #self["editTitle"] = ActionButton("titleactions", "editTitle")
-               #self["removeCurrentTitle"] = ActionButton("titleactions", "removeCurrentTitle")
-               #self["saveProject"] = ActionButton("titleactions", "saveProject")
-               #self["burnProject"] = ActionButton("titleactions", "burnProject")
                
        def showMenu(self):
                menu = []
                
        def showMenu(self):
                menu = []
-               menu.append((_("Burn DVD"), "burn"));
+               if self.project.settings.output.getValue() == "dvd":
+                       menu.append((_("Burn DVD"), "burn"));
+               elif self.project.settings.output.getValue() == "iso":
+                       menu.append((_("Create DVD-ISO"), "burn"));
                menu.append((_("Preview menu"), "previewMenu"));
                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((_("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((_("Burn existing image to DVD"), "burniso"));
                menu.append((_("Exit"), "exit"));
                self.session.openWithCallback(self.menuCallback, ChoiceBox, title="", list=menu)
 
                menu.append((_("Exit"), "exit"));
                self.session.openWithCallback(self.menuCallback, ChoiceBox, title="", list=menu)
 
@@ -99,12 +100,16 @@ class TitleList(Screen):
                        self.addTitle()
                elif choice[1] == "edittitle":
                        self.editTitle()
                        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] == "settings":
                        self.settings()
                elif choice[1] == "previewMenu":
                        self.previewMenu()
                elif choice[1] == "burn":
                        self.burnProject()
+               elif choice[1] == "burniso":
+                       self.session.openWithCallback(self.burnISO, ProjectSettings.FileBrowser, "image", self.project.settings)
                elif choice[1] == "exit":
                        self.leave()
 
                elif choice[1] == "exit":
                        self.leave()
 
@@ -116,21 +121,44 @@ class TitleList(Screen):
 
        def addTitle(self):
                from Screens.MovieSelection import MovieSelection
 
        def addTitle(self):
                from Screens.MovieSelection import MovieSelection
+               from Components.Button import Button
+               from Components.ActionMap import HelpableActionMap
                class MovieSelectionNoMenu(MovieSelection):
                        def __init__(self, session):
                                MovieSelection.__init__(self, session)
                                self.skinName = "MovieSelection"
                class MovieSelectionNoMenu(MovieSelection):
                        def __init__(self, session):
                                MovieSelection.__init__(self, session)
                                self.skinName = "MovieSelection"
-
+                               self["key_red"] = Button(_("Edit title"))
+                               self["key_green"] = Button(_("Add"))
+                               self["ColorActions"] = HelpableActionMap(self, "ColorActions",
+                               {
+                                       "red": (self.movieSelected, _("Add a new title")),
+                                       "green": (self.insertWithoutEdit, ("insert without cutlist editor"))
+                               })
+                       def updateTags(self):
+                               pass
                        def doContext(self):
                                print "context menu forbidden inside DVDBurn to prevent calling multiple instances"
                        def doContext(self):
                                print "context menu forbidden inside DVDBurn to prevent calling multiple instances"
-                               
+                       def insertWithoutEdit(self):
+                               current = self.getCurrent()
+                               if current is not None:
+                                       current.edit = False
+                                       self.close(current)
+                       def movieSelected(self):
+                               current = self.getCurrent()
+                               if current is not None:
+                                       current.edit = True
+                                       self.close(current)
                self.session.openWithCallback(self.selectedSource, MovieSelectionNoMenu)
 
        def selectedSource(self, source):
                if source is None:
                        return None
                t = self.project.addService(source)
                self.session.openWithCallback(self.selectedSource, MovieSelectionNoMenu)
 
        def selectedSource(self, source):
                if source is None:
                        return None
                t = self.project.addService(source)
-               self.editTitle(t, readOnly=False)
+               try:
+                       editor = source.edit
+               except AttributeError:
+                       editor = True
+               self.editTitle(t, editor)
 
        def removeCurrentTitle(self):
                title = self.getCurrentTitle()
 
        def removeCurrentTitle(self):
                title = self.getCurrentTitle()
@@ -141,6 +169,9 @@ class TitleList(Screen):
                        self.project.titles.remove(title)
                        self.updateTitleList()
 
                        self.project.titles.remove(title)
                        self.updateTitleList()
 
+       def toolbox(self):
+               self.session.open(DVDToolbox.DVDToolbox)
+
        def settings(self):
                self.session.openWithCallback(self.settingsCB, ProjectSettings.ProjectSettings, self.project)
 
        def settings(self):
                self.session.openWithCallback(self.settingsCB, ProjectSettings.ProjectSettings, self.project)
 
@@ -157,29 +188,38 @@ class TitleList(Screen):
                else:
                        self["error_label"].text = self.project.error
                        self["error_label"].show()
                else:
                        self["error_label"].text = self.project.error
                        self["error_label"].show()
-                       print self.project.error
                        return False
 
        def burnProject(self):
                if self.project.settings.authormode.getValue() == "data_ts":
                        return False
 
        def burnProject(self):
                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)
                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):
+               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
        def updateTitleList(self):
                res = [ ]
                totalsize = 0
@@ -211,14 +251,14 @@ class TitleList(Screen):
                t = self["titles"].getCurrent()
                return t and t[0]
 
                t = self["titles"].getCurrent()
                return t and t[0]
 
-       def editTitle(self, title = None, readOnly = False):
+       def editTitle(self, title = None, editor = True):
                t = title or self.getCurrentTitle()
                if t is not None:
                        self.current_edit_title = t
                t = title or self.getCurrentTitle()
                if t is not None:
                        self.current_edit_title = t
-                       if readOnly:
-                               self.session.openWithCallback(self.titleEditDone, TitleCutter.CutlistReader, t)
-                       else:
+                       if editor:
                                self.session.openWithCallback(self.titleEditDone, TitleCutter.TitleCutter, t)
                                self.session.openWithCallback(self.titleEditDone, TitleCutter.TitleCutter, t)
+                       else:
+                               self.session.openWithCallback(self.titleEditDone, TitleCutter.CutlistReader, t)
 
        def titleEditDone(self, cutlist):
                t = self.current_edit_title
 
        def titleEditDone(self, cutlist):
                t = self.current_edit_title