diff --git a/spritz/src/etpgui/packages.py b/spritz/src/etpgui/packages.py index 9577f2e0c..5bf103113 100644 --- a/spritz/src/etpgui/packages.py +++ b/spritz/src/etpgui/packages.py @@ -101,6 +101,9 @@ class PackageWrapper: def getSlot(self): return self.dbconn.retrieveSlot(self.idpackage) + def getKeySlot(self): + return self.dbconn.retrieveKeySlot(self.idpackage) + def getDescription(self): return self.dbconn.retrieveDescription(self.idpackage) @@ -189,6 +192,7 @@ class PackageWrapper: version = property(fget=getVer) release = property(fget=getRel) slot = property(fget=getSlot) + keyslot = property(fget=getKeySlot) description = property(fget=getDescription) size = property(fget=getDownSize) intelligentsizeFmt = property(fget=getIntelligentSize) diff --git a/spritz/src/misc.py b/spritz/src/misc.py index 99e026d9b..0f38dd08c 100644 --- a/spritz/src/misc.py +++ b/spritz/src/misc.py @@ -251,54 +251,73 @@ class YumexQueue: def total(self): return len(self.packages['i'])+len(self.packages['u'])+len(self.packages['r']) - def add(self, pkg): - action = pkg.action - if action in ("u","i"): # update/install + def add(self, pkgs): - tmpqueue = [] - if not pkg in self.packages[action]: - tmpqueue.append( pkg ) - list = [x.matched_atom for x in self.packages[action]+tmpqueue] - status = self.elaborateInstall(pkg,list,action,False) + one = False + if type(pkgs) is not list: + one = True + pkgs = [pkgs] + + action = [pkgs[0].action] + if action[0] in ("u","i"): # update/install + + action = ["u","i"] + tmpqueue = [x for x in pkgs if x not in self.packages['u']+self.packages['i']] + xlist = [x.matched_atom for x in self.packages['u']+self.packages['i']+tmpqueue] + status = self.elaborateInstall(pkgs,xlist,action,False) return status,0 else: # remove - status = self.checkSystemPackage(pkg) - if not status: - return -2,1 + if one: + status = self.checkSystemPackage(pkgs[0]) + if not status: + return -2,1 - tmpqueue = [] - if not pkg in self.packages[action]: - tmpqueue.append( pkg ) - list = [x.matched_atom[0] for x in self.packages[action]+tmpqueue] - self.elaborateRemoval(pkg,list,action,False) + tmpqueue = [x for x in pkgs if x not in self.packages[action[0]]] + xlist = [x.matched_atom[0] for x in self.packages[action[0]]+tmpqueue] + self.elaborateRemoval(pkgs,xlist,action[0],False) return 0,1 - def elaborateInstall(self, pkg, list, action, deep_deps): - (runQueue, removalQueue, status) = self.Entropy.retrieveInstallQueue(list,False,deep_deps) + def elaborateInstall(self, pkgs, xlist, actions, deep_deps): + (runQueue, removalQueue, status) = self.Entropy.retrieveInstallQueue(xlist,False,deep_deps) if status == 0: # runQueue if runQueue: for dep_pkg in self.etpbase.getPackages('updates')+self.etpbase.getPackages('available'): for matched_atom in runQueue: - if (dep_pkg.matched_atom == matched_atom) and (dep_pkg not in self.packages[action]): - if str(pkg) != str(dep_pkg): + if (dep_pkg.matched_atom == matched_atom) and (dep_pkg not in self.packages[actions[0]]+self.packages[actions[1]]): + if dep_pkg not in pkgs: dep_pkg.set_select(True) dep_pkg.queued = dep_pkg.action - self.packages[action].append(dep_pkg) + self.packages[dep_pkg.action].append(dep_pkg) # removalQueue if removalQueue: for rem_pkg in self.etpbase.getPackages('installed'): for matched_atom in removalQueue: if rem_pkg.matched_atom == (matched_atom,0): - if str(pkg) != str(rem_pkg): + if rem_pkg not in pkgs: rem_pkg.set_select(False) rem_pkg.queued = rem_pkg.action self.packages['r'].append(rem_pkg) self.queueView.refresh() return status + def elaborateRemoval(self, pkgs, list, action, nodeps): + if nodeps: + return + removalQueue = self.Entropy.retrieveRemovalQueue(list) + if removalQueue: + for rem_pkg in self.etpbase.getPackages('installed'): + for matched_atom in removalQueue: + if rem_pkg.matched_atom == (matched_atom,0): + if rem_pkg not in pkgs: + rem_pkg.set_select(False) + rem_pkg.queued = rem_pkg.action + self.packages[rem_pkg.action].append(rem_pkg) + self.queueView.refresh() + + def checkSystemPackage(self, pkg): # check if it's a system package valid = self.Entropy.validatePackageRemoval(pkg.matched_atom[0]) @@ -307,49 +326,45 @@ class YumexQueue: pkg.queued = None return valid + def remove(self, pkgs): - def elaborateRemoval(self, pkg, list, action, nodeps): - if nodeps: - return - removalQueue = self.Entropy.retrieveRemovalQueue(list) - if removalQueue: - for rem_pkg in self.etpbase.getPackages('installed'): - for matched_atom in removalQueue: - if rem_pkg.matched_atom == (matched_atom,0): - if str(pkg) != str(rem_pkg): - rem_pkg.set_select(False) - rem_pkg.queued = rem_pkg.action - self.packages[action].append(rem_pkg) - self.queueView.refresh() + one = False + if type(pkgs) is not list: + one = True + pkgs = [pkgs] + action = [pkgs[0].action] + if action[0] in ("u","i"): # update/install - def remove(self, pkg): - # we need to remove packages, recalculating lists - action = pkg.action - if action in ("u","i"): # update/install + action = ["u","i"] + + for r_pkg in pkgs: + if r_pkg in self.packages['u']: + self.packages['u'].remove( r_pkg ) + elif r_pkg in self.packages['i']: + self.packages['i'].remove( r_pkg ) + xlist = [x.matched_atom for x in self.packages['u']+self.packages['i']] + self.packages['u'] = [] + self.packages['i'] = [] + status = self.elaborateInstall(pkgs,xlist,action,False) + for r_pkg in pkgs: + if r_pkg in self.packages['u']+self.packages['i']: + r_pkg.set_select(not r_pkg.selected) + r_pkg.queued = r_pkg.action - if pkg in self.packages[action]: - self.packages[action].remove( pkg ) - list = [x.matched_atom for x in self.packages[action]] - print self.packages[action] - self.packages[action] = [] - status = self.elaborateInstall(pkg,list,action,False) - if pkg in self.packages[action]: - pkg.set_select(not pkg.selected) - pkg.queued = pkg.action - print self.packages[action] return status,0 else: - if pkg in self.packages[action]: - self.packages[action].remove( pkg ) - tmpdata = self.packages[action][:] - list = [x.matched_atom[0] for x in self.packages[action]] - self.packages[action] = [] - self.elaborateRemoval(pkg,list,action,False) + for r_pkg in pkgs: + if r_pkg in self.packages[action[0]]: + self.packages[action[0]].remove( pkgs[0] ) + tmpdata = self.packages[action[0]][:] + xlist = [x.matched_atom[0] for x in self.packages[action[0]]] + self.packages[action[0]] = [] + self.elaborateRemoval(pkgs,xlist,action[0],False) for rem_pkg in tmpdata: - if rem_pkg not in self.packages[action]: + if rem_pkg not in self.packages[action[0]]: # disable rem_pkg.set_select(not rem_pkg.selected) rem_pkg.action = None diff --git a/spritz/src/spritz.py b/spritz/src/spritz.py index 336e85616..5b0e8c111 100644 --- a/spritz/src/spritz.py +++ b/spritz/src/spritz.py @@ -164,7 +164,7 @@ class SpritzController(Controller): self.setStatus(_('No packages in queue')) return self.queue.dump() - fn = '/tmp/last-queue.yumex' + fn = '/tmp/last-queue.spritz' cp = self.queue.getParser() fp = open(fn,"w") cp.save(fp) @@ -182,7 +182,7 @@ class SpritzController(Controller): dialog = gtk.FileChooserDialog(title=None,action=gtk.FILE_CHOOSER_ACTION_SAVE, buttons=(gtk.STOCK_CANCEL,gtk.RESPONSE_CANCEL,gtk.STOCK_SAVE,gtk.RESPONSE_OK)) dialog.set_current_folder("/tmp") - dialog.set_current_name('queue.yumex') + dialog.set_current_name('queue.spritz') response = dialog.run() if response == gtk.RESPONSE_OK: fn = dialog.get_filename() diff --git a/spritz/src/views.py b/spritz/src/views.py index 77f208074..00a4f7a8a 100644 --- a/spritz/src/views.py +++ b/spritz/src/views.py @@ -146,22 +146,38 @@ class EntropyPackageView: def selectAll(self): + list = [x[0] for x in self.store if not x[0].queued == x[0].action] + for obj in list: + obj.queued = obj.action + self.queue.add(list) + for obj in list: + obj.set_select( not obj.selected ) + ''' for el in self.store: obj = el[0] if not obj.queued == obj.action: obj.queued = obj.action self.queue.add(obj) obj.set_select( not obj.selected ) + ''' self.queueView.refresh() self.view.queue_draw() def deselectAll(self): + list = [x[0] for x in self.store if x[0].queued == x[0].action] + for obj in list: + obj.queued = None + self.queue.remove(list) + for obj in list: + obj.set_select( not obj.selected ) + ''' for el in self.store: obj = el[0] if obj.queued == obj.action: obj.queued = None self.queue.remove(obj) obj.set_select( not obj.selected ) + ''' self.queueView.refresh() self.view.queue_draw()