From 51c970ec5f03d45915fe4554f5d1b1270ad6a79c Mon Sep 17 00:00:00 2001 From: Sangyoon Jang Date: Fri, 4 Nov 2016 09:29:14 +0900 Subject: [PATCH] Implement new apis for enable/disable multiple packages Submit with: - https://review.tizen.org/gerrit/95640 Change-Id: Ic5f01059650552b7e1d1040dcf2cd89f06b887fe Signed-off-by: Sangyoon Jang --- client/include/package-manager.h | 39 ++++++++++++ client/src/pkgmgr.c | 101 +++++++++++++++++++++++++++++-- 2 files changed, 136 insertions(+), 4 deletions(-) diff --git a/client/include/package-manager.h b/client/include/package-manager.h index 46d1b34..9806c3b 100644 --- a/client/include/package-manager.h +++ b/client/include/package-manager.h @@ -525,6 +525,26 @@ int pkgmgr_client_activate(pkgmgr_client *pc, const char *pkg_type, const char *pkgid); int pkgmgr_client_usr_activate(pkgmgr_client *pc, const char *pkg_type, const char *pkgid, uid_t uid); + +/** + * @brief This API activates multiple packages. + * + * This API is for package-manager client application.\n + * + * @param[in] pc pkgmgr_client + * @param[in] pkg_type package type + * @param[in] pkgids array of package ids + * @param[in] n_pkgs size of array + * @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); +int pkgmgr_client_usr_activate_packages(pkgmgr_client *pc, const char *pkg_type, + const char **pkgids, int n_pkgs, uid_t uid); + /** * @brief This API deactivates package. * @@ -543,6 +563,25 @@ int pkgmgr_client_deactivate(pkgmgr_client *pc, const char *pkg_type, int pkgmgr_client_usr_deactivate(pkgmgr_client *pc, const char *pkg_type, const char *pkgid, uid_t uid); +/** + * @brief This API deactivates multiple packages. + * + * This API is for package-manager client application.\n + * + * @param[in] pc pkgmgr_client + * @param[in] pkg_type package type + * @param[in] pkgids array of package ids + * @param[in] n_pkgs size of array + * @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); +int pkgmgr_client_usr_deactivate_packages(pkgmgr_client *pc, const char *pkg_type, + const char **pkgids, int n_pkgs, uid_t uid); + /** * @brief This API deactivates app. * diff --git a/client/src/pkgmgr.c b/client/src/pkgmgr.c index c361f3d..c31e8e0 100644 --- a/client/src/pkgmgr.c +++ b/client/src/pkgmgr.c @@ -861,6 +861,7 @@ API int pkgmgr_client_usr_activate(pkgmgr_client *pc, const char *pkg_type, { GVariant *result; int ret = PKGMGR_R_ECOMM; + GVariantBuilder *builder; struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc; if (pc == NULL || pkgid == NULL || pkg_type == NULL) { @@ -868,8 +869,13 @@ API int pkgmgr_client_usr_activate(pkgmgr_client *pc, const char *pkg_type, return PKGMGR_R_EINVAL; } - ret = pkgmgr_client_connection_send_request(client, "enable_pkg", - g_variant_new("(uss)", uid, pkg_type, pkgid), &result); + builder = g_variant_builder_new(G_VARIANT_TYPE("as")); + g_variant_builder_add(builder, "s", pkgid); + + ret = pkgmgr_client_connection_send_request(client, "enable_pkgs", + 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; @@ -887,10 +893,52 @@ API int pkgmgr_client_activate(pkgmgr_client *pc, const char *pkg_type, return pkgmgr_client_usr_activate(pc, pkg_type, pkgid, _getuid()); } +API int pkgmgr_client_usr_activate_packages(pkgmgr_client *pc, + const char *pkg_type, const char **pkgids, int n_pkgs, + uid_t uid) +{ + GVariant *result; + GVariantBuilder *builder; + int ret = PKGMGR_R_ECOMM; + struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc; + int i; + + if (pc == NULL || pkgids == NULL || pkg_type == NULL || n_pkgs < 1) { + ERR("invalid parameter"); + 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, "enable_pkgs", + 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_unref(result); + + return ret; +} + +API int pkgmgr_client_activate_packages(pkgmgr_client *pc, + const char *pkg_type, const char **pkgids, int n_pkgs) +{ + return pkgmgr_client_usr_activate_packages(pc, pkg_type, + pkgids, n_pkgs, _getuid()); +} + API int pkgmgr_client_usr_deactivate(pkgmgr_client *pc, const char *pkg_type, const char *pkgid, uid_t uid) { GVariant *result; + GVariantBuilder *builder; int ret = PKGMGR_R_ECOMM; struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc; @@ -899,8 +947,13 @@ API int pkgmgr_client_usr_deactivate(pkgmgr_client *pc, const char *pkg_type, return PKGMGR_R_EINVAL; } - ret = pkgmgr_client_connection_send_request(client, "disable_pkg", - g_variant_new("(uss)", uid, pkg_type, pkgid), &result); + builder = g_variant_builder_new(G_VARIANT_TYPE("as")); + g_variant_builder_add(builder, "s", pkgid); + + ret = pkgmgr_client_connection_send_request(client, "disable_pkgs", + 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; @@ -918,6 +971,46 @@ API int pkgmgr_client_deactivate(pkgmgr_client *pc, const char *pkg_type, return pkgmgr_client_usr_deactivate(pc, pkg_type, pkgid, _getuid()); } +API int pkgmgr_client_usr_deactivate_packages(pkgmgr_client *pc, + const char *pkg_type, const char **pkgids, int n_pkgs, + uid_t uid) +{ + GVariant *result; + GVariantBuilder *builder; + int ret = PKGMGR_R_ECOMM; + struct pkgmgr_client_t *client = (struct pkgmgr_client_t *)pc; + int i; + + if (pc == NULL || pkgids == NULL || pkg_type == NULL || n_pkgs < 1) { + ERR("invalid parameter"); + 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_builder_unref(builder); + if (ret != PKGMGR_R_OK) { + ERR("request failed: %d", ret); + return ret; + } + + g_variant_get(result, "(i)", &ret); + g_variant_unref(result); + + return ret; +} + +API int pkgmgr_client_deactivate_packages(pkgmgr_client *pc, + const char *pkg_type, const char **pkgids, int n_pkgs) +{ + return pkgmgr_client_usr_deactivate_packages(pc, pkg_type, + pkgids, n_pkgs, _getuid()); +} + API int pkgmgr_client_usr_activate_app(pkgmgr_client *pc, const char *appid, pkgmgr_app_handler app_event_cb, uid_t uid) { -- 2.34.1