Exemplo n.º 1
0
 def restore_files(self):
     index = 0
     for n in self.files:
         self.progress.update_progress(index + 1)
         os.system('cp %s %s' % (n.Source, n.Destination))
         index += 1
         processEvents()
Exemplo n.º 2
0
    def __init__(self, controller=None, temp_path="", packages_path="", filename=""):
        """
            Constructor
        """
        self.controller = controller
        self.glade = gui.get_glade(constants.RESTORE_GUI, WINDOW_NAME)

        self.temp_path = temp_path
        self.cd_path = ""
        self.root_shell = None
        if self.temp_path == "" or self.temp_path == None:
            self.temp_path = constants.TEMP_FOLDER
        else:
            self.temp_path = temp_path

        self.packages_path = packages_path
        self.isoFileName = filename
        self.restoretype = constants.RESTORE_TYPE.RESTORE_FROM_NONE

        self.window = gui.get_widget(self.glade, WINDOW_NAME)
        if self.controller:
            self.window.set_decorated(False)
            self.content = gui.set_parent_widget_from_glade(self.glade, WINDOW_NAME, self.controller.restoreContainer)
            self.window.destroy()
            gui.setCursorToBusy(self.controller.get_main_window(), True)
        else:
            # Window Widgets
            self.window.show()
            gui.setCursorToBusy(self.window, True)

        self.ListContainer = gui.get_widget(self.glade, "ListContainer")

        self.lblPkgDesc = gui.get_widget(self.glade, "lblPkgDesc")
        self.pkgImg = gui.get_widget(self.glade, "pkgImg")

        self.btnRestorePackages = gui.get_widget(self.glade, "restorePackages")
        self.btnLoadFrom = gui.get_widget(self.glade, "btnLoadFrom")
        self.btnRestorePackages.set_sensitive(False)

        self.packageList = PackageList.PackageView(self)
        self.ListContainer.add(self.packageList)

        self.ListContainer.show_all()
        gui.processEvents()

        if self.controller:
            self.controller.show_status_message(constants.MESSAGE_0001)

        # self.packageList.load_package_folder(self.packages_path)

        self.bind_signals()

        if self.isoFileName != "":
            self.restoreFromIso(self.isoFileName, self.temp_path)
Exemplo n.º 3
0
    def create_iso(self, isoFileList, tmpdir):
        self.progress.can_cancel_progress = False
        self.steps.set_current(2)
        today = datetime.date.today().strftime('%Y%m%d')
        #this will hold all isos that we will create
        #from user selection
        self.isos = []
        
        for cds in isoFileList.keys():
            media_folder_name = self.values['media_type'] + str(cds)            

            current_msg = constants.MESSAGE_0022 + ' (' + media_folder_name + ')'
            self.steps.set_current_text(2, current_msg )
            tmppackages = utils.join_path(tmpdir , 'packages')
        
            destination = utils.join_path(tmppackages, media_folder_name)
            
            if self.values['isoname'] == '':
                fileNames = utils.list_dir(self.values['destination'], 'aptoncd-' + today +"-" + self.values['media_type'] + str(cds))
                if len(fileNames) > 0:
                    fileDestiny = 'aptoncd-' + today +"-" + self.values['media_type'] + str(cds) +'-'+str(len(fileNames)) +'.iso'
                else:
                    fileDestiny = 'aptoncd-' + today +"-" + self.values['media_type'] + str(cds) +'.iso'
            else:
                fileNames = utils.list_dir(self.values['destination'], self.values['isoname'] +"-" + self.values['media_type'] + str(cds))
                if len(fileNames) >0:
                    fileDestiny = self.values['isoname'].replace('.iso','') + "-" + self.values['media_type'] + str(cds) +'-' +str( len(fileNames)) +'.iso'
                else:
                    fileDestiny = self.values['isoname'].replace('.iso','') + "-" + self.values['media_type'] + str(cds) +'.iso'
            
            finalDestiny = utils.join_path(self.values['destination'], fileDestiny)
            self.isos.append(finalDestiny)
            
            #update processes
            #marking first as done and starting a new one
            self.progress.progress_text = constants.MESSAGE_0032 + ' '+ self.values['media_type'] + str(cds) + ' ('+fileDestiny+')'
            gui.processEvents()
            
            
            #now create the iso file
            finald = finalDestiny
            destd = destination
            command = ['-iso-level', '4' ,'-pad', '-l','-r', '-J', '-joliet-long', '-v', '-V', 'APTonCD', '-hide-rr-moved', '-o', unicode(finald,'utf8'),unicode(destd,'utf8')]
            iso_file = Mkisofs()
            self.progress.stop = 100
            iso_file.set_progress_hook(self.progress.update_percent)
            iso_file.create_iso(command)
            
        self.steps.set_current_text(2,constants.MESSAGE_0022)
        self.steps.set_done(2)
        self.progress.update_progress(0)
