#############################
#  It's Bzip2's  write and read class section  #
########################## ###
import myTar, bz2, myProgress
import gtk, gtk.glade
import os.path, sys

class myBz2(myTar.myTar):
    def __init__(self, nameOpen  = None):
        if nameOpen != None:
            while gtk.events_pending():
                    gtk.main_iteration(False)           
            temp = myTar.myTar(nameOpen, "r:bz2")
            self.FilesList = temp.FilesList
            self.tar = temp.tar
            self.sep = temp.sep
        else:
            pass
    
    def mySave(self,  name, abs, tar, wndMain):
        def btnOK(widget):
            compression_lvl = compSpin.get_value_as_int()
            check_state = checkBtn.get_active()
            bz2Dlg.destroy()
            (path, ext) = os.path.split(name)
            (filename, ext) = os.path.splitext(ext)
            filename = '.' + filename           
            myTar.myTar().mySave(filename, abs, tar)
            
            archBz2 = bz2.BZ2File(name, 'wb', 0, compression_lvl)
                        
            file = open(filename, 'rb')
            progress = myProgress.myProgressbar(wndMain)
            while True:
                while gtk.events_pending():
                    gtk.main_iteration(False)
                buff = file.read(128)
                if buff == "":
                    file.close()
                    archBz2.close()
                    os.remove(filename)
                    if check_state == True:
                        for i in abs[1:]:
                            while gtk.events_pending():
                                gtk.main_iteration(False)
                            os.remove(i)
                    break                
                else:
                    archBz2.write(buff)
            progress.destroy_progress()
        
        def btnCancel(widget):
            bz2Dlg.destroy()
        
        if sys.platform == 'win32':
            self.sep = '\\'
        else:
            self.sep = "/"
        
        gladedir = ".%sglade%spaker.glade" % (self.sep, self.sep)
        mainicon = ".%sicon%skoda16.png" % (self.sep, self.sep)
        xml = gtk.glade.XML(gladedir, "gzBz2Dlg")
        bz2Dlg = xml.get_widget("gzBz2Dlg")
        bz2Dlg.set_transient_for(wndMain)
        bz2Dlg.set_modal(True)
        bz2Dlg.set_icon_from_file(mainicon)
        
        compSpin = xml.get_widget("compSpin")
        checkBtn = xml.get_widget("checkBtn")
        
        mysignals = {"on_btnOK_clicked": btnOK, 
                               "on_btnCancel_clicked": btnCancel
                               }    
        xml.signal_autoconnect(mysignals)
        bz2Dlg.show()
    