From ca272a474878a99d79f6fda23003d18bf14d0728 Mon Sep 17 00:00:00 2001 From: Junghyun Yeon Date: Mon, 22 Feb 2021 20:10:27 +0900 Subject: [PATCH] Implement _pkginfo_get_packages Signed-off-by: Junghyun Yeon --- src/manager/pkginfo_manager.cc | 32 +++++++++++++++++++++++++++++--- 1 file changed, 29 insertions(+), 3 deletions(-) diff --git a/src/manager/pkginfo_manager.cc b/src/manager/pkginfo_manager.cc index c031023..6055a7c 100644 --- a/src/manager/pkginfo_manager.cc +++ b/src/manager/pkginfo_manager.cc @@ -23,8 +23,9 @@ #include "pkgmgrinfo_private.h" #include "logging.hh" -#include "filter_parcelable.hh" -#include "pkginfo_parcelable.hh" +#include "common/parcel/filter_parcelable.hh" +#include "common/parcel/pkginfo_parcelable.hh" +#include "common/parcel/result_parcelable.hh" #include "client/pkginfo_client.hh" @@ -42,5 +43,30 @@ extern "C" EXPORT_API int _pkginfo_get_packages(uid_t uid, pkgmgrinfo_filter_x *filter, int flag, GHashTable *packages) { - return 0; + + std::shared_ptr parcelable( + new pkgmgr_common::parcel::FilterParcelable(uid, + static_cast(filter), flag)); + + pkgmgr_client::PkgInfoClient client(parcelable, uid); + if (!client.SendRequest()) + return PMINFO_R_ERROR; + + std::shared_ptr return_parcel( + std::static_pointer_cast( + client.GetResultParcel())); + + tizen_base::Parcel parcel; + parcel.ReadParcelable(return_parcel.get()); + + auto result_list = return_parcel->GetPkgInfo(); + if (result_list.size() == 0) + return PMINFO_R_ENOENT; + for (auto& pkginfo : result_list) { + g_hash_table_insert(packages, (gpointer)pkginfo->package, (gpointer)pkginfo); + // TODO: remove element from list. is this work? + pkginfo = nullptr; + } + + return PMINFO_R_OK; } \ No newline at end of file -- 2.7.4