Exemplo n.º 4
0
    def copy_files(self):
        gui.setCursorToBusy(self.get_parent_widget(), True)
        self.controller.get_main_window().set_sensitive(False)

        progress = self.get_parent().progressbar
        progress.show()

        self.controller.show_status_message("preparing to copy files")
        script_file = os.path.join(constants.TEMP_FOLDER, "aoc.sc")
        ifile = open(script_file, "w")
        indx = 1
        self.file_count = 1
        f_len = len(self.packageList.store)
        for nItens in self.packageList.store:
            if nItens[0]:
                pkg = nItens[PackageList.COL_PACKAGE]
                source = pkg.deb_full_filename
                destination = utils.join_path(constants.LOCAL_APT_FOLDER, pkg.deb_filename)
                if not utils.fileExist(destination):
                    ifile.write("%s|%s\n" % (source, destination))
                    self.file_count += 1
            percent = float(indx) / f_len
            progress.set_fraction(percent)
            progress.set_text(str(int(percent * 100)) + "%")
            gui.processEvents()
            indx += 1
        ifile.close()

        self.controller.show_status_message("Wait while your system is being restored.")
        progress.hide()
        gui.processEvents()

        parentwd = self.controller.get_main_window()
        winid = parentwd.window.xid

        file_exec = constants.COPY_SCRIPT
        command = "gksu --desktop " + constants.DESKTOP_FILE + " 'python %s %s %s'" % (file_exec, winid, script_file)
        os.system(command)

        gui.processEvents()
        self.packageList.update_parent_count()
        self.controller.get_main_window().set_sensitive(True)
        gui.setCursorToBusy(self.get_parent_widget())
Exemplo n.º 5
0
    def load_package_folder(self, path_to_scan, custom = False, recursive = False):
        """
            Loads all packages files from a given path in to the list.
        """
        gui.setCursorToBusy(self.controller.get_parent_widget(),True)
        self.controller.get_main_window().set_sensitive(False)
        processEvents()
        self.store._load_cache()

        list_bad = []
        not_added = []

        progress = self.controller.get_parent().progressbar
        progress.show()

        processEvents()

        # now get all packages in cache
        packages_files = utils.get_deb_from_folder(path_to_scan, recursive)
        f_len = len(packages_files)
        for index, pkg in enumerate(packages_files):
            #add the package to the list
            index+=1
            percent = (float(index) / f_len)
            iter = self.store.add_item(pkg,path_to_scan, custom)
            if iter == None:
                not_added.append(os.path.basename(pkg))
            else:
                if self.store.get_value(iter, COL_PACKAGE).bad:
                    list_bad.append(self.store.get_value(iter, COL_PACKAGE).deb_filename)
            progress.set_fraction(percent)
            progress.set_text(str(int(percent * 100)) + '%' )
            #process pending events / update the window
            if index % 2 == 0:
                processEvents()

        processEvents()
        
        progress.set_fraction(0)
        progress.hide()
        progress.set_text('0%')
        progress.set_fraction(0)
        
        self.controller.controller.show_status_message('Checking versions...')
        processEvents()
        self.store.uncheck_minor_version()
        #self.count_packages()
        self.not_in_cache = []
        self.controller.controller.show_status_message('Checking uncached packages...')
        processEvents()
        for n in self.store.installed:
            if not self.store.get_package(n,self.store.installed[n]):
                self.not_in_cache.append(n)
        
        #print len(self.not_in_cache)
        
        #update the parent count labels
        self.update_parent_count()
        self.controller.get_main_window().set_sensitive(True)
        self.set_model(self.store)
        self.get_selection().select_path((0,0))
        self.grab_focus()
        gui.setCursorToNormal(self.controller.get_parent_widget())

        #show packages not inserted due to already exist in list
        if len(not_added)>0:
            self.__load_dialog_skip(not_added)

        if len(list_bad)>0:
            self.__load_dialog_skip(list_bad)
