summaryrefslogtreecommitdiffstats
path: root/lib/Utils/Packages.cpp
diff options
context:
space:
mode:
authorZdenek Prikryl <zprikryl@redhat.com>2009-02-12 11:49:49 +0100
committerZdenek Prikryl <zprikryl@redhat.com>2009-02-12 11:49:49 +0100
commit2b0714fa5b6fa975bd54626b9f2801407dc35962 (patch)
treef8e3e5ea0e93dff7e31c3e507397708ac3504d04 /lib/Utils/Packages.cpp
parent43e425b5370b816f2110bf83f5fa09af9efedfe1 (diff)
downloadabrt-2b0714fa5b6fa975bd54626b9f2801407dc35962.tar.gz
abrt-2b0714fa5b6fa975bd54626b9f2801407dc35962.tar.xz
abrt-2b0714fa5b6fa975bd54626b9f2801407dc35962.zip
for finding package names we use rpm instead of packagekit
Diffstat (limited to 'lib/Utils/Packages.cpp')
-rw-r--r--lib/Utils/Packages.cpp73
1 files changed, 28 insertions, 45 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
-}