diff options
author | Zdenek Prikryl <zprikryl@redhat.com> | 2009-02-05 19:20:22 +0100 |
---|---|---|
committer | Zdenek Prikryl <zprikryl@redhat.com> | 2009-02-05 19:20:22 +0100 |
commit | 59a7de9e2d8a2bb08ba461fc305d65a2fdba1a82 (patch) | |
tree | 2d40217298539ae0d05befe2bbedd002527b0621 /lib | |
parent | 5e021fece42b390d93b0eae1c40583b819ed07e5 (diff) | |
download | abrt-59a7de9e2d8a2bb08ba461fc305d65a2fdba1a82.tar.gz abrt-59a7de9e2d8a2bb08ba461fc305d65a2fdba1a82.tar.xz abrt-59a7de9e2d8a2bb08ba461fc305d65a2fdba1a82.zip |
simple PackageKit wrapper
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Utils/Packages.cpp | 112 | ||||
-rw-r--r-- | lib/Utils/Packages.h | 48 |
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_ */ |