Exemplo n.º 6
0
    def add_from_file_list(self, packages_names):
        """
            Loads all packages files from a given path in to the list.
        """
        gui.setCursorToBusy(self.controller.get_parent_widget(),True)
        self.controller.get_main_window().set_sensitive(False)
        #self.clear()

        list_bad = []
        not_added = []

        f_len = len(packages_names)
        pbar_shown = False
        #only show progressbar if user selects more than 5 packages
        if len(packages_names) > 5:

            if self.controller.get_parent():
                progress = self.controller.get_parent().progressbar
                progress.show()
                pbar_shown = True
            else:
                pbar_shown = False
            processEvents()

        indx = 1
        # now get all packages in cache
        for index in range(f_len):
            percent = (float(index) / f_len)
            filename = os.path.basename(packages_names[index])
            pathname = os.path.dirname(packages_names[index])
            iter = self.store.add_item(filename,pathname, True)
            if iter == None:
                not_added.append(filename)
            else:
                #self.get_selection().select_iter(iter)
                if self.store.get_value(iter, COL_PACKAGE).bad:
                    list_bad.append(self.store.get_value(iter, COL_PACKAGE).deb_filename) 

            #process pending events / update the window
            if pbar_shown:
                progress.set_fraction(percent)
                progress.set_text(str(int(percent * 100)) + '%' )
                processEvents()

        if pbar_shown:
            progress.set_fraction(0)
            progress.hide()
            progress.set_text('0%')
            progress.set_fraction(0)

        #update the parent count labels
        #update the parent count labels
        self.update_parent_count()
        self.controller.get_main_window().set_sensitive(True)
        self.set_model(self.store)
        self.get_selection().select_path((0,0))
        self.grab_focus()
        gui.setCursorToNormal(self.controller.get_parent_widget())

        #show packages not inserted due to already exist in list
        if len(not_added)>0:
            self.__load_dialog_skip(not_added, constants.MESSAGE_0017)

        if len(list_bad)>0:
            self.__load_dialog_skip(list_bad, constants.MESSAGE_0016)
Exemplo n.º 7
0
 def set_done(self, indx):
     self.steps_text[indx].set_done()
     self.steps_image[indx].set_done()
     processEvents()
Exemplo n.º 8
0
    def set_current(self, indx):

        self.steps_text[indx].set_current()
        self.steps_image[indx].set_current()
        processEvents()
Exemplo n.º 9
0
def progress_timeout(pbobj):
    pbobj.pulse()
    processEvents()
    # As this is a timeout function, return TRUE so that it
    # continues to get called
    return True
Exemplo n.º 10
0
 def on_update(self, value):
     if self.time_start == 1:
         self.time_start = 2
         self.progress.pulse()
     gui.processEvents()
