Implement app signal related with app disable/enable 30/57830/5 devel/ivi accepted/tizen/mobile/20160202.114611 accepted/tizen/mobile/20160203.051936 accepted/tizen/tv/20160202.114657 accepted/tizen/tv/20160203.051949 accepted/tizen/wearable/20160202.114735 accepted/tizen/wearable/20160203.052021 submit/devel/ivi/20160202.071226 submit/tizen/20160201.060916 submit/tizen/20160202.002216 submit/tizen/20160202.010556 submit/tizen/20160202.023804 submit/tizen/20160203.003555
authorJunghyun Yeon <jungh.yeon@samsung.com>
Mon, 25 Jan 2016 06:13:18 +0000 (15:13 +0900)
committerJunghyun Yeon <jungh.yeon@samsung.com>
Mon, 1 Feb 2016 06:07:22 +0000 (15:07 +0900)
Changes applied at
[pkgmgr-tool][pkgmgr-info][slp-pkgmgr][pkgmgr-server]

Change-Id: I83150dde0b73b1f1a234b0ea31249dd1d342cad3
Signed-off-by: Junghyun Yeon <jungh.yeon@samsung.com>
src/pkg_cmd.c

index 9f451ee105bb2352f91abe7cd793b6275d68ad6d..122fc3f558d8752029a4b850d62249798ea0f91b 100644 (file)
@@ -270,6 +270,30 @@ static int __return_cb(uid_t target_uid, int req_id, const char *pkg_type,
        return 0;
 }
 
+static int __app_return_cb(uid_t target_uid, int req_id, const char *pkg_type,
+                      const char *pkgid, const char *appid, const char *key, const char *val,
+                      const void *pmsg, void *priv_data)
+{
+       int ret_val;
+
+       if (strncmp(key, "error", strlen("error")) == 0) {
+               ret_val = atoi(val);
+               data.result = ret_val;
+       }
+
+       printf("__app_return_cb req_id[%d] pkg_type[%s] pkgid[%s] appid[%s] " \
+                               "key[%s] val[%s]\n",
+                               req_id, pkg_type, pkgid, appid, key, val);
+
+       if (strncmp(key, "end", strlen("end")) == 0) {
+               if ((strncmp(val, "fail", strlen("fail")) == 0) && data.result == 0)
+                       data.result = PKGCMD_ERRCODE_ERROR;
+               g_main_loop_quit(main_loop);
+       }
+
+       return 0;
+}
+
 static int __convert_to_absolute_path(char *path)
 {
        char abs[PKG_NAME_STRING_LEN_MAX] = {'\0'};
@@ -528,6 +552,7 @@ static int __process_request(uid_t uid)
        char pkg_old[PATH_MAX] = {0, };
        char pkg_new[PATH_MAX] = {0, };
        bool blacklist;
+       pkgmgrinfo_pkginfo_h pkginfo;
 
 #if !GLIB_CHECK_VERSION(2,35,0)
        g_type_init();
@@ -710,6 +735,7 @@ static int __process_request(uid_t uid)
                        break;
                }
 
+               main_loop = g_main_loop_new(NULL, FALSE);
                pc = pkgmgr_client_new(PC_REQUEST);
                if (pc == NULL) {
                        printf("PkgMgr Client Creation Failed\n");
@@ -717,29 +743,31 @@ static int __process_request(uid_t uid)
                        break;
                }
 
-               if ( strcmp(data.pkg_type, "app") == 0 ) {
-                       if (strlen(data.label) == 0) {
-                               ret = pkgmgr_client_usr_activate_app(pc, data.pkgid, uid);
-                               if (ret < 0)
-                                       break;
-                       } else {
+               if (strcmp(data.pkg_type, "app") == 0 ) {
+                       if (data.global)
+                               /* enable global app for this user only */
+                               ret = pkgmgr_client_activate_global_app_for_uid(pc, data.pkgid, __app_return_cb, getuid());
+                       else if (strlen(data.label) == 0)
+                               /* enable app which belongs to this user */
+                               ret = pkgmgr_client_usr_activate_app(pc, data.pkgid, __app_return_cb, uid);
+                       else {
+                               /* deprecated? */
                                printf("label [%s]\n", data.label);
                                char *largv[3] = {NULL, };
                                largv[0] = "-l";
                                largv[1] = data.label;
                                ret = pkgmgr_client_usr_activate_appv(pc, data.pkgid, largv, uid);
-                               if (ret < 0)
-                                       break;
                        }
-               } else {
-                               ret = pkgmgr_client_usr_activate(pc, data.pkg_type, data.pkgid, uid);
-                               if (ret < 0)
-                                       break;
-               }
-               ret = data.result;
+               } else
+                       /* enable package which belongs to this user */
+                       ret = pkgmgr_client_usr_activate(pc, data.pkg_type, data.pkgid, uid);
 
-               break;
+               if (ret < 0)
+                       break;
 
+               g_main_loop_run(main_loop);
+               ret = data.result;
+               break;
 
        case DEACTIVATE_REQ:
                if (data.pkg_type[0] == '\0' || data.pkgid[0] == '\0') {
@@ -749,6 +777,7 @@ static int __process_request(uid_t uid)
                        break;
                }
 
+               main_loop = g_main_loop_new(NULL, FALSE);
                pc = pkgmgr_client_new(PC_REQUEST);
                if (pc == NULL) {
                        printf("PkgMgr Client Creation Failed\n");
@@ -756,15 +785,21 @@ static int __process_request(uid_t uid)
                        break;
                }
 
-               if ( strcmp(data.pkg_type, "app") == 0 ) {
-                       ret = pkgmgr_client_usr_deactivate_app(pc, data.pkgid, uid);
-                       if (ret < 0)
-                               break;
-               }else {
+               if (strcmp(data.pkg_type, "app") == 0 ) {
+                       if (data.global)
+                               /* disable global app for this user only*/
+                               ret = pkgmgr_client_deactivate_global_app_for_uid(pc, data.pkgid, __app_return_cb, getuid());
+                       else
+                               /* disable app which belongs to this user */
+                               ret = pkgmgr_client_usr_deactivate_app(pc, data.pkgid, __app_return_cb, uid);
+               } else
+                       /* disable package which belongs to this user*/
                        ret = pkgmgr_client_usr_deactivate(pc, data.pkg_type, data.pkgid, uid);
-                       if (ret < 0)
-                               break;
-               }
+
+               if (ret < 0)
+                       break;
+
+               g_main_loop_run(main_loop);
                ret = data.result;
 
                break;