From 42604e86a460a406371f91584022c95e120d029b Mon Sep 17 00:00:00 2001 From: Florian Festi Date: Sat, 28 Aug 2010 10:16:15 +0200 Subject: Make result set contain package objects instead of names Add desktop file information Set yum cachedir (untestest) --- gui.py | 45 ++++++++++++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/gui.py b/gui.py index bb5dc1e..fb69f83 100755 --- a/gui.py +++ b/gui.py @@ -8,6 +8,7 @@ sys.path.insert(0,'/usr/share/yum-cli') import yum import yum.comps from utils import YumUtilBase +import cPickle as pickle class SearchItem: @@ -24,10 +25,12 @@ class PackagesUI: def __init__(self): self.yum = YumUtilBase("", "", "") + self.yum.setCacheDir() self.searchItems = { "search" : [], "tag" : [], + "menu" : [], "group" : [] } @@ -60,22 +63,32 @@ class PackagesUI: self.packageDescription = m.findChild(QtGui.QTextBrowser, "packageDescription") self.packageProperties = m.findChild(QtGui.QTextBrowser, "packageProperties") - self.allPkgs = set((pkg.name for pkg in self.yum.pkgSack.returnPackages())) + self.allPkgs = set(self.yum.pkgSack.returnPackages()) + self.allPackagesByName = dict(((p.name, p) for p in self.allPkgs)) # tags self.tag2pkgs = {} for name, tags in self.yum.pkgtags.search_tags('').iteritems(): + if name not in self.allPackagesByName: continue for tag in tags: - self.tag2pkgs.setdefault(tag, set()).add(name) + self.tag2pkgs.setdefault(tag, set()).add(self.allPackagesByName[name]) for tag, pkgs in self.tag2pkgs.iteritems(): - pkgs.intersection_update(self.allPkgs) - if len(pkgs) <= 1 or tag.startswith("X-"): + if len(pkgs) <= 1: # or tag.startswith("X-"): continue self.searchItems["tag"].append(SearchItem(tag, pkgs, "tag")) + # menu tags + self.menu2packages = pickle.load(open("categories.pickle")) + + for name, pkgnames in self.menu2packages.iteritems(): + pkgs = self._names2pkgs(pkgnames) + if len(pkgs) <= 1: + continue + self.searchItems["menu"].append(SearchItem(name, pkgs, "menu")) + # groups for group in self.yum.comps.groups: - pkgs = set(group.packages) & self.allPkgs + pkgs = self._names2pkgs(group.packages) if not group.user_visible or not pkgs: continue self.searchItems["group"].append( @@ -86,14 +99,13 @@ class PackagesUI: self.mainwindow.show() - def fillResults(self, result): - pkgs = [] - for name in result: - try: - pkgs.append(self.yum.pkgSack.returnNewestByName(name)[0]) - except yum.Errors.PackageSackError, e: - print e + def _names2pkgs(self, pkgnames): + pkgs = set((self.allPackagesByName.get(name) for + name in pkgnames)) + pkgs.discard(None) + return pkgs + def fillResults(self, pkgs): self.resultList.clear() for pkg in pkgs: item = QtGui.QListWidgetItem("%s\n\t%s" % (pkg.summary, pkg.name), @@ -103,9 +115,8 @@ class PackagesUI: self.resultList.setCurrentRow(0) def _addActiveSearchItem(self, searchItem): - for s in self.activeSearchItems: - if s.pattern == searchItem.pattern: - return + if searchItem in self.activeSearchItems: + return b = QtGui.QPushButton(searchItem.pattern) b.clicked.connect(self.deleteSearchItem) @@ -122,8 +133,7 @@ class PackagesUI: # XXX do a real search! searchlist = ['name', 'summary', 'description', 'url'] - result = set((p.name for p in - self.yum.searchPackages(searchlist, [pattern], False))) + result = set(self.yum.searchPackages(searchlist, [pattern], False)) l = len(result) item = SearchItem(pattern, result, 'search') self.searchItems["search"].append(item) @@ -173,6 +183,7 @@ class PackagesUI: def fillTags(self): for _type, name in (("search", "Searches"), ("tag", "Package Tags"), + ("menu", "Application Menu"), ("group", "Groups")): if self.result: items = [(len(item.result & self.result), item.pattern, len(item.result)) -- cgit