From: Sangyoon Jang Date: Tue, 8 Nov 2016 07:09:32 +0000 (+0900) Subject: Fix pkgmgr_client_enable/disable_packages X-Git-Tag: accepted/tizen/3.0/common/20161114.081602~1 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F08%2F96208%2F2;p=platform%2Fcore%2Fappfw%2Fslp-pkgmgr.git Fix pkgmgr_client_enable/disable_packages Add user event callback. Change-Id: I72b57130305d74e962a654a6582b4016a246a592 Signed-off-by: Sangyoon Jang --- diff --git a/client/include/package-manager.h b/client/include/package-manager.h index 9806c3b..c6a3ee0 100644 --- a/client/include/package-manager.h +++ b/client/include/package-manager.h @@ -535,15 +535,19 @@ int pkgmgr_client_usr_activate(pkgmgr_client *pc, const char *pkg_type, * @param[in] pkg_type package type * @param[in] pkgids array of package ids * @param[in] n_pkgs size of array + * @param[in] event_cb user callback + * @param[in] data user data * @return request_id (>0) if success, error code(<0) if fail\n * @retval PKGMGR_R_OK success * @retval PKGMGR_R_EINVAL invalid argument * @retval PKGMGR_R_ECOMM communication error */ int pkgmgr_client_activate_packages(pkgmgr_client *pc, const char *pkg_type, - const char **pkgids, int n_pkgs); + const char **pkgids, int n_pkgs, + pkgmgr_handler event_cb, void *data); int pkgmgr_client_usr_activate_packages(pkgmgr_client *pc, const char *pkg_type, - const char **pkgids, int n_pkgs, uid_t uid); + const char **pkgids, int n_pkgs, + pkgmgr_handler event_cb, void *data, uid_t uid); /** * @brief This API deactivates package. @@ -572,15 +576,19 @@ int pkgmgr_client_usr_deactivate(pkgmgr_client *pc, const char *pkg_type, * @param[in] pkg_type package type * @param[in] pkgids array of package ids * @param[in] n_pkgs size of array + * @param[in] event_cb user callback + * @param[in] data user data * @return request_id (>0) if success, error code(<0) if fail\n * @retval PKGMGR_R_OK success * @retval PKGMGR_R_EINVAL invalid argument * @retval PKGMGR_R_ECOMM communication error */ int pkgmgr_client_deactivate_packages(pkgmgr_client *pc, const char *pkg_type, - const char **pkgids, int n_pkgs); + const char **pkgids, int n_pkgs, + pkgmgr_handler event_cb, void *data); int pkgmgr_client_usr_deactivate_packages(pkgmgr_client *pc, const char *pkg_type, - const char **pkgids, int n_pkgs, uid_t uid); + const char **pkgids, int n_pkgs, + pkgmgr_handler event_cb, void *data, uid_t uid); /** * @brief This API deactivates app. diff --git a/client/src/pkgmgr.c b/client/src/pkgmgr.c index c31e8e0..34d13aa 100644 --- a/client/src/pkgmgr.c +++ b/client/src/pkgmgr.c @@ -881,7 +881,7 @@ API int pkgmgr_client_usr_activate(pkgmgr_client *pc, const char *pkg_type, return ret; } - g_variant_get(result, "(i)", &ret); + g_variant_get(result, "(is)", &ret, NULL); g_variant_unref(result); return ret; @@ -895,12 +895,14 @@ API int pkgmgr_client_activate(pkgmgr_client *pc, const char *pkg_type, API int pkgmgr_client_usr_activate_packages(pkgmgr_client *pc, const char *pkg_type, const char **pkgids, int n_pkgs, - uid_t uid) + pkgmgr_handler event_cb, void *data, uid_t uid) { GVariant *result; GVariantBuilder *builder; int ret = PKGMGR_R_ECOMM; + char *req_key = NULL; struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc; + struct cb_info *cb_info; int i; if (pc == NULL || pkgids == NULL || pkg_type == NULL || n_pkgs < 1) { @@ -908,6 +910,11 @@ API int pkgmgr_client_usr_activate_packages(pkgmgr_client *pc, return PKGMGR_R_EINVAL; } + if (client->pc_type != PC_REQUEST) { + ERR("client type is not PC_REQUEST"); + return PKGMGR_R_EINVAL; + } + builder = g_variant_builder_new(G_VARIANT_TYPE("as")); for (i = 0; i < n_pkgs; i++) g_variant_builder_add(builder, "s", pkgids[i]); @@ -921,17 +928,38 @@ API int pkgmgr_client_usr_activate_packages(pkgmgr_client *pc, return ret; } - g_variant_get(result, "(i)", &ret); + g_variant_get(result, "(i&s)", &ret, &req_key); + if (req_key == NULL) { + g_variant_unref(result); + return PKGMGR_R_ECOMM; + } + if (ret != PKGMGR_R_OK) { + g_variant_unref(result); + return ret; + } + + cb_info = __create_event_cb_info(client, event_cb, data, req_key); + if (cb_info == NULL) { + g_variant_unref(result); + return PKGMGR_R_ERROR; + } g_variant_unref(result); + ret = pkgmgr_client_connection_set_callback(client, cb_info); + if (ret != PKGMGR_R_OK) { + __free_cb_info(cb_info); + return ret; + } + client->cb_info_list = g_list_append(client->cb_info_list, cb_info); - return ret; + return cb_info->req_id; } API int pkgmgr_client_activate_packages(pkgmgr_client *pc, - const char *pkg_type, const char **pkgids, int n_pkgs) + const char *pkg_type, const char **pkgids, int n_pkgs, + pkgmgr_handler event_cb, void *data) { return pkgmgr_client_usr_activate_packages(pc, pkg_type, - pkgids, n_pkgs, _getuid()); + pkgids, n_pkgs, event_cb, data, _getuid()); } API int pkgmgr_client_usr_deactivate(pkgmgr_client *pc, const char *pkg_type, @@ -959,7 +987,7 @@ API int pkgmgr_client_usr_deactivate(pkgmgr_client *pc, const char *pkg_type, return ret; } - g_variant_get(result, "(i)", &ret); + g_variant_get(result, "(is)", &ret, NULL); g_variant_unref(result); return ret; @@ -973,12 +1001,14 @@ API int pkgmgr_client_deactivate(pkgmgr_client *pc, const char *pkg_type, API int pkgmgr_client_usr_deactivate_packages(pkgmgr_client *pc, const char *pkg_type, const char **pkgids, int n_pkgs, - uid_t uid) + pkgmgr_handler event_cb, void *data, uid_t uid) { GVariant *result; GVariantBuilder *builder; int ret = PKGMGR_R_ECOMM; + char *req_key = NULL; struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc; + struct cb_info *cb_info; int i; if (pc == NULL || pkgids == NULL || pkg_type == NULL || n_pkgs < 1) { @@ -986,29 +1016,55 @@ API int pkgmgr_client_usr_deactivate_packages(pkgmgr_client *pc, return PKGMGR_R_EINVAL; } + if (client->pc_type != PC_REQUEST) { + ERR("client type is not PC_REQUEST"); + return PKGMGR_R_EINVAL; + } + builder = g_variant_builder_new(G_VARIANT_TYPE("as")); for (i = 0; i < n_pkgs; i++) g_variant_builder_add(builder, "s", pkgids[i]); ret = pkgmgr_client_connection_send_request(client, "disable_pkgs", - g_variant_new("(us@as)", uid, pkg_type, builder), &result); + g_variant_new("(usas)", uid, pkg_type, builder), &result); g_variant_builder_unref(builder); if (ret != PKGMGR_R_OK) { ERR("request failed: %d", ret); return ret; } - g_variant_get(result, "(i)", &ret); + g_variant_get(result, "(i&s)", &ret, &req_key); + if (req_key == NULL) { + g_variant_unref(result); + return PKGMGR_R_ECOMM; + } + if (ret != PKGMGR_R_OK) { + g_variant_unref(result); + return ret; + } + + cb_info = __create_event_cb_info(client, event_cb, data, req_key); + if (cb_info == NULL) { + g_variant_unref(result); + return PKGMGR_R_ERROR; + } g_variant_unref(result); + ret = pkgmgr_client_connection_set_callback(client, cb_info); + if (ret != PKGMGR_R_OK) { + __free_cb_info(cb_info); + return ret; + } + client->cb_info_list = g_list_append(client->cb_info_list, cb_info); - return ret; + return cb_info->req_id; } API int pkgmgr_client_deactivate_packages(pkgmgr_client *pc, - const char *pkg_type, const char **pkgids, int n_pkgs) + const char *pkg_type, const char **pkgids, int n_pkgs, + pkgmgr_handler event_cb, void *data) { return pkgmgr_client_usr_deactivate_packages(pc, pkg_type, - pkgids, n_pkgs, _getuid()); + pkgids, n_pkgs, event_cb, data, _getuid()); } API int pkgmgr_client_usr_activate_app(pkgmgr_client *pc, const char *appid,