X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fpkgmgrinfo_pkginfo.c;h=b72c63d6fdf40c78e4d91156d33500d443a8ff4a;hb=134582f3a1d24ed811633a6fd0db447b667b5f12;hp=ea5a3a45222749304e9c35822884edb3d50342b1;hpb=502251b809ba693329292717d32627ab61017d8d;p=platform%2Fcore%2Fappfw%2Fpkgmgr-info.git diff --git a/src/pkgmgrinfo_pkginfo.c b/src/pkgmgrinfo_pkginfo.c index ea5a3a4..b72c63d 100644 --- a/src/pkgmgrinfo_pkginfo.c +++ b/src/pkgmgrinfo_pkginfo.c @@ -1149,6 +1149,22 @@ API int pkgmgrinfo_pkginfo_is_for_all_users(pkgmgrinfo_pkginfo_h handle, bool *f return pkgmgrinfo_pkginfo_is_global(handle, for_all_users); } +API int pkgmgrinfo_pkginfo_is_lib(pkgmgrinfo_pkginfo_h handle, bool *lib) +{ + pkgmgr_pkginfo_x *info = (pkgmgr_pkginfo_x *)handle; + + retvm_if(handle == NULL, PMINFO_R_EINVAL, "pkginfo handle is NULL\n"); + retvm_if(lib == NULL, PMINFO_R_EINVAL, + "Argument supplied to hold return value is NULL\n"); + + if (info->pkg_info == NULL || info->pkg_info->lib == NULL) + return PMINFO_R_ERROR; + + *lib = _get_bool_value(info->pkg_info->lib); + + return PMINFO_R_OK; +} + API int pkgmgrinfo_pkginfo_destroy_pkginfo(pkgmgrinfo_pkginfo_h handle) { pkgmgr_pkginfo_x *info = (pkgmgr_pkginfo_x *)handle; @@ -1190,6 +1206,9 @@ API int pkgmgrinfo_pkginfo_filter_destroy(pkgmgrinfo_pkginfo_filter_h handle) if (filter->list_metadata) g_slist_free_full(filter->list_metadata, __destroy_metadata_node); + if (filter->list_pkg_metadata) + g_slist_free_full(filter->list_pkg_metadata, + __destroy_metadata_node); free(filter); @@ -1528,22 +1547,22 @@ static void __free_depends_on(gpointer data) pkgmgrinfo_basic_free_dependency(dep); } -API int pkgmgrinfo_pkginfo_foreach_depends_on(pkgmgrinfo_pkginfo_h handle, +/* This API is not exported at the header file */ +API int pkgmgrinfo_pkginfo_foreach_depends_on_by_pkgid(const char *pkgid, pkgmgrinfo_pkg_dependency_list_cb dependency_cb, - void *user_data) + void *user_data, uid_t uid) { int ret; - pkgmgr_pkginfo_x *info = (pkgmgr_pkginfo_x *)handle; GList *pkg_list = NULL; GList *l; dependency_x *dep; - if (handle == NULL || dependency_cb == NULL || info->pkg_info == NULL) { + if (pkgid == NULL || dependency_cb == NULL) { LOGE("invalid parameter"); return PMINFO_R_EINVAL; } - ret = _pkginfo_get_depends_on(info->uid, info->pkg_info->package, &pkg_list); + ret = _pkginfo_get_depends_on(uid, pkgid, &pkg_list); if (ret != PMINFO_R_OK) return PMINFO_R_ERROR; @@ -1559,6 +1578,22 @@ API int pkgmgrinfo_pkginfo_foreach_depends_on(pkgmgrinfo_pkginfo_h handle, return PMINFO_R_OK; } +API int pkgmgrinfo_pkginfo_foreach_depends_on(pkgmgrinfo_pkginfo_h handle, + pkgmgrinfo_pkg_dependency_list_cb dependency_cb, + void *user_data) +{ + pkgmgr_pkginfo_x *info = (pkgmgr_pkginfo_x *)handle; + + if (handle == NULL || dependency_cb == NULL || info->pkg_info == NULL) { + LOGE("invalid parameter"); + return PMINFO_R_EINVAL; + } + + return pkgmgrinfo_pkginfo_foreach_depends_on_by_pkgid( + info->pkg_info->package, dependency_cb, user_data, + info->uid); +} + API int pkgmgrinfo_pkginfo_foreach_res_allowed_package( pkgmgrinfo_pkginfo_h handle, pkgmgrinfo_res_allowed_package_list_cb res_allowed_package_cb, @@ -1738,3 +1773,134 @@ API int pkgmgrinfo_compare_package_version(const char *current_version, return PMINFO_R_OK; } + +API int pkgmgrinfo_pkginfo_foreach_metadata(pkgmgrinfo_pkginfo_h handle, + pkgmgrinfo_pkg_metadata_list_cb metadata_func, void *user_data) +{ + retvm_if(handle == NULL, PMINFO_R_EINVAL, "pkginfo handle is NULL"); + retvm_if(metadata_func == NULL, PMINFO_R_EINVAL, + "Callback function is NULL"); + int ret = -1; + metadata_x *ptr; + GList *tmp; + pkgmgr_pkginfo_x *info = (pkgmgr_pkginfo_x *)handle; + + if (info->pkg_info == NULL) + return PMINFO_R_ERROR; + + for (tmp = info->pkg_info->metadata; tmp; tmp = tmp->next) { + ptr = (metadata_x *)tmp->data; + if (ptr == NULL) + continue; + if (ptr->key) { + ret = metadata_func(ptr->key, ptr->value ? + ptr->value : "", user_data); + if (ret < 0) + break; + } + } + return PMINFO_R_OK; +} + +API int pkgmgrinfo_pkginfo_metadata_filter_create( + pkgmgrinfo_pkginfo_metadata_filter_h *handle) +{ + return pkgmgrinfo_pkginfo_filter_create(handle); +} + +API int pkgmgrinfo_pkginfo_metadata_filter_destroy( + pkgmgrinfo_pkginfo_metadata_filter_h handle) +{ + return pkgmgrinfo_pkginfo_filter_destroy(handle); +} + +API int pkgmgrinfo_pkginfo_metadata_filter_add( + pkgmgrinfo_pkginfo_metadata_filter_h handle, + const char *key, const char *value) +{ + pkgmgrinfo_filter_x *filter = (pkgmgrinfo_filter_x *)handle; + pkgmgrinfo_metadata_node_x *node; + + /* value can be NULL. + * In that case all pkgs with specified key should be displayed + */ + if (handle == NULL || key == NULL) { + LOGE("invalid parameter"); + return PMINFO_R_EINVAL; + } + + node = calloc(1, sizeof(pkgmgrinfo_metadata_node_x)); + if (node == NULL) { + LOGE("out of memory"); + return PMINFO_R_ERROR; + } + + node->key = strdup(key); + if (value && strlen(value)) + node->value = strdup(value); + + filter->list_pkg_metadata = g_slist_append(filter->list_pkg_metadata, + (gpointer)node); + + return PMINFO_R_OK; +} + +API int pkgmgrinfo_pkginfo_usr_metadata_filter_foreach( + pkgmgrinfo_pkginfo_metadata_filter_h handle, + pkgmgrinfo_pkg_list_cb pkg_cb, void *user_data, uid_t uid) +{ + if (handle == NULL || pkg_cb == NULL) { + LOGE("invalid parameter"); + return PMINFO_R_EINVAL; + } + + pkgmgrinfo_filter_x *filter = (pkgmgrinfo_filter_x *)handle; + + if (pkgmgrinfo_pkginfo_filter_add_bool(filter, + PMINFO_PKGINFO_PROP_PACKAGE_DISABLE, false)) + return PMINFO_R_ERROR; + + return _pkginfo_get_filtered_foreach_pkginfo(uid, handle, + PMINFO_PKGINFO_GET_ALL, pkg_cb, + user_data); +} + +API int pkgmgrinfo_pkginfo_metadata_filter_foreach( + pkgmgrinfo_pkginfo_metadata_filter_h handle, + pkgmgrinfo_pkg_list_cb pkg_cb, void *user_data) +{ + return pkgmgrinfo_pkginfo_usr_metadata_filter_foreach(handle, pkg_cb, + user_data, _getuid()); +} + +API int pkgmgrinfo_pkginfo_get_metadata_value( + pkgmgrinfo_pkginfo_h handle, const char *metadata_key, + char **metadata_value) +{ + retvm_if(handle == NULL, PMINFO_R_EINVAL, "pkginfo handle is NULL"); + retvm_if(metadata_key == NULL, PMINFO_R_EINVAL, "metadata_key is NULL"); + retvm_if(metadata_value == NULL, PMINFO_R_EINVAL, + "metadata_value is NULL"); + + GList *list_md = NULL; + metadata_x *metadata = NULL; + pkgmgr_pkginfo_x *info = (pkgmgr_pkginfo_x *)handle; + + list_md = info->pkg_info->metadata; + + for (; list_md; list_md = list_md->next) { + metadata = (metadata_x *)list_md->data; + if (metadata && metadata->key) { + if (strcasecmp(metadata->key, metadata_key) == 0) { + if (metadata->value == NULL) + *metadata_value = ""; + else + *metadata_value = + (char *)metadata->value; + return PMINFO_R_OK; + } + } + } + + return PMINFO_R_EINVAL; +}