--- cd_burn.py	2004-07-30 23:17:35.472401745 +0800
+++ cd_burn_mick.py	2004-07-30 03:18:23.000000000 +0800
@@ -16,6 +16,7 @@
 import threading
 import re
 import shutil
+import popen2
 
 import config
 import menu
@@ -34,10 +35,12 @@
 import glob
 import config
 
+from time import sleep
+
 from gui.PopupBox import PopupBox
 from gui.ConfirmBox import ConfirmBox
 from gui.AlertBox import AlertBox
-from gui.YesNoBox import YesNoBox
+#from gui.YesNoBox import YesNoBox
 
 class BurnCDItem:
     def __init__(self,item,filename=None,plugin=None):
@@ -162,22 +165,108 @@
                 print '     extension ' + ext
                 self.files.append(k)
 
+class BurnDVDItem:
+    def __init__(self,item,filename=None,plugin=None):
+        self.item          = item
+	self.menuw         = None
+	self.plugin        = plugin 
+	self.files         = []
+	self.volume_name   = None
+	self.burn_as_audio = 0
+    
+    def copy_to_dvd_video(self, arg=None, menuw=None):
+        """
+        copy this DIR to DVD as DVD VIDEO, NB: MUST BE DVD VIDEO ALREADY!!!!!!! (ie ripped with dvdcopy.py)
+        """
+	if len(self.files) > 1:
+	    print "error to many objects for DVD-VIDEO Burn"
+	    return
+        name  = self.files[0].split("/")
+	self.name  = name[len(name) -1]
+        print self.name
+	dir = self.files[0]
+	self.dir = dir + "/"
+	print self.dir
+	for f in os.listdir(self.dir):
+	    pathname = os.path.join(self.dir, f)
+	    print pathname[-3:]
+	    if pathname[-3:].lower() == '_ts':
+	        print 'would not delete %s' %pathname
+		self.file_to_delete = None
+	    else:
+	        print 'would delete %s' % pathname
+		#self.file_to_delete.append(pathname)
+		self.file_to_delete = pathname
+			 
+        if self.file_to_delete: 
+	    ConfirmBox(text=_('Delete %s?' % self.file_to_delete ),
+	                     handler=self.delete_now, default_choice=0).show()
+        else:
+	    ConfirmBox(text=_('Insert blank media then click OK'),
+	                     handler=self.write_dvd_video, default_choice=0
+	                     ).show()
+	return
+
+    def write_dvd_video(self, arg=None, menuw=None):
+        """
+	time to write the to disk..
+        """
+
+	self.burn_cmd = 'growisofs -dvd-compat -Z /dev/dvd -V %s -dvd-video %s' % (self.name,self.dir)
+	print self.burn_cmd
+
+        self.thread_burn   = main_burn_thread(token=self)
+	self.thread_burn.run()
+
+        return
+    
+    def delete_now (self, arg=None, menuw=None):
+	for a in self.files_to_delete:
+	    try:
+	        mode = os.stat(a)[ST_MODE]
+		if S_ISDIR(mode):
+		    try:
+		        shutil.rmtree(a)
+		    except:
+	                rc.post_event(Event(OSD_MESSAGE, arg=_('Error, unable to delete dir %s' % a)))
+	       	        print "unable to delete tree %s" %a
+	        elif S_ISREG(mode):
+		    try:
+		        os.unlink(a)
+		    except:
+	                rc.post_event(Event(OSD_MESSAGE, arg=_('Error, unable to delete file %s' % a)))
+			print "unable to delete file %s" %a
+	    except:
+	        pass
+	self.copy_to_dvd_video()
+	
+
+    def findFileFromItem (self) :
+	if self.item.filename:
+		self.volume_name = self.item.name
+		self.files.append(self.item.filename)
+
 class main_burn_thread(threading.Thread):
     def __init__(self, token=None):
         threading.Thread.__init__(self)
 	self.token = token
 	self.running = 0
 	self.status = ""
+	self.childs = []
 
 
     def run(self, arg=None, menuw=None, token=None):
-	self.running = 1
-	self.status = "Creating disc image"
-	print "start buring"
-
         """
         copy files into a CD
+
+	Note: Code needs to be changed to use popen and
+	popen needs patch as per http://www.michaux.homelinux.org/freevo/dvdcopy
+	for burn_stop and burn_status to work
 	"""
+	self.running = True
+	self.status = "Creating disc image"
+	print "start buring"
+
 	if not self.token.volume_name:
 		self.token.volume_name = self.item.type
 
@@ -193,12 +282,47 @@
         #The device used on the SCSI-BUS (cdrecord -scanbus should show you)
         block_dev = 'ATAPI:0,0,0'
 
-        os.system('mkisofs -f -U -V "%s" -o %s %s' % (self.token.volume_name,temp_file,"/tmp/burnlist/"))
-	self.status = "Burning image to CD"
-        os.system('cdrecord -eject -v speed=%s dev=%s %s' % (record_speed,block_dev,temp_file))
-	os.unlink(temp_file)
-	self.running = 0 
+        if self.token.burn_cmd:
+	    #self.token.burn_cmd="mplayer /music/Sting\ \&\ Cheb\ Mami\ -\ Desert\ Rose.mp3"
+            rc.register(self.burn_status, False, 2000)  
+	    os.system(self.token.burn_cmd)
+	    #child = util.popen3.Popen3(self.token.burn_cmd)
+	    #child = popen2.Popen3(self.token.burn_cmd)
+	    #self.childs.append(child)
+	    #while child.poll() < 0:
+	        
+	    self.running = False 
+	    
+	else:
+	    os.system('mkisofs -f -U -V "%s" -o %s %s' % (self.token.volume_name,temp_file,"/tmp/burnlist/"))
+	    self.status = "Burning image to CD"
+            os.system('cdrecord -eject -v speed=%s dev=%s %s' % (record_speed,block_dev,temp_file))
+	    os.unlink(temp_file)
+	    self.running = False 
         return
+    
+    def burn_stop(self, arg=None, menuw=None, token=None):
+        """
+	stop above process haha maybe one day..
+	"""
+	self.running = False
+
+    def burn_status(self):
+        """
+	returns current burn status
+	"""
+	
+	print "burn status ran!"
+	try:
+	    if self.running:
+	        rc.post_event(Event(OSD_MESSAGE, arg=_('Testing Status Call : Status Running')))
+                rc.register(self.burn_status, False, 2000)  
+            else:
+	        rc.post_event(Event(OSD_MESSAGE, arg=_('Testing Status Call : Status Not Running')))
+	    #return self.burning
+	    return
+	except:
+	    return False
 
 class PluginInterface(plugin.ItemPlugin):        
 	
@@ -312,4 +436,19 @@
 
 	#dirs
 
+	#DVD movie on file system (ir DIR containing VIDEO_TS and/or AUDIO_TS)
+	#Not sure how freevo works this about but bellow if seems to be fairly
+	#accurate..
+	try:
+	 if item.type == 'video' and item.mode == 'dvd' and item.media == None:
+           cur = BurnDVDItem(item=item, plugin=self)
+	   cur.findFileFromItem()
+
+	   if cur.files:
+	     print cur.files
+             to_return.append(( cur.copy_to_dvd_video, 'Burn as DVD-VIDEO disc') )
+	except:
+	 print "Not possible to findFileFromItem"
+	 pass
+	    
 	return self.draw_menu(menuw=menuw,items=to_return)
