summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFlorian Festi <ffesti@redhat.com>2010-08-28 10:16:15 +0200
committerFlorian Festi <ffesti@redhat.com>2010-08-28 10:16:15 +0200
commit42604e86a460a406371f91584022c95e120d029b (patch)
tree92e333558b6f78f55ed233a86180f2a11ccd3b1e
parent038e22cd3006a6b61bfc9cbb07d660ec616a55b2 (diff)
downloadpkggui-42604e86a460a406371f91584022c95e120d029b.tar.gz
pkggui-42604e86a460a406371f91584022c95e120d029b.tar.xz
pkggui-42604e86a460a406371f91584022c95e120d029b.zip
Make result set contain package objects instead of names
Add desktop file information Set yum cachedir (untestest)
-rwxr-xr-xgui.py45
1 files 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))