[PackageKit-commit] packagekit: Branch 'master' - 9 commits

Richard Hughes hughsient at kemper.freedesktop.org
Fri Feb 13 01:07:27 PST 2009


 backends/conary/Cache.py            |  346 -----------------
 backends/conary/Makefile.am         |    6 
 backends/conary/XMLCache.py         |  286 ++++++++++++++
 backends/conary/conaryBackend.py    |  438 ++++++++++------------
 backends/conary/conaryEnums.py      |   68 +++
 backends/conary/conaryFilter.py     |   23 -
 backends/conary/conarypk.py         |  118 +++++
 backends/conary/pk-backend-conary.c |   30 +
 configure.ac                        |   12 
 po/sv.po                            |  716 ++++++++++--------------------------
 10 files changed, 927 insertions(+), 1116 deletions(-)

New commits:
commit d2f3e7ac8076948bf2080b6c7e586bdd5032ec12
Author: zodman <zodman at cosmogirl.(none)>
Date:   Thu Feb 12 15:16:24 2009 -0600

    add ignore categorie for add More classify critteria

diff --git a/backends/conary/conaryEnums.py b/backends/conary/conaryEnums.py
index fc55fa3..6584ddd 100644
--- a/backends/conary/conaryEnums.py
+++ b/backends/conary/conaryEnums.py
@@ -3,11 +3,11 @@ from packagekit.enums import GROUP_ACCESSIBILITY, GROUP_ACCESSORIES, GROUP_EDUCA
 """
 Classify the Categories and help me to make a backend
 
-    from XMLCache import XMLCache 
-    print "categoryMap = {",
-    for i in XMLCache()._getAllCategories():
-        print "'%s':" % i
-    print "}",
+#    from XMLCache import XMLCache 
+#    print "categoryMap = {",
+#    for i in XMLCache()._getAllCategories():
+#        print "'%s':" % i
+#    print "}",
 
 """
 
