diff options
author | Zdenek Prikryl <zprikryl@redhat.com> | 2009-02-12 11:49:49 +0100 |
---|---|---|
committer | Zdenek Prikryl <zprikryl@redhat.com> | 2009-02-12 11:49:49 +0100 |
commit | 2b0714fa5b6fa975bd54626b9f2801407dc35962 (patch) | |
tree | f8e3e5ea0e93dff7e31c3e507397708ac3504d04 | |
parent | 43e425b5370b816f2110bf83f5fa09af9efedfe1 (diff) | |
download | abrt-2b0714fa5b6fa975bd54626b9f2801407dc35962.tar.gz abrt-2b0714fa5b6fa975bd54626b9f2801407dc35962.tar.xz abrt-2b0714fa5b6fa975bd54626b9f2801407dc35962.zip |
for finding package names we use rpm instead of packagekit
-rw-r--r-- | lib/Utils/Packages.cpp | 73 | ||||
-rw-r--r-- | lib/Utils/Packages.h | 9 |
2 files changed, 31 insertions, 51 deletions
diff --git a/lib/Utils/Packages.cpp b/lib/Utils/Packages.cpp index ed406b0..f43e0f5 100644 --- a/lib/Utils/Packages.cpp +++ b/lib/Utils/Packages.cpp @@ -20,6 +20,11 @@ */ #include "Packages.h" +#include <rpm/rpmts.h> +#include <rpm/rpmds.h> +#include <rpm/rpmcli.h> +#include <sstream> + CPackages::CPackages() : m_pPkClient(NULL), @@ -35,26 +40,33 @@ CPackages::~CPackages() g_object_unref(m_pPkClient); } -bool CPackages::SearchFile(const std::string& pPath) +std::string CPackages::SearchFile(const std::string& pPath) { - if (m_bBusy) + std::stringstream ss; + char *argv[] = {(char*)""}; + poptContext context = rpmcliInit(0, argv, NULL); + rpmts ts = rpmtsCreate(); + rpmdbMatchIterator iter = rpmtsInitIterator(ts, RPMTAG_BASENAMES, "/usr/sbin/acpid", 0); + Header header; + char* nerv = NULL; + + if ((header = rpmdbNextIterator(iter)) != NULL) { - return false; + nerv = headerGetNEVR(header, NULL); } - m_bBusy = true; - GError *error = NULL; - gboolean ret = pk_client_search_file (m_pPkClient, - pk_bitfield_value (PK_FILTER_ENUM_INSTALLED), - pPath.c_str(), - &error); - if (ret == FALSE) + + headerFree(header); + rpmcliFini(context); + rpmtsFree(ts); + + if (nerv != NULL) { - std::string err = error->message; - g_error_free(error); - error = NULL; - throw std::string("CPackages::SearchFile(): ") + err; + std::string ret = nerv; + free(nerv); + return ret; } - return true; + + return ""; } bool CPackages::Install(const std::string& pPackage) @@ -63,7 +75,7 @@ bool CPackages::Install(const std::string& pPackage) } -bool CPackages::GetStatus() +bool CPackages::GetInstallationStatus() { GError *error = NULL; PkStatusEnum status; @@ -81,32 +93,3 @@ bool CPackages::GetStatus() } return true; } - -std::string CPackages::GetSearchFileReply() -{ - GError *error = NULL; - std::string packageName = ""; - gchar *package; - gboolean ret = pk_client_get_package (m_pPkClient, &package, &error); - if (ret == FALSE) - { - std::string err = error->message; - g_error_free(error); - if (err == "No package data available") - { - return ""; - } - throw std::string("CPackages::SearchFile(): ") + err; - } - packageName = package; - packageName[packageName.find(";")] = '-'; - packageName = packageName.substr(0, packageName.find(";")); - - m_bBusy = false; - return packageName; -} - -bool CPackages::GetInstallReply() -{ - // TODO: write this -} diff --git a/lib/Utils/Packages.h b/lib/Utils/Packages.h index 2228acc..9874dd7 100644 --- a/lib/Utils/Packages.h +++ b/lib/Utils/Packages.h @@ -36,13 +36,10 @@ class CPackages public: CPackages(); ~CPackages(); - bool SearchFile(const std::string& pPath); - bool Install(const std::string& pPackage); - bool GetStatus(); - - std::string GetSearchFileReply(); - bool GetInstallReply(); + std::string SearchFile(const std::string& pPath); + bool Install(const std::string& pPackage); + bool GetInstallationStatus(); }; #endif /* PACKAGES_H_ */ |