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)