Set the cache even though app-selector is resolved 28/116228/2
authorJunghoon Park <jh9216.park@samsung.com>
Thu, 23 Feb 2017 10:43:41 +0000 (19:43 +0900)
committerSemun Lee <sm79.lee@samsung.com>
Fri, 10 Mar 2017 04:07:05 +0000 (20:07 -0800)
Change-Id: I6c5f66a91d772facdc29b405952d59223b1624a5
Signed-off-by: Junghoon Park <jh9216.park@samsung.com>
src/service.c

index e0b01d2..48a497b 100755 (executable)
@@ -689,6 +689,14 @@ static void __put_cache(const char *checksum, const char *appid, uid_t uid)
        bundle_free(b);
 }
 
+static void __put_cache_with_info(const char *checksum, const char *info, uid_t uid)
+{
+       char buf[PATH_MAX];
+
+       snprintf(buf, sizeof(buf), "@APP_SELECTOR %s", info);
+       __put_cache(checksum, buf, uid);
+}
+
 static void __invalidate_cache(uid_t uid)
 {
        int ret;
@@ -831,6 +839,7 @@ API int aul_svc_run_service_for_uid(bundle *b, int request_code,
        int pkg_count = 0;
        int ret = -1;
        char *appid;
+       int l;
 
        GSList *pkg_list = NULL;
        char *query = NULL;
@@ -877,16 +886,17 @@ API int aul_svc_run_service_for_uid(bundle *b, int request_code,
 
        if (appid) {
                _D("Hit! %s / %s", checksum, appid);
-
-               if (!strcmp(appid, "^")) {
-                       free(appid);
-                       g_free(checksum);
-                       __free_resolve_info_data(&info);
-                       return AUL_SVC_RET_ENOMATCH;
+               l = strlen("@APP_SELECTOR ");
+               if (!strncmp("@APP_SELECTOR ", appid, l)) {
+                       bundle_add(b, AUL_SVC_K_URI_R_INFO, &appid[l]);
+                       ret = __run_svc_with_pkgname(APP_SELECTOR, b, request_code,
+                               cbfunc, data, uid);
+               } else if (!strcmp(appid, "^")) {
+                       ret = AUL_SVC_RET_ENOMATCH;
+               } else {
+                       ret = __run_svc_with_pkgname(appid, b, request_code,
+                               cbfunc, data, uid);
                }
-
-               ret = __run_svc_with_pkgname(appid, b, request_code,
-                       cbfunc, data, uid);
                free(appid);
                g_free(checksum);
                __free_resolve_info_data(&info);
@@ -966,6 +976,7 @@ API int aul_svc_run_service_for_uid(bundle *b, int request_code,
                        }
                } else if (pkg_count > 1) {
                        bundle_add(b, AUL_SVC_K_URI_R_INFO, info.uri);
+                       __put_cache_with_info(checksum, info.uri, uid);
                        ret = __run_svc_with_pkgname(APP_SELECTOR, b, request_code,
                                        cbfunc, data, uid);
                        goto end;
@@ -1033,6 +1044,7 @@ API int aul_svc_run_service_for_uid(bundle *b, int request_code,
                                }
                        } else if (pkg_count > 1) {
                                bundle_add(b, AUL_SVC_K_URI_R_INFO, info.uri_r_info);
+                               __put_cache_with_info(checksum, info.uri_r_info, uid);
                                ret = __run_svc_with_pkgname(APP_SELECTOR, b, request_code,
                                        cbfunc, data, uid);
                                goto end;
@@ -1096,6 +1108,7 @@ API int aul_svc_run_service_for_uid(bundle *b, int request_code,
                return AUL_SVC_RET_ENOMATCH;
        } else {
                bundle_add(b, AUL_SVC_K_URI_R_INFO, info.scheme);
+               __put_cache_with_info(checksum, info.scheme, uid);
                ret = __run_svc_with_pkgname(APP_SELECTOR, b, request_code,
                                cbfunc, data, uid);
        }