Implement new apis for enable/disable multiple packages 65/95565/3
authorSangyoon Jang <s89.jang@samsung.com>
Fri, 4 Nov 2016 00:29:14 +0000 (09:29 +0900)
committerSangyoon Jang <s89.jang@samsung.com>
Mon, 7 Nov 2016 10:07:43 +0000 (19:07 +0900)
Submit with:
 - https://review.tizen.org/gerrit/95640

Change-Id: Ic5f01059650552b7e1d1040dcf2cd89f06b887fe
Signed-off-by: Sangyoon Jang <s89.jang@samsung.com>
client/include/package-manager.h
client/src/pkgmgr.c

index 46d1b34..9806c3b 100644 (file)
@@ -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.
  *
@@ -544,6 +564,25 @@ 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.
  *
  * This API is for package-manager client application.\n
index c361f3d..c31e8e0 100644 (file)
@@ -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)
 {