Exemplo n.º 11
0
    def __init__(self, controller = None, temp_path = '', packages_path = '', packages_file_list='', non_interactive = False):
        """
            Constructor
        """
        self.freespaceneeded = 0
        self.controller = controller
        self.glade = gui.get_glade(constants.CREATE_GUI, WINDOW_NAME)
        
        self.non_interactive = non_interactive
        if temp_path == '':
            self.temp_path = constants.TEMP_FOLDER
        else:
            self.temp_path = temp_path
        self.packages_path = packages_path
        
        self.window = gui.get_widget(self.glade, WINDOW_NAME)
        #self.window.set_icon(get_icon('aptoncd'))
        #if is inside a container
        if self.controller:
            self.window.set_decorated(False)
            self.content = gui.set_parent_widget_from_glade(self.glade, WINDOW_NAME, self.controller.createContainer)
            self.window.destroy()
            gui.setCursorToBusy(self.get_main_window(), True)
        else:
            #Window Widgets
            if packages_file_list =='' or self.non_interactive == False:
                self.window.show()
            gui.setCursorToBusy(self.window, True)
        
        self.tipBox = gui.get_widget(self.glade, 'tipbox')
        self.btnCloseTipBox = gui.get_widget(self.glade, 'btnCloseTipBox')
        self.btnMoreMissing = gui.get_widget(self.glade, 'btnMoreMissing')
        
        self.ListContainer = gui.get_widget(self.glade,'ListContainer')       
        self.lblPkgDesc = gui.get_widget(self.glade, 'lblPkgDesc')
        self.pkgImg = gui.get_widget(self.glade, 'pkgImg')

        self.btnAdd = gui.get_widget(self.glade, 'btnAdd')
        self.btnBurn = gui.get_widget(self.glade, 'createBurn')

        self.packageList = PackageList.PackageView(self)
        self.ListContainer.add(self.packageList)
        self.ListContainer.show_all()
        self.bind_signals()
        #gui.connect(self.tgBtnCreate, 'toggled',self.on_BtnCreate_toggle)
        self.values = {
                        'media_type': 'CD',
                        'media_size': constants.CD,
                        'destination': utils.get_home_folder(),
                        'isoname': '',
                        'createmeta': False
                        }
        if packages_file_list =='':
            #self.packageList.can_select_old = self.ckbtnOldVersions.get_active()
            #self.packageList.auto_select_packages = self.ckbtnAutoSelectDepends.get_active()
        
            gui.processEvents()
        
            if self.controller:
                self.controller.show_status_message(constants.MESSAGE_0001)
        else:
            self.process_list(packages_file_list)
Exemplo n.º 12
0
    def create_aptoncd(self):
        
        #this will hold error information.
        errorMsg = ""
        
        self.progress = ProgressDialog(self.get_main_window())
        self.progress.can_cancel_progress = True
        self.progress.title = constants.MESSAGE_0024 
        self.progress.description = constants.MESSAGE_0025 

        #defines the steps to create this iso.
        process = [constants.MESSAGE_0020, constants.MESSAGE_0021, \
                   constants.MESSAGE_0022, constants.MESSAGE_0023]
        self.steps = stepswidget.ProgressSteps(process)
        self.progress.add_widget(self.steps)
        
        #set temp variables for packages locations
        tmpdir = utils.join_path(self.temp_path, 'aptoncd') #"/tmp/aptoncd/"
        tmpmetapackageDir = utils.join_path(tmpdir , 'metapackage')
        tmppackages = utils.join_path(tmpdir , 'packages')
        
        #creates a temporary location to work with .deb files
        utils.mkdir(tmpdir, True)
        
        #get what files will be on each cd
        if self.values['media_type'] == 'CD':
            isoFileList = self.CreateIsoList(constants.CD)
        else:
            isoFileList = self.CreateIsoList(constants.DVD)
        #we will starting changing here to break process in parts
        # first, copy files from cds to locations
        
        result, msg = self.copy_files(isoFileList,tmpdir)
        # the user clicked cancel button
        if not result :
            self.get_main_window().set_sensitive(True)
            return False
            
        result, msg = self.scan_packages(isoFileList,tmpdir)
        if not result :
            self.get_main_window().set_sensitive(True)
            return False 
        
        self.create_iso(isoFileList,tmpdir)
        
        self.steps.set_current(3)
        gui.processEvents()
        #clean folders created previously    
        utils.removePath(tmpdir)
        self.steps.set_done(3)
        
        burn_list = {}
        index=0
        for indx, burns in enumerate(utils.get_burn_applications(constants.BURNS_DATA)):
        	item = utils.whereis(burns[0])
        	
        	if item:
        		burn_list[index]= { 'name':burns[0], 'location':item , 'parameter':burns[1]}
        		index += 1
        		        
        if index >= 1:
        	dlgburn = FinishedDialog(self, burn_list)
        	self.progress.destroy()
        	result, index = dlgburn.run()
        	
        	if result == 1:
        		for iso in self.isos:
        			command = burn_list[index]['location'] + ' '+ burn_list[index]['parameter'] + iso + ' &'
        			utils.run_command(command)
        	dlgburn.destroy()  
        
        self.get_main_window().set_sensitive(True)
        
        self.main_window = gui.get_glade(constants.MAIN_GUI, 'main')
        self.notebook = gui.get_widget(self.main_window, 'notebook')
        self.notebook.set_current_page(0)
