##########################
#  It's Tar's  write and read class file     #
########################## 

import sys, gtk, myProgress

class myTar:
    def __init__(self, nameOpen  = None, mode = None):
        if mode == None:
            mode = 'r'
        if nameOpen != None:
            while gtk.events_pending():
                    gtk.main_iteration(False)
            import tarfile            
            self.tar = tarfile.open(nameOpen, mode)            
            self.FilesList = []
            self.FilesList = self.tar.getnames()            
            self.tar.close()
            
            for i in range(0, len(self.FilesList)):
                while gtk.events_pending():
                    gtk.main_iteration(False)
                self.FilesList[i] = "/" + self.FilesList[i]
                
            self.FilesList.insert(0, "/")            
            self.tar = tarfile.open(nameOpen, mode)                        
            self.sep = "/"
        else:
            pass
    
    def myOpen(self, path, files):
        if len(files) == 0:
            while gtk.events_pending():
                gtk.main_iteration(False)
            selected = self.tar.getmembers()
            for i in selected:
                while gtk.events_pending():
                    gtk.main_iteration(False)
                self.tar.extract(i, path)
        else:
            for file in files:
                while gtk.events_pending():
                    gtk.main_iteration(False)
                if file.endswith("/") == True:
                        while gtk.events_pending():
                            gtk.main_iteration(False)
                        selected = self.tar.getnames()
                        for i in selected:
                            while gtk.events_pending():
                                gtk.main_iteration(False)
                            if i.startswith(file[1:]):
                                while gtk.events_pending():
                                    gtk.main_iteration(False)
                                self.tar.extract(i, path)
                else:
                    while gtk.events_pending():
                        gtk.main_iteration(False)
                    self.tar.extract(file[1:], path)
    
    def mySave(self, name, abs, tar, wndMain=None):        
        import tarfile
        
        progress = myProgress.myProgressbar(wndMain)
        mode = 'w'
        try:
            archive = tarfile.open(name, mode)
            try:                
                for i in range(1, len(abs)):
                    while gtk.events_pending():
                        gtk.main_iteration(False)
                    archive.add(abs[i], tar[i], False)
            finally:
                progress.destroy_progress()
                archive.close()
        except IOError:
            print "error occured"