summaryrefslogtreecommitdiffstats
path: root/lib
diff options
context:
space:
mode:
authorZdenek Prikryl <zprikryl@redhat.com>2009-02-05 19:20:22 +0100
committerZdenek Prikryl <zprikryl@redhat.com>2009-02-05 19:20:22 +0100
commit59a7de9e2d8a2bb08ba461fc305d65a2fdba1a82 (patch)
tree2d40217298539ae0d05befe2bbedd002527b0621 /lib
parent5e021fece42b390d93b0eae1c40583b819ed07e5 (diff)
downloadabrt-59a7de9e2d8a2bb08ba461fc305d65a2fdba1a82.tar.gz
abrt-59a7de9e2d8a2bb08ba461fc305d65a2fdba1a82.tar.xz
abrt-59a7de9e2d8a2bb08ba461fc305d65a2fdba1a82.zip
simple PackageKit wrapper
Diffstat (limited to 'lib')
-rw-r--r--lib/Utils/Packages.cpp112
-rw-r--r--lib/Utils/Packages.h48
2 files changed, 160 insertions, 0 deletions
diff --git a/lib/Utils/Packages.cpp b/lib/Utils/Packages.cpp
new file mode 100644
index 00000000..ed406b03
--- /dev/null
+++ b/lib/Utils/Packages.cpp
@@ -0,0 +1,112 @@
+/*
+ Packages.cpp - PackageKit wrapper
+
+ Copyright (C) 2009 Zdenek Prikryl (zprikryl@redhat.com)
+ Copyright (C) 2009 RedHat inc.
+
+ 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.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#include "Packages.h"
+
+CPackages::CPackages() :
+ m_pPkClient(NULL),
+ m_bBusy(false)
+{
+ g_type_init();
+ m_pPkClient = pk_client_new();
+// pk_client_set_synchronous (m_pPkClient, TRUE, NULL);
+}
+
+CPackages::~CPackages()
+{
+ g_object_unref(m_pPkClient);
+}
+
+bool CPackages::SearchFile(const std::string& pPath)
+{
+ if (m_bBusy)
+ {
+ return false;
+ }
+ 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)
+ {
+ std::string err = error->message;
+ g_error_free(error);
+ error = NULL;
+ throw std::string("CPackages::SearchFile(): ") + err;
+ }
+ return true;
+}
+
+bool CPackages::Install(const std::string& pPackage)
+{
+ // TODO: write this
+}
+
+
+bool CPackages::GetStatus()
+{
+ GError *error = NULL;
+ PkStatusEnum status;
+ gboolean ret = pk_client_get_status(m_pPkClient, &status, &error);
+ if (ret == FALSE)
+ {
+ std::string err = error->message;
+ g_error_free(error);
+ error = NULL;
+ throw std::string("CPackages::SearchFile(): ") + err;
+ }
+ if (status != PK_STATUS_ENUM_FINISHED)
+ {
+ return false;
+ }
+ 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
new file mode 100644
index 00000000..2228acc0
--- /dev/null
+++ b/lib/Utils/Packages.h
@@ -0,0 +1,48 @@
+/*
+ Packages.h - PackageKit wrapper
+
+ Copyright (C) 2009 Zdenek Prikryl (zprikryl@redhat.com)
+ Copyright (C) 2009 RedHat inc.
+
+ 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.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+ */
+
+#ifndef PACKAGES_H_
+#define PACKAGES_H_
+
+#include <glib.h>
+#include <packagekit-glib/packagekit.h>
+#include <string>
+
+class CPackages
+{
+ private:
+
+ PkClient *m_pPkClient;
+ bool m_bBusy;
+
+ public:
+ CPackages();
+ ~CPackages();
+ bool SearchFile(const std::string& pPath);
+ bool Install(const std::string& pPackage);
+ bool GetStatus();
+
+ std::string GetSearchFileReply();
+ bool GetInstallReply();
+
+};
+
+#endif /* PACKAGES_H_ */