Exemplo n.º 13
0
 def scan_packages(self, isoFileList, tmpdir):
     
     self.time_start = 1
     self.steps.set_current(1)
     self.progress.update_progress(0)
     self.progress.progress_widget.set_text( '')
     self.progress.progress_text = constants.MESSAGE_0019
     gui.processEvents()
     
     for cds in isoFileList.keys():
         #cd destination folder
         media_folder_name = self.values['media_type'] + str(cds)
         
         current_msg = constants.MESSAGE_0021 + ' (' + media_folder_name + ')'
         self.steps.set_current_text(1,current_msg )
         
         tmpmetapackageDir = utils.join_path(tmpdir , 'metapackage/' + media_folder_name)
         tmppackages = utils.join_path(tmpdir , 'packages')
     
         destination = utils.join_path(tmppackages, media_folder_name)
         pkg_destination = utils.join_path(destination , 'packages')
         
         controlFile =  utils.join_path(tmpmetapackageDir, 'DEBIAN/control')
         #create the deb file for metapackage
         if self.values['createmeta']:
             command = 'dpkg-deb -b %s  %s > /dev/null 2> /dev/null' % \
                     (tmpmetapackageDir.replace(' ','\ '), utils.join_path(pkg_destination.replace(' ','\ '), self.mPack.get_mtFileName()) )
             result = utils.run_command(command)
             #remove the file needed to create the metapackage
             utils.del_file(controlFile)
         
         packages_files = utils.join_path(destination.replace(' ','\ ') , 'Packages')
         command = 'apt-ftparchive packages packages/'
         if self.progress.cancel_status:
             errorMsg = constants.MESSAGE_0027
             return False, errorMsg
                 
         apt_ftp = AptFtpArchive()
         self.progress.stop = 100
         apt_ftp.set_progress_hook(self.on_update)
         apt_ftp.execute(command, destination, packages_files)
         if self.progress.cancel_status:
             errorMsg = constants.MESSAGE_0027
             return False, errorMsg
                 
         #creates a tar file using bz2 compression
         result, path = utils.compress(packages_files)
         result, msg = utils.zip_file(utils.join_path(destination,'Packages.gz'), utils.join_path(destination,'Packages'))
         
         packages_files = utils.join_path(destination.replace(' ','\ ') , 'Release')
         command = 'apt-ftparchive release  .'
         apt_ftp.set_progress_hook(self.on_update)
         apt_ftp.execute(command, destination, packages_files)
         if self.progress.cancel_status:
             errorMsg = constants.MESSAGE_0027
             return False, errorMsg
                 
         #Create aptoncd.inf file
         infoFile = utils.join_path(destination, 'aptoncd.info')
         info = mediainfo.MediaInfo(infoFile)
         info.write()
         if self.progress.cancel_status:
             errorMsg = constants.MESSAGE_0027
             return False, errorMsg
         #Creates .disk/info
         diskinfodir = utils.join_path(destination ,'.disk')
         utils.mkdir(diskinfodir, True)
         infoDiskFile = utils.join_path(diskinfodir,'info')
         infoDisk = mediainfo.aptDiskInfo(infoDiskFile, media_folder_name)
         infoDisk.write()
         
         #write README.diskdefines
         infoDiskDefinesFile = utils.join_path(destination, 'README.diskdefines')
         infoDiskDefines = mediainfo.aptDiskDefines(infoDiskDefinesFile,media_folder_name)
         infoDiskDefines.write()
         
         gui.processEvents()
         
         utils.removePath(tmpmetapackageDir)
         
     self.progress.cancel_pulse()
     self.steps.set_current_text(1,constants.MESSAGE_0021)
     self.steps.set_done(1)
     self.progress.update_progress(0)
     return True, None
