Fix pkgmgr_client_enable/disable_packages 08/96208/2
authorSangyoon Jang <s89.jang@samsung.com>
Tue, 8 Nov 2016 07:09:32 +0000 (16:09 +0900)
committerSangyoon Jang <s89.jang@samsung.com>
Tue, 8 Nov 2016 07:52:02 +0000 (16:52 +0900)
Add user event callback.

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

index 9806c3b..c6a3ee0 100644 (file)
@@ -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.
index c31e8e0..34d13aa 100644 (file)
@@ -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,