#include "pkgmgrinfo_private.h"
#include "logging.hh"
+#include "common/parcel/appinfo_parcelable.hh"
#include "common/parcel/filter_parcelable.hh"
#include "common/parcel/pkginfo_parcelable.hh"
#include "common/parcel/result_parcelable.hh"
#define EXPORT_API __attribute__((visibility("default")))
extern "C" EXPORT_API int _pkginfo_get_packages(uid_t uid,
- pkgmgrinfo_filter_x *filter, int flag, GHashTable *packages) {
-
+ pkgmgrinfo_filter_x *filter, int flag, GHashTable *packages) {
std::shared_ptr<pkgmgr_common::parcel::AbstractParcelable> parcelable(
new pkgmgr_common::parcel::FilterParcelable(uid,
static_cast<pkgmgrinfo_filter_x*>(filter), flag));
pkgmgr_client::PkgInfoClient client(parcelable, uid);
if (!client.SendRequest())
- return PMINFO_R_ERROR;
+ return PMINFO_R_ERROR;
std::shared_ptr<pkgmgr_common::parcel::PkgInfoParcelable> return_parcel(
std::static_pointer_cast<pkgmgr_common::parcel::PkgInfoParcelable>(
parcel.ReadParcelable(return_parcel.get());
auto result_list = return_parcel->GetPkgInfo();
- if (result_list.size() == 0)
- return PMINFO_R_ENOENT;
+ // TODO: check noentry error has returned if size of result_list is 0
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;
+ g_hash_table_insert(packages, (gpointer)pkginfo->package, (gpointer)pkginfo);
+ // TODO: remove element from list. is this work?
+ pkginfo = nullptr;
+ }
+
+ return PMINFO_R_OK;
+}
+
+// TODO: Need to add target db uid to identify which database to be searched
+extern "C" EXPORT_API int _appinfo_get_applications(uid_t db_uid, uid_t uid,
+ pkgmgrinfo_filter_x *filter, int flag, GHashTable *packages) {
+ std::shared_ptr<pkgmgr_common::parcel::AbstractParcelable> parcelable(
+ new pkgmgr_common::parcel::FilterParcelable(uid,
+ static_cast<pkgmgrinfo_filter_x*>(filter), flag));
+
+ pkgmgr_client::PkgInfoClient client(parcelable, uid);
+ if (!client.SendRequest())
+ return PMINFO_R_ERROR;
+
+ std::shared_ptr<pkgmgr_common::parcel::AppInfoParcelable> return_parcel(
+ std::static_pointer_cast<pkgmgr_common::parcel::AppInfoParcelable>(
+ client.GetResultParcel()));
+
+ tizen_base::Parcel parcel;
+ parcel.ReadParcelable(return_parcel.get());
+ auto result_list = return_parcel->GetAppInfo();
+ for (auto& appinfo : result_list) {
+ g_hash_table_insert(packages, (gpointer)appinfo->appid, (gpointer)appinfo);
+ // TODO: remove element from list. is this work?
+ appinfo = nullptr;
}
return PMINFO_R_OK;
#include "pkgmgrinfo_debug.h"
#include "pkgmgrinfo_private.h"
#include "pkgmgr_parser.h"
+#include "manager/pkginfo_manager.h"
static bool _get_bool_value(const char *str)
{
return PMINFO_R_ERROR;
// TODO: need to use pkginfo-client APIs
+ ret = _appinfo_get_applications(uid, uid, filter,
+ PMINFO_APPINFO_GET_ALL, list);
+ if (ret != PMINFO_R_OK) {
+ g_hash_table_destroy(list);
+ return ret;
+ }
if (!g_hash_table_size(list)) {
_LOGD("appinfo for [%s] is not existed for user [%d]",
free(info);
return PMINFO_R_ENOENT;
}
- //info->locale = locale;
+ info->locale = strdup(info->app_info->locale);
info->package = strdup(info->app_info->package);
- if (!info->package) {
+ if (!info->package || !info->locale) {
_LOGE("out of memory");
g_hash_table_destroy(list);
free(info);
GHashTable *list;
GHashTableIter iter;
gpointer value;
+ int ret;
list = g_hash_table_new_full(g_str_hash, g_str_equal, NULL,
__free_applications);
if (list == NULL)
return PMINFO_R_ERROR;
- // TODO: use pkginfo-client APIs to get appinfo
+ ret = _appinfo_get_applications(uid, uid, filter,
+ flag | PMINFO_APPINFO_GET_BASICINFO, list);
+ if (ret != PMINFO_R_OK) {
+ g_hash_table_destroy(list);
+ return ret;
+ }
+
g_hash_table_iter_init(&iter, list);
while (g_hash_table_iter_next(&iter, NULL, &value)) {
app = (application_x *)value;
info.app_info = app;
- //info.locale = locale;
+ info.locale = info.app_info->locale;
info.package = app->package;
if (app_list_cb(&info, user_data) < 0)
break;