Exemplo n.º 14
0
    def copy_files(self, isoFileList, tmpdir):
        """
            this will copy each package from every cd to the destination.
        """
        self.controlFile = {}
        #start mounting the cd/dvd layout
        for cds in isoFileList.keys():
            #show the first step in bold with an arrow at its left
            self.steps.set_current(0)
            media_folder_name = self.values['media_type'] + str(cds)
            current_msg = constants.MESSAGE_0020 + ' (' + media_folder_name + ')'
            self.steps.set_current_text(0,current_msg )
            self.progress.progress_text = constants.MESSAGE_0002
            
            tmpmetapackageDir = utils.join_path(tmpdir , 'metapackage/' + media_folder_name)
            tmppackages = utils.join_path(tmpdir , 'packages')

            #if we are creating a metapackage
            #we must create a DEBIAN folder
            print 'Create Meta:', self.values['createmeta']
            if self.values['createmeta']:
                utils.mkdir(utils.join_path(tmpmetapackageDir, 'DEBIAN'),True)
                controlFile =  utils.join_path(tmpmetapackageDir, 'DEBIAN/control')
                utils.del_file(controlFile)
                self.mPack = MetaPackage(controlFile)
            else:
                utils.removePath(tmpmetapackageDir )
                
            #cd destination folder
            destination = utils.join_path(tmppackages, media_folder_name)
            utils.mkdir(destination, True)
            
            #destination for each package inside this media
            pkg_destination = utils.join_path(destination , 'packages')
            utils.mkdir(pkg_destination, True)
            
            #start to copy files from source to destination
            self.progress.stop = len(isoFileList[cds])
            
            for index, pkg in enumerate(isoFileList[cds]):
                #update the progress bar
                self.progress.update_progress(index + 1)
                
                #if we must create metapackage we will add this
                #package to the meta list
                if self.values['createmeta']:
                    self.mPack.appendPackage(pkg.package)
                
                #set the folder destination of the package
                filedestination = utils.join_path(pkg_destination, pkg.deb_filename)
                
                #if user has canceled
                #stop iterating
                if self.progress.cancel_status:
                    errorMsg = constants.MESSAGE_0027
                    return False, errorMsg
                
                #copy file to destination
                pkg.copy_to(filedestination )
                
                #update the progress message
                self.progress.progress_text = constants.MESSAGE_0029 % pkg.package
                gui.processEvents()
            
            #close the packfile for this cd
            if self.values['createmeta']:
                self.mPack.write()
                
        #update processes
        #marking first as done and starting a new one
        self.steps.set_current_text(0,constants.MESSAGE_0020)
        self.steps.set_done(0)
            
        return True, None