X-Git-Url: http://review.tizen.org/git/?a=blobdiff_plain;f=src%2Fpkgmgrinfo_pkginfo.c;h=8d7a8a3cfb7bad6f4258c76fd5fc99d43c04cdd5;hb=f4e7e9f55c123b2eee4d27d35f3707df30f69129;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..8d7a8a3 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,102 @@ 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()); +}