diff --git a/client/text_ui.py b/client/text_ui.py index 3b5b9dc18..cf77deb03 100644 --- a/client/text_ui.py +++ b/client/text_ui.py @@ -148,17 +148,20 @@ def worldUpdate(onlyfetch = False, replay = False, upgradeTo = None, resume = Fa # clear old resume information if etpConst['uid'] == 0: - Equo.dumpTools.dumpobj(etpCache['world'],{}) - Equo.dumpTools.dumpobj(etpCache['install'],{}) - Equo.dumpTools.dumpobj(etpCache['remove'],[]) - if (not etpUi['pretend']): - # store resume information - resume_cache = {} - resume_cache['ask'] = etpUi['ask'] - resume_cache['verbose'] = etpUi['verbose'] - resume_cache['onlyfetch'] = onlyfetch - resume_cache['remove'] = remove - Equo.dumpTools.dumpobj(etpCache['world'],resume_cache) + try: + Equo.dumpTools.dumpobj(etpCache['world'],{}) + Equo.dumpTools.dumpobj(etpCache['install'],{}) + Equo.dumpTools.dumpobj(etpCache['remove'],[]) + if (not etpUi['pretend']): + # store resume information + resume_cache = {} + resume_cache['ask'] = etpUi['ask'] + resume_cache['verbose'] = etpUi['verbose'] + resume_cache['onlyfetch'] = onlyfetch + resume_cache['remove'] = remove + Equo.dumpTools.dumpobj(etpCache['world'],resume_cache) + except (OSError,IOError): + pass else: # if resume, load cache if possible @@ -175,11 +178,14 @@ def worldUpdate(onlyfetch = False, replay = False, upgradeTo = None, resume = Fa etpUi['verbose'] = resume_cache['verbose'] onlyfetch = resume_cache['onlyfetch'] Equo.dumpTools.dumpobj(etpCache['remove'],list(remove)) - except (IOError,KeyError): + except (OSError,IOError,KeyError): print_error(red("Resume cache corrupted.")) - Equo.dumpTools.dumpobj(etpCache['world'],{}) - Equo.dumpTools.dumpobj(etpCache['install'],{}) - Equo.dumpTools.dumpobj(etpCache['remove'],[]) + try: + Equo.dumpTools.dumpobj(etpCache['world'],{}) + Equo.dumpTools.dumpobj(etpCache['install'],{}) + Equo.dumpTools.dumpobj(etpCache['remove'],[]) + except (OSError,IOError): + pass return 128,-1 # disable collisions protection, better @@ -575,17 +581,20 @@ def installPackages(packages = [], atomsdata = [], deps = True, emptydeps = Fals dirscleanup() return 0,0 - # clear old resume information - Equo.dumpTools.dumpobj(etpCache['install'],{}) - # store resume information - if not tbz2: # .tbz2 install resume not supported - resume_cache = {} - #resume_cache['removalQueue'] = removalQueue[:] - resume_cache['runQueue'] = runQueue[:] - resume_cache['onlyfetch'] = onlyfetch - resume_cache['emptydeps'] = emptydeps - resume_cache['deepdeps'] = deepdeps - Equo.dumpTools.dumpobj(etpCache['install'],resume_cache) + try: + # clear old resume information + Equo.dumpTools.dumpobj(etpCache['install'],{}) + # store resume information + if not tbz2: # .tbz2 install resume not supported + resume_cache = {} + #resume_cache['removalQueue'] = removalQueue[:] + resume_cache['runQueue'] = runQueue[:] + resume_cache['onlyfetch'] = onlyfetch + resume_cache['emptydeps'] = emptydeps + resume_cache['deepdeps'] = deepdeps + Equo.dumpTools.dumpobj(etpCache['install'],resume_cache) + except (IOError,OSError): + pass else: # if resume, load cache if possible @@ -607,7 +616,10 @@ def installPackages(packages = [], atomsdata = [], deps = True, emptydeps = Fals print_warning(red("Resuming previous operations...")) except: print_error(red("Resume cache corrupted.")) - Equo.dumpTools.dumpobj(etpCache['install'],{}) + try: + Equo.dumpTools.dumpobj(etpCache['install'],{}) + except (IOError,OSError): + pass return 128,-1 if skipfirst and runQueue: @@ -616,7 +628,10 @@ def installPackages(packages = [], atomsdata = [], deps = True, emptydeps = Fals # save new queues resume_cache['runQueue'] = runQueue[:] #resume_cache['removalQueue'] = removalQueue[:] - Equo.dumpTools.dumpobj(etpCache['install'],resume_cache) + try: + Equo.dumpTools.dumpobj(etpCache['install'],resume_cache) + except (IOError,OSError): + pass # running tasks totalqueue = str(len(runQueue)) @@ -736,7 +751,10 @@ def installPackages(packages = [], atomsdata = [], deps = True, emptydeps = Fals # update resume cache if not tbz2: # tbz2 caching not supported resume_cache['runQueue'].remove(packageInfo) - Equo.dumpTools.dumpobj(etpCache['install'],resume_cache) + try: + Equo.dumpTools.dumpobj(etpCache['install'],resume_cache) + except (IOError,OSError): + pass Package.kill() del metaopts @@ -744,8 +762,11 @@ def installPackages(packages = [], atomsdata = [], deps = True, emptydeps = Fals print_info(red(" @@ ")+blue("Install Complete.")) - # clear resume information - Equo.dumpTools.dumpobj(etpCache['install'],{}) + try: + # clear resume information + Equo.dumpTools.dumpobj(etpCache['install'],{}) + except (IOError,OSError): + pass dirscleanup() return 0,0 @@ -875,12 +896,15 @@ def removePackages(packages = [], atomsdata = [], deps = True, deep = False, sys removalQueue.append(idpackage) # clear old resume information - Equo.dumpTools.dumpobj(etpCache['remove'],{}) - # store resume information - resume_cache = {} - resume_cache['doSelectiveRemoval'] = doSelectiveRemoval - resume_cache['removalQueue'] = removalQueue[:] - Equo.dumpTools.dumpobj(etpCache['remove'],resume_cache) + try: + Equo.dumpTools.dumpobj(etpCache['remove'],{}) + # store resume information + resume_cache = {} + resume_cache['doSelectiveRemoval'] = doSelectiveRemoval + resume_cache['removalQueue'] = removalQueue[:] + Equo.dumpTools.dumpobj(etpCache['remove'],resume_cache) + except (OSError, IOError): + pass else: # if resume, load cache if possible @@ -896,7 +920,10 @@ def removePackages(packages = [], atomsdata = [], deps = True, deep = False, sys print_warning(red("Resuming previous operations...")) except: print_error(red("Resume cache corrupted.")) - Equo.dumpTools.dumpobj(etpCache['remove'],{}) + try: + Equo.dumpTools.dumpobj(etpCache['remove'],{}) + except (OSError, IOError): + pass return 128,-1 # validate removalQueue @@ -944,7 +971,10 @@ def removePackages(packages = [], atomsdata = [], deps = True, deep = False, sys # update resume cache resume_cache['removalQueue'].remove(Package.infoDict['removeidpackage']) - Equo.dumpTools.dumpobj(etpCache['remove'],resume_cache) + try: + Equo.dumpTools.dumpobj(etpCache['remove'],resume_cache) + except (OSError,IOError): + pass Package.kill() del metaopts diff --git a/spritz/src/dialogs.py b/spritz/src/dialogs.py index 0694dcffa..c6ccf2c39 100644 --- a/spritz/src/dialogs.py +++ b/spritz/src/dialogs.py @@ -164,7 +164,9 @@ class PkgInfoMenu: pkg = self.pkg dbconn = self.pkg.dbconn - avail = dbconn.isIDPackageAvailable(pkg.matched_atom[0]) + avail = False + if dbconn: + avail = dbconn.isIDPackageAvailable(pkg.matched_atom[0]) if not avail: return if type(pkg.matched_atom[1]) is not int and pkg.matched_atom[1] not in self.Entropy.validRepositories: diff --git a/spritz/src/packages.py b/spritz/src/packages.py index 133b32373..a28fc2ba3 100644 --- a/spritz/src/packages.py +++ b/spritz/src/packages.py @@ -197,6 +197,26 @@ class EntropyPackages: yp.action = 'rr' yp.color = color_install yield yp + elif mask == "fake_updates": + # load a pixmap inside the treeview + class emptyobj: + def __init__(self): + self.matched_atom = (0,0) + self.namedesc = "%s\n%s.\n%s" % ( + _('No updates available'), + _("It seems that your system is already up-to-date. Good!"), + _("Try clicking the %s button in the %s page") % ( + _("Update Repositories"), + _("Repository Selection"), + ), + ) + self.queued = None + self.repoid = '' + self.color = None + self.action = None + self.dbconn = None + myobj = emptyobj() + yield myobj def getCategories(self): catlist = [] diff --git a/spritz/src/spritz.py b/spritz/src/spritz.py index e1800bf62..9b7baa7e7 100644 --- a/spritz/src/spritz.py +++ b/spritz/src/spritz.py @@ -1143,7 +1143,12 @@ class SpritzApplication(SpritzController,SpritzGUI): if bootstrap: self.endWorking() - self.pkgView.populate(allpkgs) + empty = False + if not allpkgs and action == "updates": + allpkgs = self.etpbase.getPackages('fake_updates') + empty = True + + self.pkgView.populate(allpkgs, empty = empty) self.progress.total.show() if self.doProgress: self.progress.hide() #Hide Progress diff --git a/spritz/src/views.py b/spritz/src/views.py index ce19c585f..4c93f4aae 100644 --- a/spritz/src/views.py +++ b/spritz/src/views.py @@ -428,7 +428,7 @@ class EntropyPackageView: def clear(self): self.store.clear() - def populate(self, pkgs, widget = None): + def populate(self, pkgs, widget = None, empty = False): self.clear() search_col = 0 if widget == None: @@ -437,9 +437,16 @@ class EntropyPackageView: widget.set_model(None) for po in pkgs: self.store.append( None, (po,) ) # str(po)) ) + widget.set_model(self.store) - widget.set_search_column( search_col ) - widget.set_search_equal_func(self.atom_search) + if not empty: + widget.set_search_column( search_col ) + widget.set_search_equal_func(self.atom_search) + widget.set_property('headers-visible',True) + widget.set_property('enable-search',True) + else: + widget.set_property('headers-visible',False) + widget.set_property('enable-search',False) def atom_search(self, model, column, key, iterator): obj = model.get_value( iterator, 0 ) @@ -474,7 +481,8 @@ class EntropyPackageView: obj = model.get_value( iter, 0 ) if obj: cell.set_property('markup',getattr( obj, property )) - cell.set_property('foreground',obj.color) + if obj.color: + cell.set_property('foreground',obj.color) def selectAll(self): list = [x[0] for x in self.store if not x[0].queued == x[0].action] @@ -522,6 +530,11 @@ class EntropyPackageView: """ pkg = model.get_value( iter, 0 ) if pkg: + + if not pkg.dbconn: + cell.set_property( 'stock-id', 'gtk-apply' ) + return + if not pkg.queued: if pkg.action in ["r","rr"]: self.set_pixbuf_to_cell(cell, self.pkg_install_ok)