@@ -33,9 +33,9 @@ categoryMap = {
 'News': GROUP_INTERNET,
 'X-SuSE-Core-Office': GROUP_SYSTEM,
 'X-Red-Hat-Base': GROUP_SYSTEM,
-'GNOME': GROUP_OTHER,
+#'GNOME': GROUP_OTHER,
 'Settings': GROUP_SYSTEM,
-'GTK': GROUP_OTHER,
+#'GTK': GROUP_OTHER,
 'System': GROUP_SYSTEM,
 'Graphics': GROUP_GRAPHICS,
 'X-Ximian-Main': GROUP_OFFICE,
commit 8ff210b4df5ef2a64a3f479aa3ffe21ffaf6d9d5
Author: zodman <zodman at cosmogirl.(none)>
Date:   Thu Feb 12 15:10:50 2009 -0600

    implement the conaryEnums for classify category in groups
    fix the backend for search groups

diff --git a/backends/conary/XMLCache.py b/backends/conary/XMLCache.py
index 7c712e9..4c95908 100644
--- a/backends/conary/XMLCache.py
+++ b/backends/conary/XMLCache.py
@@ -3,8 +3,37 @@ import sys
 from xml.dom.minidom import parse
 import urllib as url
 
+
+from conary.lib import sha1helper
+from conary.lib import util
+
+from packagekit.backend import PackageKitBaseBackend
+from packagekit.enums import ERROR_NO_CACHE
+
+
 from pkConaryLog import log
 from conarypk import ConaryPk
+from conaryEnums import groupMap
+
+def getGroup( categorieList):
+    where = {}
+    for cat in categorieList:
+        for group,categories in groupMap.items():
+            if cat in categories:
+                if where.has_key(group):
+                    where[group] = where[group] +1
+                else:
+                    where[group] = 1
+
+    tmp = 0
+    t_key = ""
+    for key, value in where.items():
+        if value > tmp:
+            t_key =  key
+            tmp  = value
+    return t_key
+
+
 class XMLRepo:
     xml_path = ""
     repository = ""
@@ -83,11 +112,17 @@ class XMLRepo:
             for package in packages.childNodes:
                 pkg = self._generatePackage(package)
                 pkg["label"] = self.label
+                """
                 if not pkg.has_key("category"):
                     continue
                 for j in pkg["category"]:
                     if name.lower() in j.lower():
                         results_name.append(pkg['name'])
+                """
+                if pkg.has_key("category"):
+                    group = getGroup(pkg["category"])
+                    if name.lower() == group:
+                        results_name.append(pkg["name"])
         return [ self._getPackage(i) for i in set(results_name) ]
 
     def _searchDetailsPackage(self, name):
@@ -147,7 +182,6 @@ class XMLCache:
             self.repos.append(XMLRepo( xml_file + ".xml", self.xml_path ))
 
     def _getJobCachePath(self, applyList):
-        from conary.lib import sha1helper
         applyStr = '\0'.join(['%s=%s[%s]--%s[%s]%s' % (x[0], x[1][0], x[1][1], x[2][0], x[2][1], x[3]) for x in applyList])
         return self.jobPath + '/' + sha1helper.sha1ToString(sha1helper.sha1String(applyStr))
 
@@ -159,7 +193,6 @@ class XMLCache:
     def cacheUpdateJob(self, applyList, updJob):
         jobPath = self._getJobCachePath(applyList)
         if os.path.exists(jobPath):
-            from conary.lib import util
             util.rmtree(jobPath)
         os.mkdir(jobPath)
         updJob.freeze(jobPath)
@@ -199,13 +232,14 @@ class XMLCache:
             try:
                 wget = url.urlopen( wwwfile )
             except:
-                from packagekit.backend import PackageKitBaseBackend
-                from packagekit.enums import ERROR_NO_CACHE
                 Pk = PackageKitBaseBackend("")
                 Pk.error(ERROR_NO_CACHE," %s can not open" % wwwfile)
             openfile = open( filename ,'w')
             openfile.writelines(wget.readlines())
             openfile.close()
+    def getGroup(self,categorieList):
+        return getGroup(categorieList)
+                
     def _getCategorieBase(self, mapDict, categorieList ):
         if not categorieList:
             return None
@@ -229,6 +263,7 @@ class XMLCache:
                 t_key =  key
                 tmp  = value
         return t_key
+
     def _getAllCategories(self):
         categories = []
         for i in self.repos:
@@ -242,15 +277,10 @@ class XMLCache:
         
 
 if __name__ == '__main__':
-    from conaryBackend import groupMap
   #  print ">>> name"
    # print XMLCache().search('music', 'name' )
    # print ">> details"
-   # l= XMLCache().search('GTK', 'group' )
-   # for v,p in enumerate(l):
-   #     print v,p["name"]
-    print "{",
-    for i in XMLCache()._getAllCategories():
-        print "'%s':" % i
-    print "}",
-
+    l= XMLCache().search('Internet', 'group' )
+    for v,p in enumerate(l):
+        print v,p["name"]
+  # print  XMLCache().getGroup(['GTK', 'Graphics', 'Photography', 'Viewer'])
diff --git a/backends/conary/conaryBackend.py b/backends/conary/conaryBackend.py
old mode 100644
new mode 100755
index 52334f9..5ea21f6
--- a/backends/conary/conaryBackend.py
+++ b/backends/conary/conaryBackend.py
@@ -47,73 +47,6 @@ pkpackage = PackagekitPackage()
 
 from pkConaryLog import log, pdb
 
-groupMap = {
-    '2DGraphics'          : GROUP_GRAPHICS,
-    'Accessibility'       : GROUP_ACCESSIBILITY,
-    'AdvancedSettings'    : GROUP_ADMIN_TOOLS,
-    'Application'         : GROUP_OTHER,
-    'ArcadeGame'          : GROUP_GAMES,
-    'Audio'               : GROUP_MULTIMEDIA,
-    'AudioVideo'          : GROUP_MULTIMEDIA,
-    'BlocksGame'          : GROUP_GAMES,
-    'BoardGame'           : GROUP_GAMES,
-    'Calculator'          : GROUP_ACCESSORIES,
-    'Calendar'            : GROUP_ACCESSORIES,
-    'CardGame'            : GROUP_GAMES,
-    'Compiz'              : GROUP_SYSTEM,
-    'ContactManagement'   : GROUP_ACCESSORIES,
-    'Core'                : GROUP_SYSTEM,
-    'Database'            : GROUP_SERVERS,
-    'DesktopSettings'     : GROUP_ADMIN_TOOLS,
-    'Development'         : GROUP_PROGRAMMING,
-    'Email'               : GROUP_INTERNET,
-    'FileTransfer'        : GROUP_INTERNET,
-    'Filesystem'          : GROUP_SYSTEM,
-    'GNOME'               : GROUP_DESKTOP_GNOME,
-    'GTK'                 : GROUP_DESKTOP_GNOME,
-    'GUIDesigner'         : GROUP_PROGRAMMING,
-    'Game'                : GROUP_GAMES,
-    'Graphics'            : GROUP_GRAPHICS,
-    'HardwareSettings'    : GROUP_ADMIN_TOOLS,
-    'IRCClient'           : GROUP_INTERNET,
-    'InstantMessaging'    : GROUP_INTERNET,
-    'LogicGame'           : GROUP_GAMES,
-    'Monitor'             : GROUP_ADMIN_TOOLS,
-    'Music'               : GROUP_MULTIMEDIA,
-    'Network'             : GROUP_INTERNET,
-    'News'                : GROUP_INTERNET,
-    'Office'              : GROUP_OFFICE,
-    'P2P'                 : GROUP_INTERNET,
-    'PackageManager'      : GROUP_ADMIN_TOOLS,
-    'Photography'         : GROUP_MULTIMEDIA,
-    'Player'              : GROUP_MULTIMEDIA,
-    'Presentation'        : GROUP_OFFICE,
-    'Publishing'          : GROUP_OFFICE,
-    'RasterGraphics'      : GROUP_GRAPHICS,
-    'Security'            : GROUP_SECURITY,
-    'Settings'            : GROUP_ADMIN_TOOLS,
-    'Spreadsheet'         : GROUP_OFFICE,
-    'System'              : GROUP_SYSTEM,
-    'Telephony'           : GROUP_COMMUNICATION,
-    'TerminalEmulator'    : GROUP_ACCESSORIES,
-    'TextEditor'          : GROUP_ACCESSORIES,
-    'Utility'             : GROUP_ACCESSORIES,
-    'VectorGraphics'      : GROUP_GRAPHICS,
-    'Video'               : GROUP_MULTIMEDIA,
-    'Viewer'              : GROUP_MULTIMEDIA,
-    'WebBrowser'          : GROUP_INTERNET,
-    'WebDevelopment'      : GROUP_PROGRAMMING,
-    'WordProcessor'       : GROUP_OFFICE,
-    ''                    : GROUP_UNKNOWN
-}
-
-revGroupMap = {}
-
-for (con_cat, pk_group) in groupMap.items():
-    if revGroupMap.has_key(pk_group):
-        revGroupMap[pk_group].append(con_cat)
-    else:
-        revGroupMap[pk_group] = [con_cat]
 
 #from conary.lib import util
 #sys.excepthook = util.genExcepthook()
@@ -680,7 +613,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
 
             categories  = ""
             if metadata.has_key("category"):
-                categories =  Cache()._getCategorieBase( groupMap, metadata['category'])
+                categories =  Cache().getGroup( metadata['category'])
             else:
                 categories = None
             # Package size goes here, but I don't know how to find that for conary packages.
diff --git a/backends/conary/conaryEnums.py b/backends/conary/conaryEnums.py
index 3b96639..fc55fa3 100644
--- a/backends/conary/conaryEnums.py
+++ b/backends/conary/conaryEnums.py
@@ -1,54 +1,68 @@
-from packagekit.enums import *
-"""
-GROUP_ACCESSIBILITY, GROUP_ACCESSORIES, GROUP_ADMIN_TOOLS, GROUP_COLLECTIONS, GROUP_COMMUNICATION, GROUP_DESKTOP_GNOME, GROUP_DESKTOP_KDE, GROUP_DESKTOP_OTHER, GROUP_DESKTOP_XFCE, GROUP_DOCUMENTATION, GROUP_EDUCATION, GROUP_ELECTRONICS, GROUP_FONTS, GROUP_GAMES, GROUP_GRAPHICS, GROUP_INTERNET, GROUP_LEGACY, GROUP_LOCALIZATION, GROUP_MAPS, GROUP_MULTIMEDIA, GROUP_NETWORK, GROUP_NEWEST, GROUP_OFFICE, GROUP_OTHER, GROUP_POWER_MANAGEMENT, GROUP_PROGRAMMING, GROUP_PUBLISHING, GROUP_REPOS, GROUP_SCIENCE, GROUP_SECURITY, GROUP_SERVERS, GROUP_SYSTEM, GROUP_UNKNOWN, GROUP_VENDOR, GROUP_VIRTUALIZATION,
-"""
+from packagekit.enums import GROUP_ACCESSIBILITY, GROUP_ACCESSORIES, GROUP_EDUCATION, GROUP_GAMES, GROUP_GRAPHICS, GROUP_INTERNET, GROUP_MULTIMEDIA, GROUP_OFFICE, GROUP_OTHER,  GROUP_PROGRAMMING,  GROUP_SYSTEM
 
 """
 Classify the Categories and help me to make a backend
 
+    from XMLCache import XMLCache 
+    print "categoryMap = {",
+    for i in XMLCache()._getAllCategories():
+        print "'%s':" % i
+    print "}",
+
 """
 
-categoryMap { 
-'VectorGraphics':
-'Network': GROUP_NETWORK
-'Spreadsheet': GROUP_OFFICE
-'Application':
-'X-GNOME-NetworkSettings':
-'Music': GROUP_MULTIMEDIA
-'P2P':
-'WordProcessor': GROUP_OFFICE
-'X-GNOME-PersonalSettings':
-'Presentation': GROUP_OFFICE
-'Email': GROUP_OFFICE
-'Monitor':
-'Development':
-'Core':
-'RasterGraphics':
-'Telephony':
-'Photography':
-'HardwareSettings':
-'News':
-'X-SuSE-Core-Office':
-'X-Red-Hat-Base':
-'GNOME':
-'Settings':
-'GTK':
-'System':
-'Graphics': GROUP_GRAPHICS
-'X-Ximian-Main':
-'Security':
-'Audio':
-'ContactManagement':
-'X-Novell-Main':
-'AudioVideo':
-'WebDevelopment':
-'X-GNOME-SystemSettings':
-'Office': GROUP_OFFICE
-'Viewer':
-'Player':
-'DesktopSettings':
-'WebBrowser': GROUP_INTERNET
-'Utility':
-'GUIDesigner':
-'TerminalEmulator':
+categoryMap = { 
+'VectorGraphics': GROUP_GRAPHICS,
+'Network': GROUP_INTERNET,
+'Spreadsheet': GROUP_OFFICE,
+'Application': GROUP_OTHER,
+'X-GNOME-NetworkSettings': GROUP_INTERNET,
+'Music': GROUP_MULTIMEDIA,
+'P2P': GROUP_INTERNET,
+'WordProcessor': GROUP_OFFICE,
+'X-GNOME-PersonalSettings': GROUP_SYSTEM,
+'Presentation': GROUP_OFFICE,
+'Email': GROUP_OFFICE,
+'Monitor': GROUP_SYSTEM,
+'Development': GROUP_PROGRAMMING,
+'Core': GROUP_SYSTEM,
+'RasterGraphics': GROUP_GRAPHICS,
+'Telephony': GROUP_INTERNET,
+'Photography': GROUP_GRAPHICS,
+'HardwareSettings': GROUP_SYSTEM,
+'News': GROUP_INTERNET,
+'X-SuSE-Core-Office': GROUP_SYSTEM,
+'X-Red-Hat-Base': GROUP_SYSTEM,
+'GNOME': GROUP_OTHER,
+'Settings': GROUP_SYSTEM,
+'GTK': GROUP_OTHER,
+'System': GROUP_SYSTEM,
+'Graphics': GROUP_GRAPHICS,
+'X-Ximian-Main': GROUP_OFFICE,
+'Security': GROUP_SYSTEM,
+'Audio': GROUP_MULTIMEDIA,
+'ContactManagement': GROUP_ACCESSORIES,
+'X-Novell-Main': GROUP_OFFICE,
+'AudioVideo': GROUP_MULTIMEDIA,
+'WebDevelopment': GROUP_PROGRAMMING,
+'X-GNOME-SystemSettings': GROUP_SYSTEM,
+'Office': GROUP_OFFICE,
+'Viewer': GROUP_ACCESSORIES,
+'Player': GROUP_OTHER,
+'DesktopSettings': GROUP_SYSTEM,
+'WebBrowser': GROUP_INTERNET,
+'Utility': GROUP_ACCESSORIES,
+'GUIDesigner': GROUP_PROGRAMMING,
+'TerminalEmulator': GROUP_ACCESSORIES,
 }
+
+groupMap = {}
+
+for (con_cat, pk_group) in categoryMap.items():
+    if groupMap.has_key(pk_group):
+        groupMap[pk_group].append(con_cat)
+    else:
+        groupMap[pk_group] = [con_cat]
+
+if __name__ == "__main__":
+    print groupMap
commit c2ad2191ea225ef0f622b286380996b47f6eece1
Author: zodman <zodman at cosmogirl.(none)>
Date:   Thu Feb 12 13:21:23 2009 -0600

     fix a filname error

diff --git a/backends/conary/Makefile.am b/backends/conary/Makefile.am
index ced2759..5b88383 100644
--- a/backends/conary/Makefile.am
+++ b/backends/conary/Makefile.am
@@ -7,7 +7,7 @@ dist_helper_DATA = 			\
 	XMLCache.py		\
 	pkConaryLog.py \
     conarypk.py \
-    conaryEnum.py 
+    conaryEnums.py 
 
 plugindir = $(PK_PLUGIN_DIR)
 plugin_LTLIBRARIES = libpk_backend_conary.la
commit 0edb5bf434c588320af268469778aac79d9b2d91
Author: zodman <zodman at cosmogirl.(none)>
Date:   Thu Feb 12 13:14:55 2009 -0600

    fix the / on makefile.ac

diff --git a/backends/conary/Makefile.am b/backends/conary/Makefile.am
index c4e7235..ced2759 100644
--- a/backends/conary/Makefile.am
+++ b/backends/conary/Makefile.am
@@ -7,7 +7,7 @@ dist_helper_DATA = 			\
 	XMLCache.py		\
 	pkConaryLog.py \
     conarypk.py \
-    conaryEnum.py \
+    conaryEnum.py 
 
 plugindir = $(PK_PLUGIN_DIR)
 plugin_LTLIBRARIES = libpk_backend_conary.la
commit 61c9a8004ae870878b80c1eae901249c63b212bc
Author: zodman <zodman at cosmogirl.(none)>
Date:   Thu Feb 12 00:52:32 2009 -0600

    Remove the old Cache and Add entry for new files
    on configure.ac

diff --git a/backends/conary/Makefile.am b/backends/conary/Makefile.am
index 400f706..c4e7235 100644
--- a/backends/conary/Makefile.am
+++ b/backends/conary/Makefile.am
@@ -4,8 +4,10 @@ dist_helper_DATA = 			\
 	conaryFilter.py		\
 	conaryCallback.py	\
 	conaryInit.py		\
-	Cache.py		\
-	pkConaryLog.py
+	XMLCache.py		\
+	pkConaryLog.py \
+    conarypk.py \
+    conaryEnum.py \
 
 plugindir = $(PK_PLUGIN_DIR)
 plugin_LTLIBRARIES = libpk_backend_conary.la
diff --git a/configure.ac b/configure.ac
index 2b55bd7..e2ef687 100644
--- a/configure.ac
+++ b/configure.ac
@@ -75,11 +75,11 @@ if test "$GCC" = "yes"; then
 	WARNINGFLAGS_CPP="$WARNINGFLAGS_CPP -Wformat-security"
 	WARNINGFLAGS_CPP="$WARNINGFLAGS_CPP -Wmissing-include-dirs"
 	WARNINGFLAGS_CPP="$WARNINGFLAGS_CPP -Wmissing-format-attribute"
-	WARNINGFLAGS_CPP="$WARNINGFLAGS_CPP -Wclobbered"
-	WARNINGFLAGS_CPP="$WARNINGFLAGS_CPP -Wempty-body"
-	WARNINGFLAGS_CPP="$WARNINGFLAGS_CPP -Wignored-qualifiers"
+	#WARNINGFLAGS_CPP="$WARNINGFLAGS_CPP -Wclobbered"
+	#WARNINGFLAGS_CPP="$WARNINGFLAGS_CPP -Wempty-body"
+	#WARNINGFLAGS_CPP="$WARNINGFLAGS_CPP -Wignored-qualifiers"
 	WARNINGFLAGS_CPP="$WARNINGFLAGS_CPP -Wsign-compare"
-	WARNINGFLAGS_CPP="$WARNINGFLAGS_CPP -Wtype-limits"
+	#WARNINGFLAGS_CPP="$WARNINGFLAGS_CPP -Wtype-limits"
 	WARNINGFLAGS_CPP="$WARNINGFLAGS_CPP -Wuninitialized"
 
 	# work only in C
@@ -89,8 +89,8 @@ if test "$GCC" = "yes"; then
 	WARNINGFLAGS_C="$WARNINGFLAGS_C -Wshadow"
 	WARNINGFLAGS_C="$WARNINGFLAGS_C -Wno-strict-aliasing"
 	WARNINGFLAGS_C="$WARNINGFLAGS_C -Winline"
-	WARNINGFLAGS_C="$WARNINGFLAGS_C -Wmissing-parameter-type"
-	WARNINGFLAGS_C="$WARNINGFLAGS_C -Woverride-init"
+	#WARNINGFLAGS_C="$WARNINGFLAGS_C -Wmissing-parameter-type"
+	#WARNINGFLAGS_C="$WARNINGFLAGS_C -Woverride-init"
 else
 	WARNINGFLAGS_C=""
 	WARNINGFLAGS_CPP=""
commit e7fbeec30c6837839d387d4fdf74516067e0a2b0
Author: zodman <zodman at cosmogirl.(none)>
Date:   Thu Feb 12 00:20:39 2009 -0600

    New updates:
        * Add search name|details|group .
        * Replace the resolve packages for _resolve_list
          this make the search more faster.
        * Add conaryEnums for maps GROUP_*. what generate by XMLCache.py
        * Add validations when conary cache not fetch.

diff --git a/backends/conary/Cache.py b/backends/conary/Cache.py
deleted file mode 100644
index 34b64b1..0000000
--- a/backends/conary/Cache.py
+++ /dev/null
@@ -1,186 +0,0 @@
-import os
-import sys
-from xml.dom.minidom import parse
-import urllib as url
-
-from pkConaryLog import log
-from conarypk import ConaryPk
-class XMLRepo:
-    xml_path = ""
-    repository = ""
-    def __init__(self, repo, path ):
-        self.xml_path = path
-        self._setRepo(repo)
-
-    def resolve(self, search_trove):
-        """ resolve its a search with name """
-        trove =  self._getPackage(search_trove)
-        if trove:
-            return trove
-        else:
-            return None
-        
-    def search(self, search):
-        return self._searchPackage(search)
-
-    def _setRepo(self,repo):  
-        self.repo = repo
-        doc = self._open()
-        self.label = str( doc.childNodes[0].getAttribute("label") )
-
-    def _open(self):
-        try:
-            return self._repo
-        except AttributeError:
-            self._repo =   parse( open( self.xml_path + self.repo) )
-            return self._repo
-
-    def _generatePackage(self, package_node ): 
-        """ convert from package_node to dictionary """
-        pkg = {}
-        cat = []
-        for node in package_node.childNodes:
-            if pkg.has_key('categorie'):
-                cat.append(str(node.childNodes[0].nodeValue))
-            else:
-                pkg[str(node.nodeName)] = str(node.childNodes[0].nodeValue)
-        pkg["categorie"] = cat
-        return pkg
-
-    def _getPackage(self, name):
-        doc = self._open()
-        results = []
-        for packages in doc.childNodes:
-            for package in packages.childNodes:
-                pkg = self._generatePackage(package)
-                pkg["label"] = self.label
-                if name == pkg["name"]:
-                    return pkg
-        return None
-                    
-    def _searchPackage(self, name):
-        doc = self._open()
-        results = []
-        for packages in doc.childNodes:
-            for package in packages.childNodes:
-                pkg = self._generatePackage(package)
-                pkg["label"] = self.label
-                for i in pkg.keys():
-                    if i  == "label":
-                        continue
-                    if i =='categorie':
-                        for j in pkg[i]:
-                            if name.lower() in j.lower():
-                                results.append(pkg)
-                    if name.lower() in pkg[i]:
-                        results.append(pkg)
-        return results
-
-        
-
-class XMLCache:
-    #xml_files = ["foresight.rpath.org at fl:2"]
-    xml_files = []
-    server = "http://packages.foresightlinux.org/cache/"
-    repos = []
-    dbPath = '/var/cache/conary/'
-    jobPath = dbPath + 'jobs'
-    xml_path =  dbPath + "xmlrepo/"
-
-    def __init__(self):
-        con = ConaryPk()
-        labels = con.get_labels_from_config()
-
-        if not os.path.isdir(self.dbPath):
-            os.makedirs(self.dbPath)
-        if not os.path.isdir(self.jobPath):
-            os.mkdir(self.jobPath)
-        if not os.path.isdir( self.xml_path ):
-            os.makedirs(self.xml_path )
- 
-        for xml_file in labels:
-           if not os.path.exists( self.xml_path + xml_file + ".xml"  ):
-                self._fetchXML()
-        for xml_file in labels :
-            self.repos.append(XMLRepo( xml_file + ".xml", self.xml_path ))
-
-    def _getJobCachePath(self, applyList):
-        from conary.lib import sha1helper
-        applyStr = '\0'.join(['%s=%s[%s]--%s[%s]%s' % (x[0], x[1][0], x[1][1], x[2][0], x[2][1], x[3]) for x in applyList])
-        return self.jobPath + '/' + sha1helper.sha1ToString(sha1helper.sha1String(applyStr))
-
-    def checkCachedUpdateJob(self, applyList):
-        jobPath = self._getJobCachePath(applyList)
-        if os.path.exists(jobPath):
-            return jobPath
-    
-    def cacheUpdateJob(self, applyList, updJob):
-        jobPath = self._getJobCachePath(applyList)
-        if os.path.exists(jobPath):
-            from conary.lib import util
-            util.rmtree(jobPath)
-        os.mkdir(jobPath)
-        updJob.freeze(jobPath)
-
-    def getTroves(self):
-        pass
-    def searchByGroups(self, groups):
-        pass
-    def refresh(self):
-        self._fetchXML()
-    def resolve(self, name ):
-        for repo in self.repos:
-            r =  repo.resolve(name)
-            if r:
-                return r
-        else:
-            return None
-
-    def search(self, search ):
-        repositories_result = []
-        for repo in self.repos:
-            results = repo.search(search)
-            for i in results:
-                repositories_result.append(i)
-        return repositories_result
-
-    def _fetchXML(self ):
-        con = ConaryPk()
-        labels = con.get_labels_from_config()
-        for i in labels:
-            label = i + '.xml'
-            filename = self.xml_path + label
-            wwwfile = self.server + label
-            wget = url.urlopen( wwwfile )
-            openfile = open( filename ,'w')
-            openfile.writelines(wget.readlines())
-            openfile.close()
-    def _getCategorieBase(self, mapDict, categorieList ):
-        if not categorieList:
-            return None
-
-        tempDict = {}
-        for cat in categorieList:
-
-            if mapDict.has_key(cat):
-                map = mapDict[cat]
-            else:
-                continue
-
-            if tempDict.has_key(map):
-                tempDict[map] = tempDict[map] + 1
-            else:
-                tempDict[map] = 1
-        tmp = 0
-        t_key = ""
-        for key, value in tempDict.items():
-            if value > tmp:
-                t_key =  key
-                tmp  = value
-        return t_key
-
-
-if __name__ == '__main__':
-    from conaryBackend import groupMap
-    XMLCache()._getCategorieBase( groupMap,  ['GTK', 'Graphics', 'Photography', 'Viewer'])
-
diff --git a/backends/conary/XMLCache.py b/backends/conary/XMLCache.py
index 34b64b1..7c712e9 100644
--- a/backends/conary/XMLCache.py
+++ b/backends/conary/XMLCache.py
@@ -20,8 +20,15 @@ class XMLRepo:
         else:
             return None
         
-    def search(self, search):
-        return self._searchPackage(search)
+    def search(self, search, where ):
+        if where == "name":
+            return self._searchNamePackage(search)
+        elif where == "details":
+            return self._searchDetailsPackage(search)
+        elif where == "group":
+            return self._searchGroupPackage(search)
+        else:
+            return self._searchPackage(search)
 
     def _setRepo(self,repo):  
         self.repo = repo
@@ -40,11 +47,11 @@ class XMLRepo:
         pkg = {}
         cat = []
         for node in package_node.childNodes:
-            if pkg.has_key('categorie'):
+            if pkg.has_key('category'):
                 cat.append(str(node.childNodes[0].nodeValue))
             else:
                 pkg[str(node.nodeName)] = str(node.childNodes[0].nodeValue)
-        pkg["categorie"] = cat
+        pkg["category"] = cat
         return pkg
 
     def _getPackage(self, name):
@@ -57,7 +64,34 @@ class XMLRepo:
                 if name == pkg["name"]:
                     return pkg
         return None
-                    
+
+    def _searchNamePackage(self, name):
+        doc = self._open()
+        results = []
+        for packages in doc.childNodes:
+            for package in packages.childNodes:
+                pkg = self._generatePackage(package)
+                pkg["label"] = self.label
+                if name.lower() in pkg["name"]:
+                    results.append(pkg['name'])
+        return  [ self._getPackage(i) for i in set(results) ]
+
+    def _searchGroupPackage(self, name):
+        doc = self._open()
+        results_name = []
+        for packages in doc.childNodes:
+            for package in packages.childNodes:
+                pkg = self._generatePackage(package)
+                pkg["label"] = self.label
+                if not pkg.has_key("category"):
+                    continue
+                for j in pkg["category"]:
+                    if name.lower() in j.lower():
+                        results_name.append(pkg['name'])
+        return [ self._getPackage(i) for i in set(results_name) ]
+
+    def _searchDetailsPackage(self, name):
+        return self._searchPackage(name)
     def _searchPackage(self, name):
         doc = self._open()
         results = []
@@ -68,15 +102,23 @@ class XMLRepo:
                 for i in pkg.keys():
                     if i  == "label":
                         continue
-                    if i =='categorie':
+                    if i =='category':
                         for j in pkg[i]:
                             if name.lower() in j.lower():
-                                results.append(pkg)
+                                results.append(pkg['name'])
                     if name.lower() in pkg[i]:
-                        results.append(pkg)
+                        results.append(pkg['name'])
+        return  [ self._getPackage(i) for i in set(results) ]
+    def _getAllPackages(self):
+        doc = self._open()
+        results = []
+        for packages in doc.childNodes:
+            for package in packages.childNodes:
+                pkg = self._generatePackage(package)
+                pkg["label"] = self.label
+                results.append(pkg)
         return results
 
-        
 
 class XMLCache:
     #xml_files = ["foresight.rpath.org at fl:2"]
@@ -136,10 +178,13 @@ class XMLCache:
         else:
             return None
 
-    def search(self, search ):
+    def search(self, search, where = "name" ):
+        """ 
+            @where (string) values = name | details | group |
+        """
         repositories_result = []
         for repo in self.repos:
-            results = repo.search(search)
+            results = repo.search(search , where )
             for i in results:
                 repositories_result.append(i)
         return repositories_result
@@ -151,7 +196,13 @@ class XMLCache:
             label = i + '.xml'
             filename = self.xml_path + label
             wwwfile = self.server + label
-            wget = url.urlopen( wwwfile )
+            try:
+                wget = url.urlopen( wwwfile )
+            except:
+                from packagekit.backend import PackageKitBaseBackend
+                from packagekit.enums import ERROR_NO_CACHE
+                Pk = PackageKitBaseBackend("")
+                Pk.error(ERROR_NO_CACHE," %s can not open" % wwwfile)
             openfile = open( filename ,'w')
             openfile.writelines(wget.readlines())
             openfile.close()
@@ -178,9 +229,28 @@ class XMLCache:
                 t_key =  key
                 tmp  = value
         return t_key
-
+    def _getAllCategories(self):
+        categories = []
+        for i in self.repos:
+            pkgs = i._getAllPackages()
+            for pkg in pkgs:
+                if pkg.has_key('category'):
+                    for cat in pkg["category"]:
+                        categories.append(cat)
+        categories.sort()
+        return set( categories )
+        
 
 if __name__ == '__main__':
     from conaryBackend import groupMap
-    XMLCache()._getCategorieBase( groupMap,  ['GTK', 'Graphics', 'Photography', 'Viewer'])
+  #  print ">>> name"
+   # print XMLCache().search('music', 'name' )
+   # print ">> details"
+   # l= XMLCache().search('GTK', 'group' )
+   # for v,p in enumerate(l):
+   #     print v,p["name"]
+    print "{",
+    for i in XMLCache()._getAllCategories():
+        print "'%s':" % i
+    print "}",
 
diff --git a/backends/conary/conaryBackend.py b/backends/conary/conaryBackend.py
index c4c4c4d..52334f9 100644
--- a/backends/conary/conaryBackend.py
+++ b/backends/conary/conaryBackend.py
@@ -32,13 +32,13 @@ from conary.conaryclient import cmdline
 
 from packagekit.backend import *
 from packagekit.package import *
+from packagekit.progress import PackagekitProgress
 from conaryCallback import UpdateCallback
 from conaryFilter import *
 from XMLCache import XMLCache as Cache
 from conaryInit import *
 
 # zodman fix
-#from Cache import Cache
 from conaryInit import init_conary_config, init_conary_client
 from conary import conarycfg, conaryclient
 from conarypk import ConaryPk
@@ -117,11 +117,10 @@ for (con_cat, pk_group) in groupMap.items():
 
 #from conary.lib import util
 #sys.excepthook = util.genExcepthook()
-
 def ExceptionHandler(func):
+    return func
     def display(error):
         return str(error).replace('\n', ' ')
-
     def wrapper(self, *args, **kwargs):
         try:
             return func(self, *args, **kwargs)
@@ -137,7 +136,6 @@ def ExceptionHandler(func):
         except Exception, e:
             self.error(ERROR_UNKNOWN, display(e), exit=True)
     return wrapper
-
 def _format_str(str):
     """
     Convert a multi line string to a list separated by ';'
@@ -219,7 +217,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
     @ExceptionHandler
     def get_package_from_id(self, package_id):
         """ package_id(string) =
-        "dpaster;0.1-3-1;x86;/foresight.rpath.org at fl:2-qa/0.1-3-1#{'version': '0.1-3-1', 'categorie': [], 'name': 'dpaster', 'label': 'foresight.rpath.org at fl:2-qa'}"
+        "dpaster;0.1-3-1;x86;/foresight.rpath.org at fl:2-qa/0.1-3-1#{'version': '0.1-3-1', 'category': [], 'name': 'dpaster', 'label': 'foresight.rpath.org at fl:2-qa'}"
         """
         log.info("=========== get package from package_id ======================")
         name, verString, archString, data =  pkpackage.get_package_from_id(package_id)
@@ -229,28 +227,29 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         cli = ConaryPk()
         return  cli.request_query(name)
 
-    def _do_search(self,filters, searchlist):
+    def _do_search(self, filters, searchlist, where = "name"):
         """
          searchlist(str)ist as the package for search like
          filters(str) as the filter
         """
         fltlist = filters.split(';')
-
+        if where != "name" and where != "details" and where != "group":
+            log.info("where %s" % where)
+            self.error(ERROR_UNKNOWN, "DORK---- search where not found")
         cache = Cache()
         log.debug((searchlist, fltlist))
 
-        troveTupleList = cache.search(searchlist)
+        troveTupleList = cache.search(searchlist, where )
 
-        if troveTupleList:
-            log.info("FOUND!!!!!! %s " % troveTupleList )
+        if len(troveTupleList) > 0 :
+            for i in troveTupleList:
+                log.info("FOUND!!!!!! %s " % i["name"] )
+            log.info("FOUND (%s) elements " % len(troveTupleList) )
         else:
             log.info("NOT FOUND %s " % searchlist )
+            self.error(ERROR_PACKAGE_NOT_FOUND, "Not Found %s " % searchlist )
 
-        for troveDict in troveTupleList:
-            log.info(" doing resolve ")
-            log.info(troveDict)
-            self.resolve( fltlist[0] , [ troveDict['name'] ] )
-
+        self._resolve_list( fltlist, troveTupleList  )
 
     def _get_update(self, applyList, cache=True):
         updJob = self.client.newUpdateJob()
@@ -287,18 +286,38 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
             applyList = [(name, (None, None), (version, flavor), True)]
         return self._do_update(applyList)
 
-    def _convertPackage(self, pkg ):
-       #version = versions.ThawVersion(pkg['version'])
-       pass
+    def _resolve_list(self, filters, pkgsList ):
+        log.info("======= _resolve_list =====")
+        specList = []
+        cli = ConaryPk()
+        for pkg in pkgsList:
+            name = pkg["name"]
+            repo = pkg["label"]
+            version = pkg["version"]
+            trove = name, None , cli.flavor
+            specList.append( trove  )
+        trovesList = cli.repos.findTroves(cli.default_label, specList )
+
+        pkgFilter = ConaryFilter(filters)
+        troves = trovesList.values()
+        for trovelst in troves:
+            t = trovelst[0]
+            installed = pkgFilter._pkg_is_installed( t[0] )
+            if installed:
+                pkgFilter.add_installed( trovelst )
+            else:
+                pkgFilter.add_available( trovelst )
+
+       
+        package_list = pkgFilter.post_process()
+        self._show_package_list(package_list)
+ 
     @ExceptionHandler
     def resolve(self, filters, package ):
         """ 
             @filters  (list)  list of filters
             @package (list ) list with packages name for resolve
         """
-        self.allow_cancel(True)
-        self.percentage(None)
-        self.status(STATUS_INFO)
         log.info("======== resolve =========")
         log.info("filters: %s package:%s " % (filters, package))
 
@@ -310,7 +329,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
 
         filter = ConaryFilter(filters)
 
-        installed = filter._pkg_is_installed( pkg_dict )
+        installed = filter._pkg_is_installed( pkg_dict["name"] )
         
         conary_cli = ConaryPk()
 
@@ -327,56 +346,6 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         log.info("package_list %s" % package_list)
         self._show_package_list(package_list)
 
-        #if len(packages):
-        #    for i in packages:
-        #        self._do_search(i, filters)
-        #else:
-        #    self._do_search(packages, filters)
-
-    @ExceptionHandler
-    def search_group(self, filters, key):
-        '''
-        Implement the {backend}-search-name functionality
-        FIXME: Ignoring filters for now.
-        '''
-        self.allow_cancel(True)
-        self.percentage(None)
-        self.status(STATUS_QUERY)
-
-        fltlist = filters.split(';')
-        pkgfilter = ConaryFilter(fltlist)
-        pkgfilter = ConaryFilter(fltlist)
-        cache = Cache()
-
-        try:
-            troveTupleList = cache.searchByGroups(revGroupMap[key])
-        finally:
-            # FIXME: Really need to send an error here
-            pass
-
-        troveTupleList.sort()
-        troveTupleList.reverse()
-
-        for troveTuple in troveTupleList:
-            troveTuple = tuple([item.encode('UTF-8') for item in troveTuple[0:2]])
-            name = troveTuple[0]
-            version = versions.ThawVersion(troveTuple[1])
-            flavor = deps.ThawFlavor(troveTuple[2])
-            category = troveTuple[3][0]
-            category = category.encode('UTF-8')
-            troveTuple = tuple([name, version, flavor])
-            installed = self.check_installed(troveTuple)
-            if installed:
-                pkgfilter.add_installed([troveTuple])
-            else:
-                pkgfilter.add_available([troveTuple])
-
-        # we couldn't do this when generating the list
-        package_list = pkgfilter.post_process()
-        log.info(package_list)
-        log.info("package_list %s" % package_list)
-        self._show_package_list(package_list)
-
     def _show_package_list(self, lst):
         """ 
             HOW its showed on packageKit
@@ -404,19 +373,42 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
             self.package(package_id, status, meta )
 
     @ExceptionHandler
+    def search_group(self, options, searchlist):
+        '''
+        Implement the {backend}-search-group functionality
+        '''
+        log.info("============= search_group ========")
+        self.allow_cancel(True)
+        self.percentage(None)
+        self.status(STATUS_QUERY)
+        log.info("options: %s searchlist:%s "%(options, searchlist))
+        self._do_search(options, searchlist, 'group')
+
+
+    @ExceptionHandler
     def search_name(self, options, searchlist):
         '''
         Implement the {backend}-search-name functionality
         '''
+        log.info("============= search_name ========")
         self.allow_cancel(True)
         self.percentage(None)
         self.status(STATUS_QUERY)
-        log.info("============= search_name ========")
         log.info("options: %s searchlist:%s "%(options, searchlist))
-        self._do_search(options, searchlist)
+        self._do_search(options, searchlist, 'name')
 
-    def search_details(self, opt, key):
-        pass
+    @ExceptionHandler
+    def search_details(self, options, search):
+        '''
+        Implement the {backend}-search-details functionality
+        '''
+        log.info("============= search_details ========")
+        self.allow_cancel(True)
+        #self.percentage(None)
+        self.status(STATUS_QUERY)
+        log.info("options: %s searchlist:%s "%(options, search))
+        self._do_search(options, search, 'details' )
+       
 
     def get_requires(self, filters, package_ids, recursive_text):
         pass
@@ -484,9 +476,6 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         self.status(STATUS_REFRESH_CACHE)
         cache = Cache()
         cache.refresh()
-        #if not cache.is_populate_database:
-        #    self.status(STATUS_WAIT)
-        #    cache.populate_database()
 
     @ExceptionHandler
     def update(self, package_ids):
@@ -646,7 +635,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         #vendor_url = _format_list(urls['vendor'])
         vendor_url = ""
         reboot = "none"
-        desc = self._get_metadata(package_id, 'longDesc') or " "
+        desc = " "
         self.update_detail(package_id, update, obsolete, vendor_url, bz_url, cve_url,
                 reboot, desc, changelog="", state="", issued="", updated="")
 
@@ -690,8 +679,8 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
             url = "http://www.foresightlinux.org/packages/%s.html" % name
 
             categories  = ""
-            if metadata.has_key("categorie"):
-                categories =  Cache()._getCategorieBase( groupMap, metadata['categorie'])
+            if metadata.has_key("category"):
+                categories =  Cache()._getCategorieBase( groupMap, metadata['category'])
             else:
                 categories = None
             # Package size goes here, but I don't know how to find that for conary packages.
@@ -767,7 +756,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         for troveTuple in troveTuples:
             log.info("======== trove ")
             log.info(troveTuple)
-            installed =self.check_installed(troveTuple)
+            installed = self.check_installed(troveTuple)
             log.info(installed)
             name, version, flavor = troveTuple
             return name, version, flavor, installed
@@ -792,10 +781,12 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         '''
         pass
 
+from pkConaryLog import pdb
+
 def main():
     backend = PackageKitConaryBackend('')
     log.info("======== argv =========== ")
-    log.info(sys.argv)
+    log.info(sys.argv[1:])
     backend.dispatcher(sys.argv[1:])
 
 if __name__ == "__main__":
diff --git a/backends/conary/conaryEnums.py b/backends/conary/conaryEnums.py
new file mode 100644
index 0000000..3b96639
--- /dev/null
+++ b/backends/conary/conaryEnums.py
@@ -0,0 +1,54 @@
+from packagekit.enums import *
+"""
+GROUP_ACCESSIBILITY, GROUP_ACCESSORIES, GROUP_ADMIN_TOOLS, GROUP_COLLECTIONS, GROUP_COMMUNICATION, GROUP_DESKTOP_GNOME, GROUP_DESKTOP_KDE, GROUP_DESKTOP_OTHER, GROUP_DESKTOP_XFCE, GROUP_DOCUMENTATION, GROUP_EDUCATION, GROUP_ELECTRONICS, GROUP_FONTS, GROUP_GAMES, GROUP_GRAPHICS, GROUP_INTERNET, GROUP_LEGACY, GROUP_LOCALIZATION, GROUP_MAPS, GROUP_MULTIMEDIA, GROUP_NETWORK, GROUP_NEWEST, GROUP_OFFICE, GROUP_OTHER, GROUP_POWER_MANAGEMENT, GROUP_PROGRAMMING, GROUP_PUBLISHING, GROUP_REPOS, GROUP_SCIENCE, GROUP_SECURITY, GROUP_SERVERS, GROUP_SYSTEM, GROUP_UNKNOWN, GROUP_VENDOR, GROUP_VIRTUALIZATION,
+"""
+
+"""
+Classify the Categories and help me to make a backend
+
+"""
+
+categoryMap { 
+'VectorGraphics':
+'Network': GROUP_NETWORK
+'Spreadsheet': GROUP_OFFICE
+'Application':
+'X-GNOME-NetworkSettings':
+'Music': GROUP_MULTIMEDIA
+'P2P':
+'WordProcessor': GROUP_OFFICE
+'X-GNOME-PersonalSettings':
+'Presentation': GROUP_OFFICE
+'Email': GROUP_OFFICE
+'Monitor':
+'Development':
+'Core':
+'RasterGraphics':
+'Telephony':
+'Photography':
+'HardwareSettings':
+'News':
+'X-SuSE-Core-Office':
+'X-Red-Hat-Base':
+'GNOME':
+'Settings':
+'GTK':
+'System':
+'Graphics': GROUP_GRAPHICS
+'X-Ximian-Main':
+'Security':
+'Audio':
+'ContactManagement':
+'X-Novell-Main':
+'AudioVideo':
+'WebDevelopment':
+'X-GNOME-SystemSettings':
+'Office': GROUP_OFFICE
+'Viewer':
+'Player':
+'DesktopSettings':
+'WebBrowser': GROUP_INTERNET
+'Utility':
+'GUIDesigner':
+'TerminalEmulator':
+}
diff --git a/backends/conary/conaryFilter.py b/backends/conary/conaryFilter.py
index 7475213..20bd4bf 100644
--- a/backends/conary/conaryFilter.py
+++ b/backends/conary/conaryFilter.py
@@ -46,7 +46,8 @@ class ConaryFilter(PackagekitFilter):
         Return if the packages are installed
         '''
         conary_cli = ConaryPk()
-        result = conary_cli.query(pkg['name'])
+        result = conary_cli.query(pkg)
+            
         if result:
             return True
         else:
diff --git a/backends/conary/conarypk.py b/backends/conary/conarypk.py
index d44f14e..3581362 100644
--- a/backends/conary/conarypk.py
+++ b/backends/conary/conarypk.py
@@ -51,6 +51,7 @@ class ConaryPk:
             if "foresight.rpath.org" in i.asString():
                 labels.append(i.asString())
         return labels
+
     def query(self, name):
         """ do a conary query """
         if name is None or name == "":
diff --git a/backends/conary/pk-backend-conary.c b/backends/conary/pk-backend-conary.c
index 936e190..df3c9a6 100644
--- a/backends/conary/pk-backend-conary.c
+++ b/backends/conary/pk-backend-conary.c
@@ -239,6 +239,32 @@ backend_search_name (PkBackend *backend, PkBitfield filters, const gchar *search
 }
 
 /**
+    pk_backend_search_groups
+*/
+static void
+backend_search_group (PkBackend *backend, PkBitfield filters, const gchar *search)
+{
+	gchar *filters_text;
+	filters_text = pk_filter_bitfield_to_text (filters);
+	pk_backend_spawn_helper (spawn, "conaryBackend.py", "search-group", filters_text, search, NULL);
+	g_free (filters_text);
+}
+
+
+
+/**
+    pk_backend_search_details
+*/
+static void
+backend_search_details (PkBackend *backend, PkBitfield filters, const gchar *search)
+{
+	gchar *filters_text;
+	filters_text = pk_filter_bitfield_to_text (filters);
+	pk_backend_spawn_helper (spawn, "conaryBackend.py", "search-details", filters_text, search, NULL);
+	g_free (filters_text);
+}
+
+/**
  * pk_backend_update_packages:
  */
 static void
@@ -324,9 +350,9 @@ PK_BACKEND_OPTIONS (
 	NULL,					/* repo_set_data */
 	backend_resolve,			/* resolve */
 	NULL,					/* rollback */
-	NULL,					/* search_details */
+	backend_search_details,					/* search_details */
 	NULL,					/* search_file */
-	NULL,					/* search_group */
+	backend_search_group,					/* search_group */
 	backend_search_name,			/* search_name */
 	backend_update_packages,		/* update_packages */
 	backend_update_system,			/* update_system */
commit 982b9c922e9d9509bd5e3b7ca5dd346e3326cf99
Merge: 57b67a0... 26fc8db...
Author: zodman <zodman at cosmogirl.(none)>
Date:   Wed Feb 11 08:02:33 2009 -0600

    Merge branch 'master' of git+ssh://zodman@git.packagekit.org/srv/git/PackageKit

commit 26fc8dbcf124324dfc8005730ffeb3900fb4713e
Author: Daniel Nylander <po at danielnylander.se>
Date:   Wed Feb 11 10:44:21 2009 +0000

    Updated Swedish translation
    
    Transmitted-via: Transifex (translate.fedoraproject.org)

diff --git a/po/sv.po b/po/sv.po
index 44bb176..dc9b2be 100644
--- a/po/sv.po
+++ b/po/sv.po
@@ -1,605 +1,433 @@
 # Swedish translation for packagekit.
-# Copyright (C) 2008 Free Software Foundation, Inc.
+# Copyright (C) 2008, 2009 Free Software Foundation, Inc.
 # This file is distributed under the same license as the packagekit package.
-# Daniel Nylander <po at danielnylander.se>, 2008.
+# Daniel Nylander <po at danielnylander.se>, 2008, 2009.
 #
 msgid ""
 msgstr ""
 "Project-Id-Version: packagekit\n"
 "Report-Msgid-Bugs-To: \n"
-"POT-Creation-Date: 2009-01-15 16:57+0000\n"
-"PO-Revision-Date: 2008-12-01 23:32+0100\n"
+"POT-Creation-Date: 2008-11-24 01:31+0000\n"
+"PO-Revision-Date: 2009-02-11 11:39+0100\n"
 "Last-Translator: Daniel Nylander <po at danielnylander.se>\n"
 "Language-Team: Swedish <tp-sv at listor.tp-sv.se>\n"
 "MIME-Version: 1.0\n"
 "Content-Type: text/plain; charset=utf-8\n"
 "Content-Transfer-Encoding: 8bit\n"
-
-#. TRANSLATORS: this is an atomic transaction
-#: ../client/pk-console.c:230
-msgid "Transaction"
-msgstr ""
-
-#. TRANSLATORS: this is the time the transaction was started in system timezone
-#: ../client/pk-console.c:232
-msgid "System time"
-msgstr ""
-
-#. TRANSLATORS: this is if the transaction succeeded or not
-#: ../client/pk-console.c:234
-msgid "Succeeded"
-msgstr ""
-
-#. TRANSLATORS: if the repo is enabled
-#: ../client/pk-console.c:234 ../client/pk-console.c:377
-msgid "True"
-msgstr ""
-
-#: ../client/pk-console.c:234 ../client/pk-console.c:377
-msgid "False"
-msgstr ""
-
-#. TRANSLATORS: this is the transactions role, e.g. "update-system"
-#: ../client/pk-console.c:236
-msgid "Role"
-msgstr ""
-
-#. TRANSLATORS: this is The duration of the transaction
-#: ../client/pk-console.c:241
-msgid "Duration"
-msgstr ""
-
-#: ../client/pk-console.c:241
-msgid "(seconds)"
-msgstr ""
-
-#. TRANSLATORS: this is The command line used to do the action
-#: ../client/pk-console.c:245
-#, fuzzy
-msgid "Command line"
-msgstr "Kommandot misslyckades"
-
-#. TRANSLATORS: this is the user ID of the user that started the action
-#: ../client/pk-console.c:247
-msgid "User ID"
-msgstr ""
-
-#. TRANSLATORS: this is the username, e.g. hughsie
-#: ../client/pk-console.c:254
-msgid "Username"
-msgstr ""
-
-#. TRANSLATORS: this is the users real name, e.g. "Richard Hughes"
-#: ../client/pk-console.c:258
-msgid "Real name"
-msgstr ""
-
-#: ../client/pk-console.c:266
-#, fuzzy
-msgid "Affected packages:"
-msgstr "Uppdatera paket"
-
-#: ../client/pk-console.c:268
-msgid "Affected packages: None"
-msgstr ""
-
-#. TRANSLATORS: this is the distro, e.g. Fedora 10
-#: ../client/pk-console.c:293
-msgid "Distribution"
-msgstr ""
-
-#. TRANSLATORS: this is type of update, stable or testing
-#: ../client/pk-console.c:295
-msgid "Type"
-msgstr ""
-
-#. TRANSLATORS: this is any summary text describing the upgrade
-#. TRANSLATORS: this is the summary of the group
-#: ../client/pk-console.c:297 ../client/pk-console.c:319
-msgid "Summary"
-msgstr ""
-
-#. TRANSLATORS: this is the group category name
-#: ../client/pk-console.c:309
-msgid "Category"
-msgstr ""
-
-#. TRANSLATORS: this is group identifier
-#: ../client/pk-console.c:311
-msgid "ID"
-msgstr ""
-
-#. TRANSLATORS: this is the parent group
-#: ../client/pk-console.c:314
-msgid "Parent"
-msgstr ""
-
-#: ../client/pk-console.c:316
-msgid "Name"
-msgstr ""
-
-#. TRANSLATORS: this is preferred icon for the group
-#: ../client/pk-console.c:322
-msgid "Icon"
-msgstr ""
+"Plural-Forms: nplurals=2; plural=n != 1;\n"
 
 #. TRANSLATORS: this is a header for the package that can be updated
-#: ../client/pk-console.c:337
+#: ../client/pk-console.c:287
 msgid "Details about the update:"
 msgstr "Detaljer om uppdateringen:"
 
-#: ../client/pk-console.c:338
-#, fuzzy
-msgid "Package"
-msgstr "Paketfiler"
-
-#: ../client/pk-console.c:340
-#, fuzzy
-msgid "Updates"
-msgstr "Uppdatera paket"
-
-#: ../client/pk-console.c:342
-msgid "Obsoletes"
-msgstr ""
-
-#: ../client/pk-console.c:344
-msgid "Vendor"
-msgstr ""
-
-#: ../client/pk-console.c:346
-msgid "Bugzilla"
-msgstr ""
-
-#: ../client/pk-console.c:348
-msgid "CVE"
-msgstr ""
-
-#: ../client/pk-console.c:350
-msgid "Restart"
-msgstr ""
-
-#: ../client/pk-console.c:352
-#, fuzzy
-msgid "Update text"
-msgstr "Uppdateringsinformation"
-
-#: ../client/pk-console.c:354
-msgid "Changes"
-msgstr ""
-
-#: ../client/pk-console.c:356
-msgid "State"
-msgstr ""
-
-#: ../client/pk-console.c:359
-msgid "Issued"
-msgstr ""
-
-#: ../client/pk-console.c:362
-#, fuzzy
-msgid "Updated"
-msgstr "Uppdateringsinformation"
-
-#: ../client/pk-console.c:448 ../client/pk-console.c:450
-msgid "Percentage"
-msgstr ""
-
-#: ../client/pk-console.c:450
-msgid "Unknown"
-msgstr ""
-
-#. TRANSLATORS: a package requires the system to be restarted
-#: ../client/pk-console.c:501
-#, fuzzy
-msgid "System restart required by:"
-msgstr "En omstart av systemet krävs"
-
-#. TRANSLATORS: a package requires the session to be restarted
-#: ../client/pk-console.c:504
-#, fuzzy
-msgid "Session restart required:"
-msgstr "En omstart av systemet krävs"
-
-#. TRANSLATORS: a package requires the application to be restarted
-#: ../client/pk-console.c:507
-#, fuzzy
-msgid "Application restart required by:"
-msgstr "En omstart av programmet krävs"
-
-#: ../client/pk-console.c:543
+#: ../client/pk-console.c:480
 msgid "Please restart the computer to complete the update."
 msgstr "Starta om datorn för att färdigställa uppdateringen."
 
-#: ../client/pk-console.c:545
+#: ../client/pk-console.c:482
 msgid "Please logout and login to complete the update."
 msgstr "Logga ut och logga in igen för att färdigställa uppdateringen."
 
-#: ../client/pk-console.c:547
+#: ../client/pk-console.c:484
 msgid "Please restart the application as it is being used."
 msgstr "Starta om programmet eftersom det används för tillfället."
 
 #. TRANSLATORS: The package is already installed on the system
-#: ../client/pk-console.c:659
+#: ../client/pk-console.c:596
 #, c-format
 msgid "The package %s is already installed"
 msgstr "Paketet %s är redan installerat"
 
 #. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console.c:667
+#: ../client/pk-console.c:604
 #, c-format
 msgid "The package %s could not be installed: %s"
 msgstr "Paketet %s kunde inte installeras: %s"
 
 #. TRANSLATORS: There was a programming error that shouldn't happen. The detailed error follows
-#: ../client/pk-console.c:692 ../client/pk-console.c:719
-#: ../client/pk-console.c:815 ../client/pk-console.c:932
-#: ../client/pk-tools-common.c:61 ../client/pk-tools-common.c:79
+#: ../client/pk-console.c:629
+#: ../client/pk-console.c:656
+#: ../client/pk-console.c:752
+#: ../client/pk-console.c:869
+#: ../client/pk-tools-common.c:61
+#: ../client/pk-tools-common.c:79
 #: ../client/pk-tools-common.c:86
 #, c-format
 msgid "Internal error: %s"
 msgstr "Internt fel: %s"
 
 #. TRANSLATORS: There was an error installing the packages. The detailed error follows
-#: ../client/pk-console.c:700 ../client/pk-console.c:1327
+#: ../client/pk-console.c:637
+#: ../client/pk-console.c:1264
 #, c-format
 msgid "This tool could not install the packages: %s"
 msgstr "Detta verktyg kunde inte installera paketen: %s"
 
 #. TRANSLATORS: There was an error installing the files. The detailed error follows
-#: ../client/pk-console.c:727
+#: ../client/pk-console.c:664
 #, c-format
 msgid "This tool could not install the files: %s"
 msgstr "Detta verktyg kunde inte installera filerna: %s"
 
 #. TRANSLATORS: The package name was not found in the installed list. The detailed error follows
-#: ../client/pk-console.c:783
+#: ../client/pk-console.c:720
 #, c-format
 msgid "This tool could not remove %s: %s"
 msgstr "Detta verktyg kunde inte ta bort %s: %s"
 
 #. TRANSLATORS: There was an error removing the packages. The detailed error follows
-#: ../client/pk-console.c:806 ../client/pk-console.c:844
-#: ../client/pk-console.c:877
+#: ../client/pk-console.c:743
+#: ../client/pk-console.c:781
+#: ../client/pk-console.c:814
 #, c-format
 msgid "This tool could not remove the packages: %s"
 msgstr "Detta verktyg kunde inte ta bort paketen: %s"
 
 #. TRANSLATORS: When removing, we might have to remove other dependencies
-#: ../client/pk-console.c:856
+#: ../client/pk-console.c:793
 msgid "The following packages have to be removed:"
 msgstr "Följande paket måste tas bort:"
 
 #. TRANSLATORS: We are checking if it's okay to remove a list of packages
-#: ../client/pk-console.c:863
+#: ../client/pk-console.c:800
 msgid "Proceed removing additional packages?"
 msgstr "Fortsätt med att ta bort ytterligare paket?"
 
 #. TRANSLATORS: We did not remove any packages
-#: ../client/pk-console.c:868
+#: ../client/pk-console.c:805
 msgid "The package removal was canceled!"
 msgstr "Paketborttagningen avbröts!"
 
 #. TRANSLATORS: The package name was not found in any software sources
-#: ../client/pk-console.c:909
+#: ../client/pk-console.c:846
 #, c-format
 msgid "This tool could not download the package %s as it could not be found"
-msgstr ""
-"Detta verktyg kunde inte hämta paketet \"%s\" eftersom det inte hittades"
+msgstr "Detta verktyg kunde inte hämta paketet %s eftersom det inte hittades"
 
 #. TRANSLATORS: Could not download the packages for some reason. The detailed error follows
-#: ../client/pk-console.c:940
+#: ../client/pk-console.c:877
 #, c-format
 msgid "This tool could not download the packages: %s"
 msgstr "Detta verktyg kunde inte hämta paketen: %s"
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:967 ../client/pk-console.c:976
+#: ../client/pk-console.c:904
+#: ../client/pk-console.c:913
 #, c-format
 msgid "This tool could not update %s: %s"
 msgstr "Detta verktyg kunde inte uppdatera %s: %s"
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:998 ../client/pk-console.c:1006
+#: ../client/pk-console.c:935
+#: ../client/pk-console.c:943
 #, c-format
 msgid "This tool could not get the requirements for %s: %s"
 msgstr "Detta verktyg kunde inte få tag på kraven för %s: %s"
 
 #. TRANSLATORS: There was an error getting the dependencies for the package. The detailed error follows
-#: ../client/pk-console.c:1028 ../client/pk-console.c:1036
+#: ../client/pk-console.c:965
+#: ../client/pk-console.c:973
 #, c-format
 msgid "This tool could not get the dependencies for %s: %s"
-msgstr "Detta verktyg kunde inte få tag på beroenden för %s: %s"
+msgstr "Detta verktyg kunde inte få tag på beroenden för detta %s: %s"
 
 #. TRANSLATORS: There was an error getting the details about the package. The detailed error follows
-#: ../client/pk-console.c:1058 ../client/pk-console.c:1066
+#: ../client/pk-console.c:995
+#: ../client/pk-console.c:1003
 #, c-format
 msgid "This tool could not get package details for %s: %s"
 msgstr "Detta verktyg kunde inte få tag på paketdetaljerna för %s: %s"
 
 #. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console.c:1088
+#: ../client/pk-console.c:1025
 #, c-format
 msgid "This tool could not find the files for %s: %s"
 msgstr "Detta verktyg kunde inte hitta filerna för %s: %s"
 
 #. TRANSLATORS: There was an error getting the list of files for the package. The detailed error follows
-#: ../client/pk-console.c:1096
+#: ../client/pk-console.c:1033
 #, c-format
 msgid "This tool could not get the file list for %s: %s"
 msgstr "Detta verktyg kunde inte få tag på fillistan för %s: %s"
 
 #. TRANSLATORS: There was an error getting the list of packages. The filename follows
-#: ../client/pk-console.c:1118
+#: ../client/pk-console.c:1055
 #, c-format
 msgid "File already exists: %s"
 msgstr "Filen finns redan: %s"
 
 #. TRANSLATORS: follows a list of packages to install
-#: ../client/pk-console.c:1123 ../client/pk-console.c:1179
-#: ../client/pk-console.c:1254
+#: ../client/pk-console.c:1060
+#: ../client/pk-console.c:1116
+#: ../client/pk-console.c:1191
 msgid "Getting package list"
 msgstr "Hämtar paketlista"
 
 #. TRANSLATORS: There was an error getting the list of packages. The detailed error follows
-#: ../client/pk-console.c:1129 ../client/pk-console.c:1185
-#: ../client/pk-console.c:1260
+#: ../client/pk-console.c:1066
+#: ../client/pk-console.c:1122
+#: ../client/pk-console.c:1197
 #, c-format
 msgid "This tool could not get package list: %s"
-msgstr "Detta verktyg kunde inte få tag på paketlista: %s"
+msgstr "Detta verktyg kunde inte få tag på paketlistan: %s"
 
 #. TRANSLATORS: There was an error saving the list
-#: ../client/pk-console.c:1140
-#, c-format
+#: ../client/pk-console.c:1077
 msgid "Failed to save to disk"
 msgstr "Misslyckades med att spara till disk"
 
 #. TRANSLATORS: There was an error getting the list. The filename follows
-#: ../client/pk-console.c:1174 ../client/pk-console.c:1249
+#: ../client/pk-console.c:1111
+#: ../client/pk-console.c:1186
 #, c-format
 msgid "File does not exist: %s"
 msgstr "Filen finns inte: %s"
 
 #. TRANSLATORS: header to a list of packages newly added
-#: ../client/pk-console.c:1206
+#: ../client/pk-console.c:1143
 msgid "Packages to add"
 msgstr "Paket att lägga till"
 
 #. TRANSLATORS: header to a list of packages removed
-#: ../client/pk-console.c:1214
+#: ../client/pk-console.c:1151
 msgid "Packages to remove"
 msgstr "Paket att ta bort"
 
 #. TRANSLATORS: We didn't find any differences
-#: ../client/pk-console.c:1282
-#, c-format
+#: ../client/pk-console.c:1219
 msgid "No new packages need to be installed"
 msgstr "Inga nya paket behöver installeras"
 
 #. TRANSLATORS: follows a list of packages to install
-#: ../client/pk-console.c:1288
+#: ../client/pk-console.c:1225
 msgid "To install"
 msgstr "Att installera"
 
 #. TRANSLATORS: searching takes some time....
-#: ../client/pk-console.c:1299
+#: ../client/pk-console.c:1236
 msgid "Searching for package: "
 msgstr "Söker efter paket: "
 
 #. TRANSLATORS: package was not found -- this is the end of a string ended in ...
-#: ../client/pk-console.c:1303
+#: ../client/pk-console.c:1240
 msgid "not found."
 msgstr "hittades inte."
 
 #. TRANSLATORS: We didn't find any packages to install
-#: ../client/pk-console.c:1314
-#, c-format
+#: ../client/pk-console.c:1251
 msgid "No packages can be found to install"
-msgstr "Inga paket för installation hittades"
+msgstr "Inga paket hittades för installation"
 
 #. TRANSLATORS: installing new packages from package list
-#: ../client/pk-console.c:1320
+#: ../client/pk-console.c:1257
 msgid "Installing packages"
 msgstr "Installerar paket"
 
 #. TRANSLATORS: The package name was not found in any software sources. The detailed error follows
-#: ../client/pk-console.c:1356
+#: ../client/pk-console.c:1293
 #, c-format
 msgid "This tool could not find the update details for %s: %s"
 msgstr "Detta verktyg kunde inte hitta uppdateringsdetaljer för %s: %s"
 
 #. TRANSLATORS: There was an error getting the details about the update for the package. The detailed error follows
-#: ../client/pk-console.c:1364
+#: ../client/pk-console.c:1301
 #, c-format
 msgid "This tool could not get the update details for %s: %s"
 msgstr "Detta verktyg kunde inte få tag på uppdateringsdetaljer för %s: %s"
 
 #. TRANSLATORS: This was an unhandled error, and we don't have _any_ context
-#: ../client/pk-console.c:1410
+#: ../client/pk-console.c:1347
 msgid "Error:"
 msgstr "Fel:"
 
 #. TRANSLATORS: This a list of details about the package
-#: ../client/pk-console.c:1424
+#: ../client/pk-console.c:1361
 msgid "Package description"
 msgstr "Paketbeskrivning"
 
 #. TRANSLATORS: This a list files contained in the package
-#: ../client/pk-console.c:1458
+#: ../client/pk-console.c:1394
 msgid "Package files"
 msgstr "Paketfiler"
 
 #. TRANSLATORS: This where the package has no files
-#: ../client/pk-console.c:1466
+#: ../client/pk-console.c:1403
 msgid "No files"
 msgstr "Inga filer"
 
 #. TRANSLATORS: This a request for a GPG key signature from the backend, which the client will prompt for later
-#: ../client/pk-console.c:1489
+#: ../client/pk-console.c:1426
 msgid "Repository signature required"
 msgstr "Förrådssignatur krävs"
 
 #. TRANSLATORS: This a prompt asking the user to import the security key
-#: ../client/pk-console.c:1499
+#: ../client/pk-console.c:1436
 msgid "Do you accept this signature?"
 msgstr "Godkänner du denna signatur?"
 
 #. TRANSLATORS: This is where the user declined the security key
-#: ../client/pk-console.c:1503
+#: ../client/pk-console.c:1440
 msgid "The signature was not accepted."
 msgstr "Signaturen godkändes inte."
 
 #. TRANSLATORS: This a request for a EULA
-#: ../client/pk-console.c:1537
+#: ../client/pk-console.c:1474
 msgid "End user license agreement required"
 msgstr "Godkännande av slutanvändaravtal krävs"
 
 #. TRANSLATORS: This a prompt asking the user to agree to the license
-#: ../client/pk-console.c:1544
+#: ../client/pk-console.c:1481
 msgid "Do you agree to this license?"
 msgstr "Godkänner du denna licens?"
 
 #. TRANSLATORS: This is where the user declined the license
-#: ../client/pk-console.c:1548
+#: ../client/pk-console.c:1485
 msgid "The license was refused."
 msgstr "Licensen nekades."
 
 #. TRANSLATORS: This is when the daemon crashed, and we are up shit creek without a paddle
-#: ../client/pk-console.c:1577
+#: ../client/pk-console.c:1514
 msgid "The daemon crashed mid-transaction!"
 msgstr "Demonen kraschade mitt under transaktionen!"
 
 #. TRANSLATORS: This is the header to the --help menu
-#: ../client/pk-console.c:1630
+#: ../client/pk-console.c:1567
 msgid "PackageKit Console Interface"
 msgstr "Konsollgränssnitt för PackageKit"
 
-#: ../client/pk-console.c:1630
+#: ../client/pk-console.c:1567
 msgid "Subcommands:"
 msgstr "Underkommandon:"
 
-#: ../client/pk-console.c:1719 ../client/pk-generate-pack.c:184
+#: ../client/pk-console.c:1658
+#: ../client/pk-generate-pack.c:184
 #: ../client/pk-monitor.c:115
-#: ../contrib/command-not-found/pk-command-not-found.c:510
-#: ../src/pk-main.c:192
+#: ../src/pk-main.c:191
 msgid "Show extra debugging information"
 msgstr "Visa extra felsökningsinformation"
 
-#: ../client/pk-console.c:1721 ../client/pk-monitor.c:117
+#: ../client/pk-console.c:1660
+#: ../client/pk-monitor.c:117
 msgid "Show the program version and exit"
 msgstr "Visa programversion och avsluta"
 
-#: ../client/pk-console.c:1723
+#: ../client/pk-console.c:1662
 msgid "Set the filter, e.g. installed"
 msgstr "Ange filtret, t.ex. installed"
 
-#: ../client/pk-console.c:1725
+#: ../client/pk-console.c:1664
 msgid "Exit without waiting for actions to complete"
 msgstr "Avsluta utan att vänta på att åtgärder ska färdigställas"
 
 #. TRANSLATORS: This is when we could not connect to the system bus, and is fatal
-#: ../client/pk-console.c:1752
+#: ../client/pk-console.c:1691
 msgid "This tool could not connect to system DBUS."
 msgstr "Detta verktyg kunde inte ansluta till systemets DBUS."
 
 #. TRANSLATORS: The user specified an incorrect filter
-#: ../client/pk-console.c:1839
+#: ../client/pk-console.c:1776
 msgid "The filter specified was invalid"
-msgstr "Filtret som angavs var ogiltigt"
+msgstr "Angivet filter var ogiltigt"
 
-#: ../client/pk-console.c:1856
+#: ../client/pk-console.c:1793
 msgid "You need to specify a search type, e.g. name"
 msgstr "Du måste ange en söktyp, t.ex. name"
 
-#: ../client/pk-console.c:1861 ../client/pk-console.c:1868
-#: ../client/pk-console.c:1875 ../client/pk-console.c:1882
-#: ../client/pk-console.c:1990 ../client/pk-console.c:2000
-#: ../client/pk-console.c:2007 ../client/pk-console.c:2014
+#: ../client/pk-console.c:1798
+#: ../client/pk-console.c:1805
+#: ../client/pk-console.c:1812
+#: ../client/pk-console.c:1819
+#: ../client/pk-console.c:1930
+#: ../client/pk-console.c:1940
+#: ../client/pk-console.c:1947
+#: ../client/pk-console.c:1954
 msgid "You need to specify a search term"
 msgstr "Du måste ange en sökterm"
 
-#: ../client/pk-console.c:1887
+#: ../client/pk-console.c:1824
 msgid "Invalid search type"
 msgstr "Ogiltig söktyp"
 
-#: ../client/pk-console.c:1892
+#: ../client/pk-console.c:1829
 msgid "You need to specify a package or file to install"
 msgstr "Du måste ange ett paket eller fil att installera"
 
-#: ../client/pk-console.c:1899
+#: ../client/pk-console.c:1836
 msgid "You need to specify a type, key_id and package_id"
 msgstr "Du måste ange en type, key_id och package_id"
 
-#: ../client/pk-console.c:1906
+#: ../client/pk-console.c:1843
 msgid "You need to specify a package to remove"
 msgstr "Du måste ange ett paket att ta bort"
 
-#: ../client/pk-console.c:1912
-msgid ""
-"You need to specify the destination directory and then the packages to "
-"download"
+#: ../client/pk-console.c:1849
+msgid "You need to specify the destination directory and then the packages to download"
 msgstr "Du måste ange målkatalogen och sedan paketen som ska hämtas"
 
-#: ../client/pk-console.c:1917
+#: ../client/pk-console.c:1854
 msgid "Directory not found"
 msgstr "Katalogen hittades inte"
 
-#: ../client/pk-console.c:1923
+#: ../client/pk-console.c:1860
 msgid "You need to specify a licence identifier (eula-id)"
 msgstr "Du måste ange en licensidentifierare (eula-id)"
 
-#: ../client/pk-console.c:1939
+#: ../client/pk-console.c:1876
 msgid "You need to specify a package name to resolve"
 msgstr "Du måste ange ett paketnamn att lösa"
 
-#: ../client/pk-console.c:1946 ../client/pk-console.c:1953
+#: ../client/pk-console.c:1885
+#: ../client/pk-console.c:1892
 msgid "You need to specify a repository name"
 msgstr "Du måste ange ett förrådsnamn"
 
-#: ../client/pk-console.c:1960
+#: ../client/pk-console.c:1899
 msgid "You need to specify a repo name/parameter and value"
-msgstr "Du måste ange ett förrådsnamn/-parameter och värde"
+msgstr "Du måste ange ett förrådsnamn/parameter och värde"
 
-#: ../client/pk-console.c:1972
+#: ../client/pk-console.c:1912
 msgid "You need to specify an action, e.g. 'update-system'"
 msgstr "Du måste ange en åtgärd, t.ex. \"update-system\""
 
-#: ../client/pk-console.c:1977
+#: ../client/pk-console.c:1917
 msgid "You need to specify a correct role"
 msgstr "Du måste ange en korrekt roll"
 
-#: ../client/pk-console.c:1982
+#: ../client/pk-console.c:1922
 msgid "Failed to get last time"
 msgstr "Misslyckades med att få tag på senaste tid"
 
-#: ../client/pk-console.c:2021
+#: ../client/pk-console.c:1961
 msgid "You need to specify a package to find the details for"
 msgstr "Du måste ange ett paket att söka information om"
 
-#: ../client/pk-console.c:2028
+#: ../client/pk-console.c:1968
 msgid "You need to specify a package to find the files for"
 msgstr "Du måste ange ett paket att söka efter filerna för"
 
-#: ../client/pk-console.c:2035
+#: ../client/pk-console.c:1975
 msgid "You need to specify a list file to create"
 msgstr "Du måste ange en listfil att skapa"
 
-#: ../client/pk-console.c:2043 ../client/pk-console.c:2051
+#: ../client/pk-console.c:1983
+#: ../client/pk-console.c:1991
 msgid "You need to specify a list file to open"
 msgstr "Du måste ange en listfil att öppna"
 
 #. TRANSLATORS: The user tried to use an unsupported option on the command line
-#: ../client/pk-console.c:2104
+#: ../client/pk-console.c:2044
 #, c-format
 msgid "Option '%s' is not supported"
 msgstr "Flaggan \"%s\" stöds inte"
 
 #. TRANSLATORS: User does not have permission to do this
-#: ../client/pk-console.c:2117
+#: ../client/pk-console.c:2057
 msgid "You don't have the necessary privileges for this operation"
 msgstr "Du har inte den nödvändiga behörigheten för denna åtgärd"
 
 #. TRANSLATORS: Generic failure of what they asked to do
-#: ../client/pk-console.c:2120
+#: ../client/pk-console.c:2060
 msgid "Command failed"
 msgstr "Kommandot misslyckades"
 
@@ -698,7 +526,6 @@ msgstr "Övervakare för PackageKit"
 
 #. TRANSLATORS: The package was not found in any software sources
 #: ../client/pk-tools-common.c:114
-#, c-format
 msgid "The package could not be found"
 msgstr "Paketet kunde inte hittas"
 
@@ -712,138 +539,61 @@ msgstr "Det finns fler än ett paket som matchar:"
 msgid "Please choose the correct package: "
 msgstr "Välj det korrekta paketet: "
 
-#: ../client/pk-tools-common.c:157
+#: ../client/pk-tools-common.c:158
 #, c-format
 msgid "Please enter a number from 1 to %i: "
 msgstr "Ange ett tal från 1 till %i: "
 
-#. TRANSLATORS: we failed to find the package, this shouldn't happen
-#: ../contrib/command-not-found/pk-command-not-found.c:361
-#, fuzzy
-msgid "Failed to search for file"
-msgstr "Misslyckades med att spara till disk"
-
-#. TRANSLATORS: we failed to launch the executable, the error follows
-#: ../contrib/command-not-found/pk-command-not-found.c:485
-#, fuzzy
-msgid "Failed to launch:"
-msgstr "Misslyckades med att få tag på senaste tid"
-
-#. TRANSLATORS: tool that gets called when the command is not found
-#: ../contrib/command-not-found/pk-command-not-found.c:526
-#, fuzzy
-msgid "PackageKit Command Not Found"
-msgstr "Övervakare för PackageKit"
-
-#. TRANSLATORS: the prefix of all the output telling the user why it's not executing
-#: ../contrib/command-not-found/pk-command-not-found.c:548
-#, fuzzy
-msgid "Command not found."
-msgstr "hittades inte."
-
-#. TRANSLATORS: tell the user what we think the command is
-#: ../contrib/command-not-found/pk-command-not-found.c:555
-#, fuzzy
-msgid "Similar command is:"
-msgstr "Underkommandon:"
-
-#. TRANSLATORS: Ask the user if we should run the similar command
-#: ../contrib/command-not-found/pk-command-not-found.c:564
-msgid "Run similar command:"
-msgstr ""
-
-#. TRANSLATORS: show the user a list of commands that they could have meant
-#. TRANSLATORS: show the user a list of commands we could run
-#: ../contrib/command-not-found/pk-command-not-found.c:576
-#: ../contrib/command-not-found/pk-command-not-found.c:585
-#, fuzzy
-msgid "Similar commands are:"
-msgstr "Underkommandon:"
-
-#. TRANSLATORS: ask the user to choose a file to run
-#: ../contrib/command-not-found/pk-command-not-found.c:592
-msgid "Please choose a command to run"
-msgstr ""
-
-#. TRANSLATORS: tell the user what package provides the command
-#: ../contrib/command-not-found/pk-command-not-found.c:607
-#, fuzzy
-msgid "The package providing this file is:"
-msgstr "Paketet %s är redan installerat"
-
-#. TRANSLATORS: as the user if we want to install a package to provide the command
-#: ../contrib/command-not-found/pk-command-not-found.c:612
-#, c-format
-msgid "Install package '%s' to provide command '%s'?"
-msgstr ""
-
-#. TRANSLATORS: Show the user a list of packages that provide this command
-#: ../contrib/command-not-found/pk-command-not-found.c:633
-msgid "Packages providing this file are:"
-msgstr ""
-
-#. TRANSLATORS: Show the user a list of packages that they can install to provide this command
-#: ../contrib/command-not-found/pk-command-not-found.c:642
-msgid "Suitable packages are:"
-msgstr ""
-
-#. get selection
-#. TRANSLATORS: ask the user to choose a file to install
-#: ../contrib/command-not-found/pk-command-not-found.c:650
-#, fuzzy
-msgid "Please choose a package to install"
-msgstr "Välj det korrekta paketet: "
-
 #. TRANSLATORS: when we are getting data from the daemon
-#: ../contrib/browser-plugin/src/contents.cpp:298
+#: ../contrib/packagekit-plugin/src/contents.cpp:294
 msgid "Getting package information..."
 msgstr "Hämtar paketinformation..."
 
 #. TRANSLATORS: run an applicaiton
-#: ../contrib/browser-plugin/src/contents.cpp:304
+#: ../contrib/packagekit-plugin/src/contents.cpp:300
 #, c-format
 msgid "Run %s"
 msgstr "Kör %s"
 
 #. TRANSLATORS: show the installed version of a package
-#: ../contrib/browser-plugin/src/contents.cpp:310
+#: ../contrib/packagekit-plugin/src/contents.cpp:306
 msgid "Installed version"
 msgstr "Installerad version"
 
 #. TRANSLATORS: run the application now
-#: ../contrib/browser-plugin/src/contents.cpp:318
+#: ../contrib/packagekit-plugin/src/contents.cpp:314
 #, c-format
 msgid "Run version %s now"
 msgstr "Kör version %s nu"
 
-#: ../contrib/browser-plugin/src/contents.cpp:324
+#: ../contrib/packagekit-plugin/src/contents.cpp:320
 msgid "Run now"
 msgstr "Kör nu"
 
 #. TRANSLATORS: update to a new version of the package
-#: ../contrib/browser-plugin/src/contents.cpp:330
+#: ../contrib/packagekit-plugin/src/contents.cpp:326
 #, c-format
 msgid "Update to version %s"
 msgstr "Uppdatera till version %s"
 
 #. TRANSLATORS: To install a package
-#: ../contrib/browser-plugin/src/contents.cpp:336
+#: ../contrib/packagekit-plugin/src/contents.cpp:332
 #, c-format
 msgid "Install %s now"
 msgstr "Installera %s nu"
 
 #. TRANSLATORS: the version of the package
-#: ../contrib/browser-plugin/src/contents.cpp:339
+#: ../contrib/packagekit-plugin/src/contents.cpp:335
 msgid "Version"
 msgstr "Version"
 
 #. TRANSLATORS: noting found, so can't install
-#: ../contrib/browser-plugin/src/contents.cpp:344
+#: ../contrib/packagekit-plugin/src/contents.cpp:340
 msgid "No packages found for your system"
 msgstr "Inga paket hittades för ditt system"
 
 #. TRANSLATORS: package is being installed
-#: ../contrib/browser-plugin/src/contents.cpp:349
+#: ../contrib/packagekit-plugin/src/contents.cpp:345
 msgid "Installing..."
 msgstr "Installerar..."
 
@@ -851,114 +601,13 @@ msgstr "Installerar..."
 msgid "PackageKit Catalog"
 msgstr "Katalog för PackageKit"
 
-#: ../data/packagekit-package-list.xml.in.h:1
-msgid "PackageKit Package List"
-msgstr "Paketlista för PackageKit"
-
 #: ../data/packagekit-servicepack.xml.in.h:1
 msgid "PackageKit Service Pack"
 msgstr "Servicepaket för PackageKit"
 
-#: ../policy/org.freedesktop.packagekit.policy.in.h:1
-msgid "Accept EULA"
-msgstr "Acceptera slutanvändaravtal"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:2
-msgid "Authentication is required to accept a EULA"
-msgstr "Autentisering krävs för att acceptera ett slutanvändaravtal"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:3
-#, fuzzy
-msgid ""
-"Authentication is required to cancel a task that was not started by yourself"
-msgstr "Autentisering krävs för att ändra parametrar för programvarukällor"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:4
-msgid "Authentication is required to change software source parameters"
-msgstr "Autentisering krävs för att ändra parametrar för programvarukällor"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:5
-#, fuzzy
-msgid ""
-"Authentication is required to consider a key used for signing packages as "
-"trusted"
-msgstr "Autentisering krävs för att uppdatera paketlistorna"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:6
-#, fuzzy
-msgid "Authentication is required to install a signed package"
-msgstr "Autentisering krävs för att installera ett paket"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:7
-#, fuzzy
-msgid "Authentication is required to install an untrusted package"
-msgstr "Autentisering krävs för att installera ett paket"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:8
-#, fuzzy
-msgid "Authentication is required to refresh the system sources"
-msgstr "Autentisering krävs för att uppdatera paketlistorna"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:9
-msgid "Authentication is required to remove packages"
-msgstr "Autentisering krävs för att ta bort paket"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:10
-msgid "Authentication is required to rollback a transaction"
-msgstr "Autentisering krävs för att rulla tillbaka en transaktion"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:11
-#, fuzzy
-msgid ""
-"Authentication is required to set the network proxy used for downloading "
-"packages"
-msgstr "Autentisering krävs för att ta bort paket"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:12
-msgid "Authentication is required to update packages"
-msgstr "Autentisering krävs för att uppdatera paket"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:13
-msgid "Cancel foreign task"
-msgstr ""
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:14
-msgid "Change software source parameters"
-msgstr "Ändra parametrar för programvarukällor"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:15
-#, fuzzy
-msgid "Install signed package"
-msgstr "Installerar paket"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:16
-msgid "Install untrusted local file"
-msgstr "Installera opålitlig lokal fil"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:17
-msgid "Refresh system sources"
-msgstr ""
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:18
-msgid "Remove package"
-msgstr "Ta bort paket"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:19
-msgid "Rollback to a previous transaction"
-msgstr "Rulla tillbaka till en tidigare transaktion"
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:20
-msgid "Set network proxy"
-msgstr ""
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:21
-msgid "Trust a key used for signing packages"
-msgstr ""
-
-#: ../policy/org.freedesktop.packagekit.policy.in.h:22
-#, fuzzy
-msgid "Update packages"
-msgstr "Uppdatera paket"
+#: ../data/packagekit-package-list.xml.in.h:1
+msgid "PackageKit Package List"
+msgstr "Paketlista för PackageKit"
 
 #: ../src/pk-main.c:86
 msgid "Startup failed due to security policies on this machine."
@@ -970,114 +619,147 @@ msgstr "Detta kan inträffa av två anledningar:"
 
 #: ../src/pk-main.c:88
 msgid "The correct user is not launching the executable (usually root)"
-msgstr "Det är inte korrekt användare (vanligtvis root) som startar programmet"
+msgstr "Den korrekta användaren startar inte den körbara filen (vanligtvis root)"
 
 #: ../src/pk-main.c:89
-msgid ""
-"The org.freedesktop.PackageKit.conf file is not installed in the system "
-"directory:"
-msgstr ""
-"Filen org.freedesktop.PackageKit.conf är inte installerad i systemkatalogen:"
+msgid "The org.freedesktop.PackageKit.conf file is not installed in the system directory:"
+msgstr "Filen org.freedesktop.PackageKit.conf är inte installerad i systemkatalogen:"
 
-#: ../src/pk-main.c:188
+#: ../src/pk-main.c:187
 msgid "Packaging backend to use, e.g. dummy"
 msgstr "Paketingsbakände att använda, t.ex. dummy"
 
-#: ../src/pk-main.c:190
+#: ../src/pk-main.c:189
 msgid "Daemonize and detach from the terminal"
-msgstr "Bli demon och koppla loss från terminalen"
+msgstr "Demonisera och koppla loss från terminalen"
 
-#: ../src/pk-main.c:194
+#: ../src/pk-main.c:193
 msgid "Disable the idle timer"
 msgstr "Inaktivera tidsgräns för inaktivitet"
 
-#: ../src/pk-main.c:196
+#: ../src/pk-main.c:195
 msgid "Show version and exit"
 msgstr "Visa version och avsluta"
 
-#: ../src/pk-main.c:198
+#: ../src/pk-main.c:197
 msgid "Exit after a small delay"
 msgstr "Avsluta efter en mindre fördröjning"
 
-#: ../src/pk-main.c:200
+#: ../src/pk-main.c:199
 msgid "Exit after the engine has loaded"
 msgstr "Avsluta efter att motorn har lästs in"
 
-#: ../src/pk-main.c:214
+#: ../src/pk-main.c:213
 msgid "PackageKit service"
 msgstr "PackageKit-tjänst"
 
-#: ../src/pk-main.c:250
+#: ../src/pk-main.c:249
 msgid "Cannot connect to the system bus"
 msgstr "Kan inte ansluta till systembussen"
 
-#: ../src/pk-main.c:299
+#: ../src/pk-main.c:298
 #, c-format
 msgid "Error trying to start: %s\n"
 msgstr "Fel vid försök att starta: %s\n"
 
 #~ msgid "This tool could not remove the packages: '%s'"
 #~ msgstr "Detta verktyg kunde inte ta bort paketen: \"%s\""
+#~ msgid "Accept EULA"
+#~ msgstr "Acceptera slutanvändaravtal"
+#~ msgid "Authentication is required to accept a EULA"
+#~ msgstr "Autentisering krävs för att acceptera ett slutanvändaravtal"
+#~ msgid "Authentication is required to change software source parameters"
+#~ msgstr "Autentisering krävs för att ändra parametrar för programvarukällor"
+
+#, fuzzy
+#~ msgid ""
+#~ "Authentication is required to consider a key used for signing packages as "
+#~ "trusted"
+#~ msgstr "Autentisering krävs för att uppdatera paketlistorna"
+
+#, fuzzy
+#~ msgid "Authentication is required to install a signed package"
+#~ msgstr "Autentisering krävs för att installera ett paket"
 
+#, fuzzy
+#~ msgid "Authentication is required to install an untrusted package"
+#~ msgstr "Autentisering krävs för att installera ett paket"
+
+#, fuzzy
+#~ msgid "Authentication is required to refresh the system sources"
+#~ msgstr "Autentisering krävs för att uppdatera paketlistorna"
+#~ msgid "Authentication is required to remove packages"
+#~ msgstr "Autentisering krävs för att ta bort paket"
+#~ msgid "Authentication is required to rollback a transaction"
+#~ msgstr "Autentisering krävs för att rulla tillbaka en transaktion"
+
+#, fuzzy
+#~ msgid ""
+#~ "Authentication is required to set the network proxy used for downloading "
+#~ "packages"
+#~ msgstr "Autentisering krävs för att ta bort paket"
+#~ msgid "Authentication is required to update packages"
+#~ msgstr "Autentisering krävs för att uppdatera paket"
+#~ msgid "Change software source parameters"
+#~ msgstr "Ändra parametrar för programvarukällor"
 #~ msgid "Install local file"
 #~ msgstr "Installera lokal fil"
+#~ msgid "Install untrusted local file"
+#~ msgstr "Installera opålitlig lokal fil"
+#~ msgid "Remove package"
+#~ msgstr "Ta bort paket"
+#~ msgid "Rollback to a previous transaction"
+#~ msgstr "Rulla tillbaka till en tidigare transaktion"
 
+#, fuzzy
+#~ msgid "Update packages"
+#~ msgstr "Uppdatera paket"
 #~ msgid "Authentication is required to install a local file"
 #~ msgstr "Autentisering krävs för att installera en lokal fil"
-
 #~ msgid "Authentication is required to install a security signature"
 #~ msgstr "Autentisering krävs för att installera en säkerhetssignatur"
-
 #~ msgid "Authentication is required to update all packages"
 #~ msgstr "Autentisering krävs för att uppdatera alla paket"
-
 #~ msgid ""
 #~ "Further authentication is required to install an untrusted local file"
 #~ msgstr ""
 #~ "Ytterligare autentisering krävs för att installera en opålitlig lokal fil"
-
 #~ msgid "Refresh package lists"
 #~ msgstr "Uppdatera paketlistor"
-
 #~ msgid "Update all packages"
 #~ msgstr "Uppdatera alla paket"
-
+#~ msgid "Update detail"
+#~ msgstr "Uppdateringsinformation"
+#~ msgid "A system restart is required"
+#~ msgstr "En omstart av systemet krävs"
 #~ msgid "A logout and login is required"
 #~ msgstr "En utloggning och inloggning krävs"
-
+#~ msgid "An application restart is required"
+#~ msgstr "En omstart av programmet krävs"
 #~ msgid "Could not find a package match"
 #~ msgstr "Kunde inte hitta ett matchande paket"
-
 #~ msgid ""
 #~ "Could not find a package with that name to install, or package already "
 #~ "installed"
 #~ msgstr ""
 #~ "Kunde inte hitta ett paket med det namnet att installera, eller så är "
 #~ "paketet redan installerat"
-
 #~ msgid "Could not find a package with that name to remove"
 #~ msgstr "Kunde inte hitta ett paket att ta bort med det namnet"
-
 #~ msgid "Cancelled!"
 #~ msgstr "Avbruten!"
-
 #~ msgid "Could not find a package with that name to update"
 #~ msgstr "Kunde inte hitta ett paket att uppdatera med det namnet"
-
 #~ msgid "Could not find what packages require this package"
 #~ msgstr "Kunde inte hitta vilka paket som kräver detta paket"
-
 #~ msgid "Okay to import key?"
 #~ msgstr "Ok att importera nyckeln?"
-
 #~ msgid "Did not import key"
 #~ msgstr "Importerade inte nyckeln"
-
 #~ msgid "Did not agree to licence, task will fail"
 #~ msgstr "Godkände inte licensen, åtgärden kommer att misslyckas"
-
 #~ msgid "Could not open database: %s"
 #~ msgstr "Kunde inte öppna databasen: %s"
-
 #~ msgid "You probably need to run this program as the root user"
 #~ msgstr "Du behöver antagligen köra detta program som root-användaren"
+
commit 57b67a0ea865efd97b5fffaf62a5780e72bc27f9
Author: zodman <zodman at cosmogirl.(none)>
Date:   Tue Feb 10 00:17:52 2009 -0600

    Update the conary Backend
    
       * Add New XMLCache. the cache implement a new XML files.
       * Add search name lookup on shortDesc, longDesc, Name and Categories.
       * Edit the string from package_id for add Metadata.
       * Add conarypk.py its a New Helper of Conary API.
       * The command get-details obtains the Group

diff --git a/backends/conary/Cache.py b/backends/conary/Cache.py
index c3fc43a..34b64b1 100644
--- a/backends/conary/Cache.py
+++ b/backends/conary/Cache.py
@@ -1,86 +1,108 @@
-#!/usr/bin/python
-# Licensed under the GNU General Public License Version 2
-#
-# This program is free software; you can redistribute it and/or modify
-# it under the terms of the GNU General Public License as published by
-# the Free Software Foundation; either version 2 of the License, or
-# (at your option) any later version.
-#
-# This program is distributed in the hope that it will be useful,
-# but WITHOUT ANY WARRANTY; without even the implied warranty of
-# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-# GNU General Public License for more details.
-#
-# You should have received a copy of the GNU General Public License
-# along with this program; if not, write to the Free Software
-# Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-#
-# Copyright (C) 2007 Ken VanDine <ken at vandine.org>
-# Copyright (C) 2008 Richard Hughes <richard at hughsie.com>
-
 import os
-from conary import errors
-from conary.deps import deps
-from conary import conarycfg, conaryclient
-from conary import dbstore, queryrep, versions, updatecmd
-from conary.local import database
-from conary import trove
-
-
+import sys
+from xml.dom.minidom import parse
+import urllib as url
 
 from pkConaryLog import log
+from conarypk import ConaryPk
+class XMLRepo:
+    xml_path = ""
+    repository = ""
+    def __init__(self, repo, path ):
+        self.xml_path = path
+        self._setRepo(repo)
+
+    def resolve(self, search_trove):
+        """ resolve its a search with name """
+        trove =  self._getPackage(search_trove)
+        if trove:
+            return trove
+        else:
+            return None
+        
+    def search(self, search):
+        return self._searchPackage(search)
+
+    def _setRepo(self,repo):  
+        self.repo = repo
+        doc = self._open()
+        self.label = str( doc.childNodes[0].getAttribute("label") )
 
-class Cache(object):
-    # Database name and path
-    dbName = 'cache.db'
-    # Someday we might want to make this writable by users
-    #if 'HOME' in os.environ:
-    #    dbPath = '%s/.conary/cache/data/' % os.environ['HOME']
-    #else:
-    #    dbPath = '/var/cache/conary/'
+    def _open(self):
+        try:
+            return self._repo
+        except AttributeError:
+            self._repo =   parse( open( self.xml_path + self.repo) )
+            return self._repo
+
+    def _generatePackage(self, package_node ): 
+        """ convert from package_node to dictionary """
+        pkg = {}
+        cat = []
+        for node in package_node.childNodes:
+            if pkg.has_key('categorie'):
+                cat.append(str(node.childNodes[0].nodeValue))
+            else:
+                pkg[str(node.nodeName)] = str(node.childNodes[0].nodeValue)
+        pkg["categorie"] = cat
+        return pkg
+
+    def _getPackage(self, name):
+        doc = self._open()
+        results = []
+        for packages in doc.childNodes:
+            for package in packages.childNodes:
+                pkg = self._generatePackage(package)
+                pkg["label"] = self.label
+                if name == pkg["name"]:
+                    return pkg
+        return None
+                    
+    def _searchPackage(self, name):
+        doc = self._open()
+        results = []
+        for packages in doc.childNodes:
+            for package in packages.childNodes:
+                pkg = self._generatePackage(package)
+                pkg["label"] = self.label
+                for i in pkg.keys():
+                    if i  == "label":
+                        continue
+                    if i =='categorie':
+                        for j in pkg[i]:
+                            if name.lower() in j.lower():
+                                results.append(pkg)
+                    if name.lower() in pkg[i]:
+                        results.append(pkg)
+        return results
+
+        
+
+class XMLCache:
+    #xml_files = ["foresight.rpath.org at fl:2"]
+    xml_files = []
+    server = "http://packages.foresightlinux.org/cache/"
+    repos = []
     dbPath = '/var/cache/conary/'
     jobPath = dbPath + 'jobs'
+    xml_path =  dbPath + "xmlrepo/"
 
     def __init__(self):
-        """ Class to retrieve and cache package information from label. """
+        con = ConaryPk()
+        labels = con.get_labels_from_config()
 
-        self.is_populate_database = False
         if not os.path.isdir(self.dbPath):
             os.makedirs(self.dbPath)
         if not os.path.isdir(self.jobPath):
             os.mkdir(self.jobPath)
-
-        self.conn = dbstore.connect(os.path.join(self.dbPath, self.dbName))
-        self.cursor = self.conn.cursor()
-        self.cursor.execute("PRAGMA count_changes=0", start_transaction=False)
-
-        if os.path.isfile(os.path.join(self.dbPath, self.dbName)):
-            self._validate_tables()
-
-    def _validate_tables(self):
-        """ Validates that all tables are up to date. """
-        #backend = PackageKitBaseBackend(self)
-        stmt = ("select tbl_name from sqlite_master "
-                "where type = 'table' and tbl_name like 'conary_%'")
-        self.cursor.execute(stmt)
-        # List of all tables with names that start with "conary_"
-        tbllist = self.cursor.fetchall()
-        if tbllist == [('conary_packages',)]:
-            self.cursor.execute('DROP TABLE conary_packages')
-            self.conn.commit()
-            tbllist = []
-        if tbllist != []:
-            return True
-            #print "Verified packages table"
-        else:
-            log.info("Creando tablas")
-            # Create all tables if database is empty
-            if len(tbllist) == 0:
-                self._create_database()
-                #ackend.status(STATUS_WAIT)
-                self.is_populate_database = True
-                self.populate_database()
-                return True
+        if not os.path.isdir( self.xml_path ):
+            os.makedirs(self.xml_path )
+ 
+        for xml_file in labels:
+           if not os.path.exists( self.xml_path + xml_file + ".xml"  ):
+                self._fetchXML()
+        for xml_file in labels :
+            self.repos.append(XMLRepo( xml_file + ".xml", self.xml_path ))
 
     def _getJobCachePath(self, applyList):
         from conary.lib import sha1helper
@@ -91,7 +113,7 @@ class Cache(object):
         jobPath = self._getJobCachePath(applyList)
         if os.path.exists(jobPath):
             return jobPath
-
+    
     def cacheUpdateJob(self, applyList, updJob):
         jobPath = self._getJobCachePath(applyList)
         if os.path.exists(jobPath):
@@ -100,247 +122,65 @@ class Cache(object):
         os.mkdir(jobPath)
         updJob.freeze(jobPath)
 
-    def conaryquery(self):
-        self.cfg = conarycfg.ConaryConfiguration()
-        self.client = conaryclient.ConaryClient(self.cfg)
-        self.cfg.readFiles()
-        self.cfg.initializeFlavors()
-        self.repos = self.client.getRepos()
-        self.db = conaryclient.ConaryClient(self.cfg).db
-
-        troves = queryrep.getTrovesToDisplay(self.repos, None, None, None,
-            queryrep.VERSION_FILTER_LEAVES, queryrep.FLAVOR_FILTER_BEST,
-            self.cfg.installLabelPath, self.cfg.flavor, None)
-
-        packages = []
-
-        for troveTuple in troves:
-            # troveTuple is probably what we want to store in the cachedb
-            # Then use the below methods to present them in a nicer fashion
-            if troveTuple[0].endswith(':source'):
-                continue
-            if ":" in troveTuple[0]:
-                fragments = troveTuple[0].split(":")
-                trove = fragments[0]
-                component = fragments[1]
-            else:
-                trove = troveTuple[0]
-                component = ""
-
-            installed = 0
-            flavor = troveTuple[2].freeze()
-            fullVersion = troveTuple[1].freeze()
-            label = str(troveTuple[1].branch().label())
-            description = ""
-            category = ""
-            packagegroup = ""
-            size = ""
-            packages.append([trove, component, fullVersion, label, flavor,
-                             description, category, packagegroup, size])
-
-        return packages
-
-    def connect_memory(self):
-        return sqlite.connect(':memory:')
-
-    def cursor(self, connection):
-        return connection.cursor()
-
-    def _create_database(self):
-        #FIXME: delete the category column. it's not useful
-        """ Creates a blank database. """
-        sql = '''CREATE TABLE conary_packages (
-            packageId INTEGER,
-            trove text,
-            component text,
-            version text,
-            label text,
-            flavor text,
-            description text,
-            category text,
-            packagegroup text,
-            size text)'''
-
-        self.cursor.execute(sql)
-
-        sql = '''CREATE TABLE conary_categories (
-            categoryId INTEGER,
-            categoryName text)'''
-
-        self.cursor.execute(sql)
-
-        sql = '''CREATE TABLE conary_category_package_map (
-            categoryId INTEGER,
-            packageId INTEGER)'''
-
-        self.cursor.execute(sql)
-
-        sql = '''CREATE TABLE conary_licenses (
-            licenseId INTEGER,
-            licenseName text)'''
-
-        self.cursor.execute(sql)
-
-        sql = '''CREATE TABLE conary_license_package_map (
-            licenseId INTEGER,
-            packageId INTEGER)'''
-
-        self.cursor.execute(sql)
-
-        #self.conn.createIndex('conary_catagories', 'conary_category_name_idx', ['categoryName'])
-        #self.conn.createIndex('conary_catagories', 'conary_category_id_idx', ['categoryId'])
-        self.conn.commit()
-
-
-
-    def commit(self):
-        self.cursor.commit()
-
-    def getTroves(self, label=None):
-        """
-        Returns all troves for now.  Add filtering capability.
-        """
-        stmt = ("select distinct trove, version, flavor, description, "
-                "category, packagegroup, size from conary_packages")
-
-        self.cursor.execute(stmt)
-        return self.cursor.fetchall()
-
-    def search(self, package, fullVersion=None):
-        """
-        Returns all troves for now.  Add filtering capability.
-        """
-        #log.debug(package)
-        stmt = ("select distinct trove, version, flavor, description, "
-                "category, packagegroup, size from conary_packages")
-
-        if package and fullVersion:
-            stmt = ("select distinct trove, version, flavor from "
-                    "conary_packages where trove ='%s' and version = '%s'"
-                    % (package, fullVersion))
-        elif package:
-            stmt += (" where trove like '%%%s%%' and component = '' order by "
-                     "version desc" % package)
-
-        try:
-            self.cursor.execute(stmt)
-            results = self.cursor.fetchall()
-            log.debug(results)
-            return results
-        except Exception, e:
-            print str(e)
-            return None
-
+    def getTroves(self):
+        pass
     def searchByGroups(self, groups):
-        """
-        Returns all troves for given groups. (trove, version, flavor)
-        Needs filtering capability.
-        ['all'] means all packages
-        FIXME: No filtering done on group text - SQL injection
-        """
-        if not groups:
-            groups = ["all"]
-
-        if "all" in groups:
-            stmt = ("SELECT DISTINCT CP.trove, CP.version, CP.flavor, CC.categoryName"
-                    "           FROM conary_packages CP, conary_categories CC, conary_category_package_map CCMap"
-                    "          WHERE CCMap.packageId = CP.packageId"
-                    "            AND CCMap.categoryId = CC.categoryId"
-                    "       GROUP BY CP.trove, CP.version, CP.flavor"
-                    "       ORDER BY CP.trove, CP.version DESC, CP.flavor")
+        pass
+    def refresh(self):
+        self._fetchXML()
+    def resolve(self, name ):
+        for repo in self.repos:
+            r =  repo.resolve(name)
+            if r:
+                return r
         else:
-            group_string = ", ".join(groups)
-            stmt = ("SELECT DISTINCT CP.trove, CP.version, CP.flavor, CC.categoryName"
-                    "           FROM conary_packages CP, conary_categories CC, conary_category_package_map CCMap"
-                    "          WHERE CC.categoryName IN (%s)"
-                    "            AND CCMap.packageId = CP.packageId"
-                    "            AND CCMap.categoryId = CC.categoryId"
-                    "       GROUP BY CP.trove, CP.version, CP.flavor"
-                    "       ORDER BY CP.trove, CP.version DESC, CP.flavor" % group_string)
-
-        try:
-            self.cursor.execute(stmt)
-            return self.cursor.fetchall()
-        except Exception, e:
-            print str(e)
             return None
 
-    def _insert(self, trove):
-        """
-        Insert trove into database.
-        """
-        res = self.cursor.execute("SELECT COALESCE(max(packageId), 0) + 1 FROM conary_packages")
-        pkgId = res.fetchone()[0] + 1
-        trove = [pkgId] + trove[:]
-
-        values = [str(field) for field in trove]
-        cols = ", ".join("?" * len(trove))
-        sql = "INSERT INTO conary_packages VALUES (%s)" % cols
-
-        try:
-            self.cursor.execute(sql, values)
-            #self.conn.commit()
-        except Exception, e:
-            print str(e)
+    def search(self, search ):
+        repositories_result = []
+        for repo in self.repos:
+            results = repo.search(search)
+            for i in results:
+                repositories_result.append(i)
+        return repositories_result
+
+    def _fetchXML(self ):
+        con = ConaryPk()
+        labels = con.get_labels_from_config()
+        for i in labels:
+            label = i + '.xml'
+            filename = self.xml_path + label
+            wwwfile = self.server + label
+            wget = url.urlopen( wwwfile )
+            openfile = open( filename ,'w')
+            openfile.writelines(wget.readlines())
+            openfile.close()
+    def _getCategorieBase(self, mapDict, categorieList ):
+        if not categorieList:
+            return None
 
-    def _clear_table(self, tableName='conary_packages'):
-        """
-        Deletes * records from table.
-        """
-        stmt = "DELETE FROM %s" % tableName
-        try:
-            self.cursor.execute(stmt)
-        except dbstore.sqlerrors.InvalidTable:
-            pass
+        tempDict = {}
+        for cat in categorieList:
 
-    def populate_database(self):
-        packages = self.conaryquery()
-        # Clear table first
-        for tblName in ('conary_packages', 'conary_category_package_map',
-                'conary_categories'):
-            self._clear_table(tblName)
-        log.info("Insertando datos")
-        for package in packages:
-            self._insert(package)
-        self.conn.commit()
-        log.info("Datos insertados")
+            if mapDict.has_key(cat):
+                map = mapDict[cat]
+            else:
+                continue
 
-    def _addPackageCategory(self, trv, category):
-        res = self.cursor.execute( \
-                'SELECT packageId FROM conary_packages WHERE trove=? and version=? and flavor = ?', trv.getName(), trv.getVersion().freeze(), trv.getFlavor().freeze())
-        res = res.fetchone()
-        if res:
-            # we have a packageID
-            pkgId = res[0]
-        else:
-            # we really should have had this data
-            raise RuntimeError
+            if tempDict.has_key(map):
+                tempDict[map] = tempDict[map] + 1
+            else:
+                tempDict[map] = 1
+        tmp = 0
+        t_key = ""
+        for key, value in tempDict.items():
+            if value > tmp:
+                t_key =  key
+                tmp  = value
+        return t_key
 
-        # now look up/make the categoryId
-        res = self.cursor.execute('SELECT categoryId FROM conary_categories WHERE categoryName=?', category)
-        res = res.fetchone()
-        if not res:
-            res = self.cursor.execute('SELECT COALESCE(MAX(categoryId), 0) + 1 FROM conary_categories')
-            catId = res.fetchone()[0]
-            self.cursor.execute('INSERT INTO conary_categories VALUES(?, ?)',
-                    catId, category)
-        else:
-            catId = category
 
-        self.cursor.execute("INSERT INTO conary_category_package_map VALUES(?, ?)", catId, pkgId)
-        self.conn.commit()
+if __name__ == '__main__':
+    from conaryBackend import groupMap
+    XMLCache()._getCategorieBase( groupMap,  ['GTK', 'Graphics', 'Photography', 'Viewer'])
 
-    def populate_metadata(self, csList):
-        for cs in csList:
-            for troveCS in cs.iterNewTroveList():
-                trv = trove.Trove(troveCS)
-                if ':' in trv.getName():
-                    # components aren't tracked at the moment
-                    continue
-                metadata = trv.getMetadata()
-                categories = metadata.get('categories', [])
-                for category in categories:
-                    self._addPackageCategory(trv, category)
-                #licenses = metadata.get('licenses', [])
-                #for license in licenses:
-                #    self._addPackageLicense(trv, license)
diff --git a/backends/conary/XMLCache.py b/backends/conary/XMLCache.py
new file mode 100644
index 0000000..34b64b1
--- /dev/null
+++ b/backends/conary/XMLCache.py
@@ -0,0 +1,186 @@
+import os
+import sys
+from xml.dom.minidom import parse
+import urllib as url
+
+from pkConaryLog import log
+from conarypk import ConaryPk
+class XMLRepo:
+    xml_path = ""
+    repository = ""
+    def __init__(self, repo, path ):
+        self.xml_path = path
+        self._setRepo(repo)
+
+    def resolve(self, search_trove):
+        """ resolve its a search with name """
+        trove =  self._getPackage(search_trove)
+        if trove:
+            return trove
+        else:
+            return None
+        
+    def search(self, search):
+        return self._searchPackage(search)
+
+    def _setRepo(self,repo):  
+        self.repo = repo
+        doc = self._open()
+        self.label = str( doc.childNodes[0].getAttribute("label") )
+
+    def _open(self):
+        try:
+            return self._repo
+        except AttributeError:
+            self._repo =   parse( open( self.xml_path + self.repo) )
+            return self._repo
+
+    def _generatePackage(self, package_node ): 
+        """ convert from package_node to dictionary """
+        pkg = {}
+        cat = []
+        for node in package_node.childNodes:
+            if pkg.has_key('categorie'):
+                cat.append(str(node.childNodes[0].nodeValue))
+            else:
+                pkg[str(node.nodeName)] = str(node.childNodes[0].nodeValue)
+        pkg["categorie"] = cat
+        return pkg
+
+    def _getPackage(self, name):
+        doc = self._open()
+        results = []
+        for packages in doc.childNodes:
+            for package in packages.childNodes:
+                pkg = self._generatePackage(package)
+                pkg["label"] = self.label
+                if name == pkg["name"]:
+                    return pkg
+        return None
+                    
+    def _searchPackage(self, name):
+        doc = self._open()
+        results = []
+        for packages in doc.childNodes:
+            for package in packages.childNodes:
+                pkg = self._generatePackage(package)
+                pkg["label"] = self.label
+                for i in pkg.keys():
+                    if i  == "label":
+                        continue
+                    if i =='categorie':
+                        for j in pkg[i]:
+                            if name.lower() in j.lower():
+                                results.append(pkg)
+                    if name.lower() in pkg[i]:
+                        results.append(pkg)
+        return results
+
+        
+
+class XMLCache:
+    #xml_files = ["foresight.rpath.org at fl:2"]
+    xml_files = []
+    server = "http://packages.foresightlinux.org/cache/"
+    repos = []
+    dbPath = '/var/cache/conary/'
+    jobPath = dbPath + 'jobs'
+    xml_path =  dbPath + "xmlrepo/"
+
+    def __init__(self):
+        con = ConaryPk()
+        labels = con.get_labels_from_config()
+
+        if not os.path.isdir(self.dbPath):
+            os.makedirs(self.dbPath)
+        if not os.path.isdir(self.jobPath):
+            os.mkdir(self.jobPath)
+        if not os.path.isdir( self.xml_path ):
+            os.makedirs(self.xml_path )
+ 
+        for xml_file in labels:
+           if not os.path.exists( self.xml_path + xml_file + ".xml"  ):
+                self._fetchXML()
+        for xml_file in labels :
+            self.repos.append(XMLRepo( xml_file + ".xml", self.xml_path ))
+
+    def _getJobCachePath(self, applyList):
+        from conary.lib import sha1helper
+        applyStr = '\0'.join(['%s=%s[%s]--%s[%s]%s' % (x[0], x[1][0], x[1][1], x[2][0], x[2][1], x[3]) for x in applyList])
+        return self.jobPath + '/' + sha1helper.sha1ToString(sha1helper.sha1String(applyStr))
+
+    def checkCachedUpdateJob(self, applyList):
+        jobPath = self._getJobCachePath(applyList)
+        if os.path.exists(jobPath):
+            return jobPath
+    
+    def cacheUpdateJob(self, applyList, updJob):
+        jobPath = self._getJobCachePath(applyList)
+        if os.path.exists(jobPath):
+            from conary.lib import util
+            util.rmtree(jobPath)
+        os.mkdir(jobPath)
+        updJob.freeze(jobPath)
+
+    def getTroves(self):
+        pass
+    def searchByGroups(self, groups):
+        pass
+    def refresh(self):
+        self._fetchXML()
+    def resolve(self, name ):
+        for repo in self.repos:
+            r =  repo.resolve(name)
+            if r:
+                return r
+        else:
+            return None
+
+    def search(self, search ):
+        repositories_result = []
+        for repo in self.repos:
+            results = repo.search(search)
+            for i in results:
+                repositories_result.append(i)
+        return repositories_result
+
+    def _fetchXML(self ):
+        con = ConaryPk()
+        labels = con.get_labels_from_config()
+        for i in labels:
+            label = i + '.xml'
+            filename = self.xml_path + label
+            wwwfile = self.server + label
+            wget = url.urlopen( wwwfile )
+            openfile = open( filename ,'w')
+            openfile.writelines(wget.readlines())
+            openfile.close()
+    def _getCategorieBase(self, mapDict, categorieList ):
+        if not categorieList:
+            return None
+
+        tempDict = {}
+        for cat in categorieList:
+
+            if mapDict.has_key(cat):
+                map = mapDict[cat]
+            else:
+                continue
+
+            if tempDict.has_key(map):
+                tempDict[map] = tempDict[map] + 1
+            else:
+                tempDict[map] = 1
+        tmp = 0
+        t_key = ""
+        for key, value in tempDict.items():
+            if value > tmp:
+                t_key =  key
+                tmp  = value
+        return t_key
+
+
+if __name__ == '__main__':
+    from conaryBackend import groupMap
+    XMLCache()._getCategorieBase( groupMap,  ['GTK', 'Graphics', 'Photography', 'Viewer'])
+
diff --git a/backends/conary/conaryBackend.py b/backends/conary/conaryBackend.py
index 3cdd6d1..c4c4c4d 100644
--- a/backends/conary/conaryBackend.py
+++ b/backends/conary/conaryBackend.py
@@ -28,17 +28,20 @@ from conary.deps import deps
 from conary import dbstore, queryrep, versions, updatecmd
 from conary.local import database
 from conary import trove
+from conary.conaryclient import cmdline
 
 from packagekit.backend import *
 from packagekit.package import *
 from conaryCallback import UpdateCallback
 from conaryFilter import *
-#from XMLCache import XMLCache as Cache
+from XMLCache import XMLCache as Cache
+from conaryInit import *
 
 # zodman fix
-from Cache import Cache
+#from Cache import Cache
 from conaryInit import init_conary_config, init_conary_client
 from conary import conarycfg, conaryclient
+from conarypk import ConaryPk
 
 pkpackage = PackagekitPackage()
 
@@ -100,7 +103,8 @@ groupMap = {
     'Viewer'              : GROUP_MULTIMEDIA,
     'WebBrowser'          : GROUP_INTERNET,
     'WebDevelopment'      : GROUP_PROGRAMMING,
-    'WordProcessor'       : GROUP_OFFICE
+    'WordProcessor'       : GROUP_OFFICE,
+    ''                    : GROUP_UNKNOWN
 }
 
 revGroupMap = {}
@@ -171,8 +175,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         frzFlavor = flavor.freeze()
         return ','.join([frzVersion, frzFlavor])
 
-    def _thawData(self, data):
-        frzVersion, frzFlavor = data.split(',')
+    def _thawData(self, frzVersion, frzFlavor ):
         version = versions.ThawVersion(frzVersion)
         flavor = deps.ThawFlavor(frzFlavor)
         return version, flavor
@@ -185,80 +188,69 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         return ','.join(arches)
 
     @ExceptionHandler
+    def check_installed(self, troveTuple):
+        log.debug("============check installed =========")
+        cli = ConaryPk()
+        result = cli.query(troveTuple[0])
+        if result:
+            installed = INFO_INSTALLED
+        else:
+            installed = INFO_AVAILABLE
+
+        return installed
+           
+    @ExceptionHandler
     def get_package_id(self, name, versionObj, flavor):
+
         version = versionObj.trailingRevision()
+
         arch = self._get_arch(flavor)
-        data = self._freezeData(versionObj, flavor)
+
+        cache = Cache()
+        pkg  = cache.resolve(name)
+        data = versionObj.asString() + "#"
+        if pkg:
+            try:
+                data +=str(pkg)
+            except:
+                pass
         return pkpackage.get_package_id(name, version, arch, data)
 
     @ExceptionHandler
     def get_package_from_id(self, package_id):
         """ package_id(string) =
-        "pastebinit;0.7-1-1;x86;/foresight.rpath.org at fl:2-qa/1222042924.172:0.7-1-1,1#x86"
+        "dpaster;0.1-3-1;x86;/foresight.rpath.org at fl:2-qa/0.1-3-1#{'version': '0.1-3-1', 'categorie': [], 'name': 'dpaster', 'label': 'foresight.rpath.org at fl:2-qa'}"
         """
         log.info("=========== get package from package_id ======================")
-        log.info(package_id)
         name, verString, archString, data =  pkpackage.get_package_from_id(package_id)
-        log.info(data)
-        version, flavor = self._thawData(data)
-        return name, version, flavor
+        summary = data.split("#")
+        repo = summary[0]
+        metadata = eval(summary[1])
+        cli = ConaryPk()
+        return  cli.request_query(name)
 
-    def _do_search(self, searchlist, filters):
+    def _do_search(self,filters, searchlist):
         """
-        searchlist(str)ist as the package for search like
-        filters(str) as the filter
+         searchlist(str)ist as the package for search like
+         filters(str) as the filter
         """
         fltlist = filters.split(';')
-        pkgfilter = ConaryFilter(fltlist)
-        #pkgfilter = ConaryFilter()
 
-        troveSpecs = [ updatecmd.parseTroveSpec(searchlist,
-                                                allowEmptyName=False) ]
-        # get a hold of cached data
         cache = Cache()
         log.debug((searchlist, fltlist))
 
-        try:
-            troveTupleList = cache.search(searchlist)
-            log.info("FOUND!!!!!! %s"% str(troveTupleList))
-        finally:
-            pass
+        troveTupleList = cache.search(searchlist)
 
-        # Remove dupes
-        tempDict = {}
-        try:
-            for element in troveTupleList:
-                tempDict[element] = None
-        except TypeError:
-            del tempDict  # move on to the next method
+        if troveTupleList:
+            log.info("FOUND!!!!!! %s " % troveTupleList )
         else:
-            troveTupleList = tempDict.keys()
-
-        # Get the latest first
-        troveTupleList.sort()
-        troveTupleList.reverse()
-
-        for troveTuple in troveTupleList:
-            troveTuple = tuple([item.encode('UTF-8') for item in troveTuple])
-            name = troveTuple[0]
-            version = versions.ThawVersion(troveTuple[1])
-            flavor = deps.ThawFlavor(troveTuple[2])
-            troveTuple = tuple([name, version, flavor])
-            log.info("TROVETUPLE %s" % str(troveTuple))
-            installed = self.check_installed(troveTuple)
+            log.info("NOT FOUND %s " % searchlist )
 
-            if installed is "installed":
-                pkgfilter.add_installed([troveTuple])
-                log.info(" === Installed ========= %s" % name)
-            else:
-                pkgfilter.add_available([troveTuple])
-                log.info("=== Available====== %s" % name)
+        for troveDict in troveTupleList:
+            log.info(" doing resolve ")
+            log.info(troveDict)
+            self.resolve( fltlist[0] , [ troveDict['name'] ] )
 
-        # we couldn't do this when generating the list
-
-        package_list = pkgfilter.post_process()
-        log.info("package_list %s" %package_list)
-        self._show_package_list(package_list)
 
     def _get_update(self, applyList, cache=True):
         updJob = self.client.newUpdateJob()
@@ -295,38 +287,51 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
             applyList = [(name, (None, None), (version, flavor), True)]
         return self._do_update(applyList)
 
+    def _convertPackage(self, pkg ):
+       #version = versions.ThawVersion(pkg['version'])
+       pass
     @ExceptionHandler
-    def resolve(self, filters, packages):
+    def resolve(self, filters, package ):
+        """ 
+            @filters  (list)  list of filters
+            @package (list ) list with packages name for resolve
+        """
         self.allow_cancel(True)
         self.percentage(None)
         self.status(STATUS_INFO)
         log.info("======== resolve =========")
-        log.info("filters: %s package:%s " % (filters, packages))
-        if len(packages):
-            for i in packages:
-                self._do_search(i, filters)
+        log.info("filters: %s package:%s " % (filters, package))
+
+        cache = Cache()
+        pkg_dict = cache.resolve( package[0] )
+
+        if pkg_dict is None:
+            self.error(ERROR_INTERNAL_ERROR, "Package Not found on repository")
+
+        filter = ConaryFilter(filters)
+
+        installed = filter._pkg_is_installed( pkg_dict )
+        
+        conary_cli = ConaryPk()
+
+        troveTuple =  conary_cli.request_query( package[0] )
+
+        log.info(">>> %s" % troveTuple)
+
+        if installed:
+            filter.add_installed( troveTuple  )
         else:
-            self._do_search(packages, filters)
+            filter.add_available( troveTuple )
 
-    @ExceptionHandler
-    def check_installed(self, troveTuple):
-        log.debug("============check installed =========")
-        log.info(troveTuple)
-        db = conaryclient.ConaryClient(self.cfg).db
-        try:
-            troveTuple = troveTuple[0], troveTuple[1], troveTuple[2]
-            localInstall = db.findTrove(None, troveTuple)
-            installed = INFO_INSTALLED
-        except:
-            installed = INFO_AVAILABLE
-        log.info(installed)
-        return installed
+        package_list = filter.post_process()
+        log.info("package_list %s" % package_list)
+        self._show_package_list(package_list)
 
-    def _pkg_is_installed(self, pkg):
-        '''
-        Return if the package is installed.
-        '''
-        return self.check_installed(pkg)
+        #if len(packages):
+        #    for i in packages:
+        #        self._do_search(i, filters)
+        #else:
+        #    self._do_search(packages, filters)
 
     @ExceptionHandler
     def search_group(self, filters, key):
@@ -368,23 +373,35 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
 
         # we couldn't do this when generating the list
         package_list = pkgfilter.post_process()
+        log.info(package_list)
         log.info("package_list %s" % package_list)
         self._show_package_list(package_list)
 
     def _show_package_list(self, lst):
-        log.info("------------- show_package_list ----------")
-        log.info(lst)
+        """ 
+            HOW its showed on packageKit
+            @lst(list(tuple) = [ ( troveTuple, status ) ]
+        """
         for troveTuple, status in lst:
+            # take the basic info
             name = troveTuple[0]
             version = troveTuple[1]
             flavor = troveTuple[2]
+            # get the string id from packagekit 
             package_id = self.get_package_id(name, version, flavor)
-            log.info("pkg id")
-            log.info(package_id)
-            summary = self._get_metadata(package_id, 'shortDesc') or " "
-            #summary = " "
-            log.info("####Package %s %s %s" % (package_id, status, summary ))
-            self.package(package_id, status, summary)
+            
+            # split the list for get Determine info
+            summary = package_id.split(";")
+            repo = summary[3].split("#")[0]
+
+            metadata = eval(summary[3].split("#")[1])
+            log.info("====== show the package ")
+            log.info(metadata)
+            if metadata.has_key("shortDesc"):
+                meta = metadata["shortDesc"]
+            else:
+                meta = " "
+            self.package(package_id, status, meta )
 
     @ExceptionHandler
     def search_name(self, options, searchlist):
@@ -396,7 +413,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         self.status(STATUS_QUERY)
         log.info("============= search_name ========")
         log.info("options: %s searchlist:%s "%(options, searchlist))
-        self._do_search(searchlist, options)
+        self._do_search(options, searchlist)
 
     def search_details(self, opt, key):
         pass
@@ -460,15 +477,16 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         applyList = [ (x[0], (None, None), x[1:], True) for x in updateItems ]
         updJob, suggMap = self._do_update(applyList)
 
-    @ExceptionHandler
+#    @ExceptionHandler
     def refresh_cache(self):
         #log.debug("refresh-cache command ")
         self.percentage()
         self.status(STATUS_REFRESH_CACHE)
         cache = Cache()
-        if not cache.is_populate_database:
-            self.status(STATUS_WAIT)
-            cache.populate_database()
+        cache.refresh()
+        #if not cache.is_populate_database:
+        #    self.status(STATUS_WAIT)
+        #    cache.populate_database()
 
     @ExceptionHandler
     def update(self, package_ids):
@@ -478,11 +496,13 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         self.allow_cancel(True)
         self.percentage(0)
         self.status(STATUS_RUNNING)
-
+        
         for package in package_ids.split(" "):
             name, version, flavor, installed = self._findPackage(package)
             if name:
-                self._do_package_update(name, version, flavor)
+               # self._do_package_update(name, version, flavor)
+               cli = ConaryPk()
+               cli.update(name)
             else:
                 self.error(ERROR_PACKAGE_ALREADY_INSTALLED, 'No available updates')
 
@@ -497,12 +517,10 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         '''
         Implement the {backend}-{install, update}-packages functionality
         '''
-        log.info(package_ids)
-        #for package_id in package_ids.split('%'):
+
         for package_id in package_ids:
-            log.info(package_id)
             name, version, flavor, installed = self._findPackage(package_id)
-            log.info((name, version))
+            log.info((name, version, flavor, installed ))
 
             self.allow_cancel(True)
             self.percentage(0)
@@ -514,7 +532,10 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
                         'Package already installed')
 
                 self.status(INFO_INSTALLING)
+                log.info(">>> end Prepare Update")
                 self._get_package_update(name, version, flavor)
+                self.status(STATUS_WAIT)
+                log.info(">>> end Prepare Update")
                 self._do_package_update(name, version, flavor)
             else:
                 self.error(ERROR_PACKAGE_ALREADY_INSTALLED, 'Package was not found')
@@ -629,7 +650,7 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         self.update_detail(package_id, update, obsolete, vendor_url, bz_url, cve_url,
                 reboot, desc, changelog="", state="", issued="", updated="")
 
-    @ExceptionHandler
+   # @ExceptionHandler
     def get_details(self, package_ids):
         '''
         Print a detailed description for a given package
@@ -642,26 +663,52 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         log.info(package_ids[0])
         package_id = package_ids[0]
         name, version, flavor, installed = self._findPackage(package_id)
+        
+        summary = package_id.split(";")
+        log.info("====== summar")
+        log.info(summary)
+
+        repo = summary[3].split("#")[0]
+        metadata = eval(summary[3].split("#")[1])
+        short_package_id  = ""
+        for i in summary[0:3]:
+            short_package_id += i +';'
 
-        log.info("name--------------------")
-        log.info((package_id, name))
+        log.info("Metadata--------------------")
+        log.info(metadata)
 
         if name:
-            shortDesc = self._get_metadata(package_id, 'shortDesc') or name
-            longDesc = self._get_metadata(package_id, 'longDesc') or ""
-            url = "http://www.foresightlinux.org/packages/" + name + ".html"
-            categories = self._get_metadata(package_id, 'categories') or "unknown"
+            if metadata.has_key("shortDesc"):
+                shortDesc = metadata["shortDesc"] 
+            else:
+                shortDesc = ""
+            if metadata.has_key("longDesc"):
+                longDesc = metadata["longDesc"] 
+            else:
+                longDesc = ""
 
+            url = "http://www.foresightlinux.org/packages/%s.html" % name
+
+            categories  = ""
+            if metadata.has_key("categorie"):
+                categories =  Cache()._getCategorieBase( groupMap, metadata['categorie'])
+            else:
+                categories = None
             # Package size goes here, but I don't know how to find that for conary packages.
-            self.details(package_id, None, categories, longDesc, url, 0)
+            self.details(short_package_id, None, categories, longDesc, url, 0)
         else:
             self.error(ERROR_PACKAGE_NOT_FOUND, 'Package was not found')
 
     def _show_package(self, name, version, flavor, status):
         '''  Show info about package'''
         package_id = self.get_package_id(name, version, flavor)
-        summary = self._get_metadata(package_id, 'shortDesc') or ""
-        self.package(package_id, status, summary)
+        summary = package_id.split(";")
+        metadata = eval(summary[3].split("#")[1])
+        if metadata.has_key("shortDesc"):
+            meta = metadata["shortDesc"]
+        else:
+            meta = " "
+        self.package(package_id, status, meta)
 
     def _get_status(self, notice):
         # We need to figure out how to get this info, this is a place holder
@@ -680,14 +727,19 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         self.status(STATUS_INFO)
         log.info("============== get_updates ========================")
         updateItems = self.client.fullUpdateItemList()
+        log.info("============== end get_updates ========================")
         applyList = [ (x[0], (None, None), x[1:], True) for x in updateItems ]
+        log.info("_get_update ....")
         updJob, suggMap = self._get_update(applyList)
+        log.info("_get_update ....end.")
 
         jobLists = updJob.getJobs()
+        log.info("get Jobs")
 
         totalJobs = len(jobLists)
         for num, job in enumerate(jobLists):
             status = '2'
+            log.info( (num, job)  )
             name = job[0][0]
 
             # On an erase display the old version/flavor information.
@@ -711,12 +763,16 @@ class PackageKitConaryBackend(PackageKitBaseBackend):
         '''
         log.info("========== _findPackage ==========")
         log.info(package_id)
-        name, version, flavor = self.get_package_from_id(package_id)
-        troveTuple = (name, version, flavor)
-        log.info("======== trove ")
-        log.info(troveTuple)
-        installed = self.check_installed(troveTuple)
-        return name, version, flavor, installed
+        troveTuples = self.get_package_from_id(package_id)
+        for troveTuple in troveTuples:
+            log.info("======== trove ")
+            log.info(troveTuple)
+            installed =self.check_installed(troveTuple)
+            log.info(installed)
+            name, version, flavor = troveTuple
+            return name, version, flavor, installed
+        else:
+            self.error(ERROR_INTERNAL_ERROR, "package_id Not Correct ")
 
     def repo_set_data(self, repoid, parameter, value):
         '''
diff --git a/backends/conary/conaryFilter.py b/backends/conary/conaryFilter.py
index 635e0e2..7475213 100644
--- a/backends/conary/conaryFilter.py
+++ b/backends/conary/conaryFilter.py
@@ -24,7 +24,8 @@ from packagekit.filter import *
 
 import re
 from pkConaryLog import log
-from conaryInit import conary_db
+from conarypk import ConaryPk
+
 class ConaryFilter(PackagekitFilter):
 
     def _pkg_get_unique(self, pkg):
@@ -44,18 +45,11 @@ class ConaryFilter(PackagekitFilter):
         '''
         Return if the packages are installed
         '''
-        log.info("======= FILTER ===== " )
-        log.info(pkg)
-        troveTuple = pkg
-        db = conary_db()
-        try:
-            troveTuple = troveTuple[0], troveTuple[1], troveTuple[2]
-            localInstall = db.findTrove(None, troveTuple)
-            installed = True
-        except:
-            installed = False
-        log.info("Installed ???")
-        log.info(installed)
-        return installed
+        conary_cli = ConaryPk()
+        result = conary_cli.query(pkg['name'])
+        if result:
+            return True
+        else:
+            return False
 
 
diff --git a/backends/conary/conarypk.py b/backends/conary/conarypk.py
new file mode 100644
index 0000000..d44f14e
--- /dev/null
+++ b/backends/conary/conarypk.py
@@ -0,0 +1,117 @@
+#!/usr/bin/python
+### compatible with conary 2.0.35
+###  greets mkj
+### zodman at foresightlinux.org under the WTFPL http://sam.zoy.org/wtfpl/
+
+from conary.conaryclient import ConaryClient, cmdline
+from conary import conarycfg
+from conary.versions import Label
+from conary.errors import TroveNotFound
+from conary.conaryclient.update import NoNewTrovesError
+
+
+class ConaryPk:
+    def __init__(self):
+        # get configs from /etc/conary
+        cfg = conarycfg.ConaryConfiguration( readConfigFiles = True)
+        # get if the machine its x86 or x86_64
+        cfg.initializeFlavors()
+        self.cfg = cfg
+
+        cli = ConaryClient(cfg)
+
+        # labels enable on /etc/conary/config.d/
+        self.default_label = self.cfg.installLabelPath
+
+        # get if x86 or x86_64
+        self.flavor = self.cfg.flavor[0]
+        # for client
+        self.cli = cli
+        # for query on system (database)
+        self.db = cli.db
+        # for request query on repository (repos)
+        self.repos = cli.repos
+
+    def _get_db(self):
+        """ get the database for do querys """
+        return self.db 
+
+    def _get_repos(self):
+        """ get repos for do request query """
+        return self.repos
+
+    def label(self, installLabel = None):
+        """ get label from config or custom installLabel """
+        if installLabel:
+            return Label(installLabel)
+        return self.default_label
+    def get_labels_from_config(self):
+        labels = []
+        for i in self.default_label:
+            if "foresight.rpath.org" in i.asString():
+                labels.append(i.asString())
+        return labels
+    def query(self, name):
+        """ do a conary query """
+        if name is None or name == "":
+            return []
+        db = self._get_db()
+        try:
+            troves = db.findTrove( None ,(name , None, None ))
+            #return db.getTroves(troves)
+            return troves
+        except TroveNotFound:
+            return []
+
+    def request_query(self, name, installLabel = None):
+        """ Do a conary request query """
+        label = self.label( installLabel )
+        repos = self._get_repos()
+        try:
+            troves = repos.findTrove( label ,( name, None ,self.flavor ) )
+            #return repos.getTroves(troves)
+            return troves
+        except TroveNotFound:
+            return []
+
+    def get_metadata( self, name , installLabel = None):
+        pass
+        
+    def remove(self, name):
+        return self.update(name, remove = True )
+    def update(self, name, installLabel= None, remove  = False ):
+        cli = self.cli
+        #get a trove
+        troves = self.request_query(name, installLabel)
+        for trove in troves:
+            trovespec =  self.trove_to_spec( trove, remove )
+        try:
+            # create a Job
+            job = cli.newUpdateJob()
+            # Add Update task to Job
+            cli.prepareUpdateJob(job, cmdline.parseChangeList(trovespec))
+            # Apply the Job
+            cli.applyUpdateJob(job)
+            # im rulz
+            return "Update Success of %s" %  trovespec
+        except NoNewTrovesError:
+            return "no new Troves Found by %s " % trovespec
+    
+    def trove_to_spec(self, trove, remove = False ):
+        # add a -app=blah.rpath.org at rpl:devel for remove packages
+        if remove:
+            tmp = '-'
+        else:
+            tmp = ""
+        return tmp + cmdline.toTroveSpec( trove[0], str(trove[1]), None)
+
+if __name__ == "__main__":
+    conary = ConaryPk()
+    print conary.query("dpaster")
+    #print conary.query("gimpasdas")
+    #print conary.request_query("dpaster",'zodyrepo.rpath.org at rpl:devel')
+    #print conary.request_query("gimp")
+    #print conary.request_query("gimpasdasd")
+    #print conary.update("amsn")
+    #print conary.remove("amsn")
+


More information about the PackageKit-commit mailing list