tizen 2.3.1 release
[framework/appfw/pkgmgr-info.git] / src / pkgmgrinfo_private.c
1 /*
2  * pkgmgrinfo-appinfo
3  *
4  * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
5  *
6  * Contact: Jayoun Lee <airjany@samsung.com>, Junsuk Oh <junsuk77.oh@samsung.com>,
7  *
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  * http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  *
20  */
21
22 #include <vconf.h>
23
24 #include "pkgmgrinfo_private.h"
25
26 struct _pkginfo_str_map_t {
27         pkgmgrinfo_pkginfo_filter_prop_str prop;
28         const char *property;
29 };
30
31 static struct _pkginfo_str_map_t pkginfo_str_prop_map[] = {
32         {E_PMINFO_PKGINFO_PROP_PACKAGE_ID,              PMINFO_PKGINFO_PROP_PACKAGE_ID},
33         {E_PMINFO_PKGINFO_PROP_PACKAGE_TYPE,            PMINFO_PKGINFO_PROP_PACKAGE_TYPE},
34         {E_PMINFO_PKGINFO_PROP_PACKAGE_VERSION,         PMINFO_PKGINFO_PROP_PACKAGE_VERSION},
35         {E_PMINFO_PKGINFO_PROP_PACKAGE_INSTALL_LOCATION,PMINFO_PKGINFO_PROP_PACKAGE_INSTALL_LOCATION},
36         {E_PMINFO_PKGINFO_PROP_PACKAGE_INSTALLED_STORAGE,PMINFO_PKGINFO_PROP_PACKAGE_INSTALLED_STORAGE},
37         {E_PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_NAME,     PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_NAME},
38         {E_PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_EMAIL,    PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_EMAIL},
39         {E_PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_HREF,     PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_HREF},
40         {E_PMINFO_PKGINFO_PROP_PACKAGE_STORECLIENT_ID,  PMINFO_PKGINFO_PROP_PACKAGE_STORECLIENT_ID}
41 };
42
43 struct _pkginfo_int_map_t {
44         pkgmgrinfo_pkginfo_filter_prop_int prop;
45         const char *property;
46 };
47
48 static struct _pkginfo_int_map_t pkginfo_int_prop_map[] = {
49         {E_PMINFO_PKGINFO_PROP_PACKAGE_SIZE,    PMINFO_PKGINFO_PROP_PACKAGE_SIZE},
50         {E_PMINFO_PKGINFO_PROP_PACKAGE_SUPPORT_MODE,    PMINFO_PKGINFO_PROP_PACKAGE_SUPPORT_MODE}
51 };
52
53 struct _pkginfo_bool_map_t {
54         pkgmgrinfo_pkginfo_filter_prop_bool prop;
55         const char *property;
56 };
57
58 static struct _pkginfo_bool_map_t pkginfo_bool_prop_map[] = {
59         {E_PMINFO_PKGINFO_PROP_PACKAGE_REMOVABLE,       PMINFO_PKGINFO_PROP_PACKAGE_REMOVABLE},
60         {E_PMINFO_PKGINFO_PROP_PACKAGE_PRELOAD,         PMINFO_PKGINFO_PROP_PACKAGE_PRELOAD},
61         {E_PMINFO_PKGINFO_PROP_PACKAGE_READONLY,        PMINFO_PKGINFO_PROP_PACKAGE_READONLY},
62         {E_PMINFO_PKGINFO_PROP_PACKAGE_UPDATE,          PMINFO_PKGINFO_PROP_PACKAGE_UPDATE},
63         {E_PMINFO_PKGINFO_PROP_PACKAGE_APPSETTING,      PMINFO_PKGINFO_PROP_PACKAGE_APPSETTING},
64         {E_PMINFO_PKGINFO_PROP_PACKAGE_NODISPLAY_SETTING,       PMINFO_PKGINFO_PROP_PACKAGE_NODISPLAY_SETTING},
65         {E_PMINFO_PKGINFO_PROP_PACKAGE_SUPPORT_DISABLE, PMINFO_PKGINFO_PROP_PACKAGE_SUPPORT_DISABLE},
66         {E_PMINFO_PKGINFO_PROP_PACKAGE_DISABLE, PMINFO_PKGINFO_PROP_PACKAGE_DISABLE},
67         {E_PMINFO_PKGINFO_PROP_PACKAGE_USE_RESET,       PMINFO_PKGINFO_PROP_PACKAGE_USE_RESET}
68 };
69
70 struct _appinfo_str_map_t {
71         pkgmgrinfo_appinfo_filter_prop_str prop;
72         const char *property;
73 };
74
75 static struct _appinfo_str_map_t appinfo_str_prop_map[] = {
76         {E_PMINFO_APPINFO_PROP_APP_ID,          PMINFO_APPINFO_PROP_APP_ID},
77         {E_PMINFO_APPINFO_PROP_APP_COMPONENT,   PMINFO_APPINFO_PROP_APP_COMPONENT},
78         {E_PMINFO_APPINFO_PROP_APP_COMPONENT_TYPE,      PMINFO_APPINFO_PROP_APP_COMPONENT_TYPE},
79         {E_PMINFO_APPINFO_PROP_APP_EXEC,        PMINFO_APPINFO_PROP_APP_EXEC},
80         {E_PMINFO_APPINFO_PROP_APP_AMBIENT_SUPPORT,     PMINFO_APPINFO_PROP_APP_AMBIENT_SUPPORT},
81         {E_PMINFO_APPINFO_PROP_APP_ICON,        PMINFO_APPINFO_PROP_APP_ICON},
82         {E_PMINFO_APPINFO_PROP_APP_TYPE,        PMINFO_APPINFO_PROP_APP_TYPE},
83         {E_PMINFO_APPINFO_PROP_APP_OPERATION,   PMINFO_APPINFO_PROP_APP_OPERATION},
84         {E_PMINFO_APPINFO_PROP_APP_URI,         PMINFO_APPINFO_PROP_APP_URI},
85         {E_PMINFO_APPINFO_PROP_APP_MIME,        PMINFO_APPINFO_PROP_APP_MIME},
86         {E_PMINFO_APPINFO_PROP_APP_CATEGORY,    PMINFO_APPINFO_PROP_APP_CATEGORY},
87         {E_PMINFO_APPINFO_PROP_APP_HWACCELERATION,      PMINFO_APPINFO_PROP_APP_HWACCELERATION},
88         {E_PMINFO_APPINFO_PROP_APP_SCREENREADER,        PMINFO_APPINFO_PROP_APP_SCREENREADER}
89 };
90
91 struct _appinfo_int_map_t {
92         pkgmgrinfo_appinfo_filter_prop_int prop;
93         const char *property;
94 };
95
96 static struct _appinfo_int_map_t appinfo_int_prop_map[] = {
97         {E_PMINFO_APPINFO_PROP_APP_SUPPORT_MODE,        PMINFO_APPINFO_PROP_APP_SUPPORT_MODE}
98 };
99
100 struct _appinfo_bool_map_t {
101         pkgmgrinfo_appinfo_filter_prop_bool prop;
102         const char *property;
103 };
104
105 static struct _appinfo_bool_map_t appinfo_bool_prop_map[] = {
106         {E_PMINFO_APPINFO_PROP_APP_NODISPLAY,           PMINFO_APPINFO_PROP_APP_NODISPLAY},
107         {E_PMINFO_APPINFO_PROP_APP_MULTIPLE,            PMINFO_APPINFO_PROP_APP_MULTIPLE},
108         {E_PMINFO_APPINFO_PROP_APP_ONBOOT,              PMINFO_APPINFO_PROP_APP_ONBOOT},
109         {E_PMINFO_APPINFO_PROP_APP_AUTORESTART,         PMINFO_APPINFO_PROP_APP_AUTORESTART},
110         {E_PMINFO_APPINFO_PROP_APP_TASKMANAGE,          PMINFO_APPINFO_PROP_APP_TASKMANAGE},
111         {E_PMINFO_APPINFO_PROP_APP_LAUNCHCONDITION,             PMINFO_APPINFO_PROP_APP_LAUNCHCONDITION},
112         {E_PMINFO_APPINFO_PROP_APP_SUPPORT_DISABLE,             PMINFO_APPINFO_PROP_APP_SUPPORT_DISABLE},
113         {E_PMINFO_APPINFO_PROP_APP_DISABLE,             PMINFO_APPINFO_PROP_APP_DISABLE},
114         {E_PMINFO_APPINFO_PROP_APP_REMOVABLE,           PMINFO_APPINFO_PROP_APP_REMOVABLE}
115 };
116
117 inline int _pkgmgrinfo_validate_cb(void *data, int ncols, char **coltxt, char **colname)
118 {
119         int *p = (int*)data;
120         *p = atoi(coltxt[0]);
121         return 0;
122 }
123
124 inline pkgmgrinfo_pkginfo_filter_prop_str _pminfo_pkginfo_convert_to_prop_str(const char *property)
125 {
126         int i = 0;
127         int max = 0;
128         pkgmgrinfo_pkginfo_filter_prop_str prop = -1;
129
130         if (property == NULL)
131                 return -1;
132         max = E_PMINFO_PKGINFO_PROP_PACKAGE_MAX_STR - E_PMINFO_PKGINFO_PROP_PACKAGE_MIN_STR + 1;
133         for (i = 0 ; i < max; i++) {
134                 if (strcmp(property, pkginfo_str_prop_map[i].property) == 0) {
135                         prop =  pkginfo_str_prop_map[i].prop;
136                         break;
137                 }
138         }
139         return prop;
140 }
141
142 inline pkgmgrinfo_pkginfo_filter_prop_int _pminfo_pkginfo_convert_to_prop_int(const char *property)
143 {
144         int i = 0;
145         int max = 0;
146         pkgmgrinfo_pkginfo_filter_prop_int prop = -1;
147
148         if (property == NULL)
149                 return -1;
150         max = E_PMINFO_PKGINFO_PROP_PACKAGE_MAX_INT - E_PMINFO_PKGINFO_PROP_PACKAGE_MIN_INT + 1;
151         for (i = 0 ; i < max; i++) {
152                 if (strcmp(property, pkginfo_int_prop_map[i].property) == 0) {
153                         prop =  pkginfo_int_prop_map[i].prop;
154                         break;
155                 }
156         }
157         return prop;
158 }
159
160 inline pkgmgrinfo_pkginfo_filter_prop_bool _pminfo_pkginfo_convert_to_prop_bool(const char *property)
161 {
162         int i = 0;
163         int max = 0;
164         pkgmgrinfo_pkginfo_filter_prop_bool prop = -1;
165
166         if (property == NULL)
167                 return -1;
168         max = E_PMINFO_PKGINFO_PROP_PACKAGE_MAX_BOOL - E_PMINFO_PKGINFO_PROP_PACKAGE_MIN_BOOL + 1;
169         for (i = 0 ; i < max; i++) {
170                 if (strcmp(property, pkginfo_bool_prop_map[i].property) == 0) {
171                         prop =  pkginfo_bool_prop_map[i].prop;
172                         break;
173                 }
174         }
175         return prop;
176 }
177
178 inline pkgmgrinfo_appinfo_filter_prop_str _pminfo_appinfo_convert_to_prop_str(const char *property)
179 {
180         int i = 0;
181         int max = 0;
182         pkgmgrinfo_appinfo_filter_prop_str prop = -1;
183
184         if (property == NULL)
185                 return -1;
186         max = E_PMINFO_APPINFO_PROP_APP_MAX_STR - E_PMINFO_APPINFO_PROP_APP_MIN_STR + 1;
187         for (i = 0 ; i < max; i++) {
188                 if (strcmp(property, appinfo_str_prop_map[i].property) == 0) {
189                         prop =  appinfo_str_prop_map[i].prop;
190                         break;
191                 }
192         }
193         return prop;
194 }
195
196 inline pkgmgrinfo_appinfo_filter_prop_int _pminfo_appinfo_convert_to_prop_int(const char *property)
197 {
198         int i = 0;
199         int max = 0;
200         pkgmgrinfo_appinfo_filter_prop_int prop = -1;
201
202         if (property == NULL)
203                 return -1;
204         max = E_PMINFO_APPINFO_PROP_APP_MAX_INT - E_PMINFO_APPINFO_PROP_APP_MIN_INT + 1;
205         for (i = 0 ; i < max; i++) {
206                 if (strcmp(property, appinfo_int_prop_map[i].property) == 0) {
207                         prop =  appinfo_int_prop_map[i].prop;
208                         break;
209                 }
210         }
211         return prop;
212 }
213
214 inline pkgmgrinfo_appinfo_filter_prop_bool _pminfo_appinfo_convert_to_prop_bool(const char *property)
215 {
216         int i = 0;
217         int max = 0;
218         pkgmgrinfo_appinfo_filter_prop_bool prop = -1;
219
220         if (property == NULL)
221                 return -1;
222         max = E_PMINFO_APPINFO_PROP_APP_MAX_BOOL - E_PMINFO_APPINFO_PROP_APP_MIN_BOOL + 1;
223         for (i = 0 ; i < max; i++) {
224                 if (strcmp(property, appinfo_bool_prop_map[i].property) == 0) {
225                         prop =  appinfo_bool_prop_map[i].prop;
226                         break;
227                 }
228         }
229         return prop;
230 }
231
232 int __exec_db_query(sqlite3 *db, char *query, sqlite_query_callback callback, void *data)
233 {
234         char *error_message = NULL;
235         if (SQLITE_OK !=
236             sqlite3_exec(db, query, callback, data, &error_message)) {
237                 _LOGE("Don't execute query = %s error message = %s\n", query,
238                        error_message);
239                 sqlite3_free(error_message);
240                 return -1;
241         }
242         sqlite3_free(error_message);
243         return 0;
244 }
245
246 void __cleanup_list_pkginfo(pkgmgr_pkginfo_x *list_pkginfo, pkgmgr_pkginfo_x *node)
247 {
248         pkgmgr_pkginfo_x *temp_node = NULL;
249
250         if (list_pkginfo != NULL) {
251                 LISTHEAD(list_pkginfo, node);
252                 temp_node = node->next;
253                 node = temp_node;
254                 while (node) {
255                         temp_node = node->next;
256                         __cleanup_pkginfo(node);
257                         node = temp_node;
258                 }
259                 __cleanup_pkginfo(list_pkginfo);
260         }
261 }
262
263 void __cleanup_pkginfo(pkgmgr_pkginfo_x *data)
264 {
265         if(data == NULL)
266                 return;
267
268         FREE_AND_NULL(data->locale);
269
270         _pkgmgrinfo_basic_free_manifest_x(data->manifest_info);
271         FREE_AND_NULL(data);
272         return;
273 }
274
275 void __cleanup_appinfo(pkgmgr_appinfo_x *data)
276 {
277         if(data == NULL)
278                 return;
279
280         FREE_AND_NULL(data->locale);
281
282         manifest_x *mfx = calloc(1, sizeof(manifest_x));
283         if (mfx == NULL) {
284                 _LOGE("out of memory");
285                 return;
286         }
287
288         mfx->uiapplication = data->uiapp_info;
289         _pkgmgrinfo_basic_free_manifest_x(mfx);
290         FREE_AND_NULL(data);
291         return;
292 }
293
294 char* __convert_system_locale_to_manifest_locale()
295 {
296         char *syslocale = NULL;
297
298         syslocale = vconf_get_str(VCONFKEY_LANGSET);
299
300         if (syslocale == NULL) {
301                 _LOGE("syslocale is null\n");
302                 return strdup(DEFAULT_LOCALE);
303         }
304
305         char *locale = malloc(6);
306         if (!locale) {
307                 _LOGE("Malloc Failed\n");
308                 FREE_AND_NULL(syslocale);
309                 return strdup(DEFAULT_LOCALE);
310         }
311
312         sprintf(locale, "%c%c-%c%c", syslocale[0], syslocale[1], tolower(syslocale[3]), tolower(syslocale[4]));
313
314         FREE_AND_NULL(syslocale);
315         return locale;
316 }
317
318 gint __compare_func(gconstpointer data1, gconstpointer data2)
319 {
320         pkgmgrinfo_node_x *node1 = (pkgmgrinfo_node_x*)data1;
321         pkgmgrinfo_node_x *node2 = (pkgmgrinfo_node_x*)data2;
322         if (node1->prop == node2->prop)
323                 return 0;
324         else if (node1->prop > node2->prop)
325                 return 1;
326         else
327                 return -1;
328 }
329
330
331 void __get_filter_condition(gpointer data, char **condition)
332 {
333         pkgmgrinfo_node_x *node = (pkgmgrinfo_node_x*)data;
334         char buf[MAX_QUERY_LEN + 1] = {'\0'};
335         char temp[PKG_STRING_LEN_MAX] = {'\0'};
336         switch (node->prop) {
337         case E_PMINFO_PKGINFO_PROP_PACKAGE_ID:
338                 snprintf(buf, MAX_QUERY_LEN, "package_info.package='%s'", node->value);
339                 break;
340         case E_PMINFO_PKGINFO_PROP_PACKAGE_TYPE:
341                 snprintf(buf, MAX_QUERY_LEN, "package_info.package_type='%s'", node->value);
342                 break;
343         case E_PMINFO_PKGINFO_PROP_PACKAGE_VERSION:
344                 snprintf(buf, MAX_QUERY_LEN, "package_info.package_version='%s'", node->value);
345                 break;
346         case E_PMINFO_PKGINFO_PROP_PACKAGE_INSTALL_LOCATION:
347                 snprintf(buf, MAX_QUERY_LEN, "package_info.install_location='%s'", node->value);
348                 break;
349         case E_PMINFO_PKGINFO_PROP_PACKAGE_INSTALLED_STORAGE:
350                 snprintf(buf, MAX_QUERY_LEN, "package_info.installed_storage='%s'", node->value);
351                 break;
352         case E_PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_NAME:
353                 snprintf(buf, MAX_QUERY_LEN, "package_info.author_name='%s'", node->value);
354                 break;
355         case E_PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_HREF:
356                 snprintf(buf, MAX_QUERY_LEN, "package_info.author_href='%s'", node->value);
357                 break;
358         case E_PMINFO_PKGINFO_PROP_PACKAGE_STORECLIENT_ID:
359                 snprintf(buf, MAX_QUERY_LEN, "package_info.storeclient_id='%s'", node->value);
360                 break;
361         case E_PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_EMAIL:
362                 snprintf(buf, MAX_QUERY_LEN, "package_info.author_email='%s'", node->value);
363                 break;
364         case E_PMINFO_PKGINFO_PROP_PACKAGE_SIZE:
365                 snprintf(buf, MAX_QUERY_LEN, "package_info.package_size='%s'", node->value);
366                 break;
367         case E_PMINFO_PKGINFO_PROP_PACKAGE_REMOVABLE:
368                 snprintf(buf, MAX_QUERY_LEN, "package_info.package_removable IN %s", node->value);
369                 break;
370         case E_PMINFO_PKGINFO_PROP_PACKAGE_PRELOAD:
371                 snprintf(buf, MAX_QUERY_LEN, "package_info.package_preload IN %s", node->value);
372                 break;
373         case E_PMINFO_PKGINFO_PROP_PACKAGE_READONLY:
374                 snprintf(buf, MAX_QUERY_LEN, "package_info.package_readonly IN %s", node->value);
375                 break;
376         case E_PMINFO_PKGINFO_PROP_PACKAGE_UPDATE:
377                 snprintf(buf, MAX_QUERY_LEN, "package_info.package_update IN %s", node->value);
378                 break;
379         case E_PMINFO_PKGINFO_PROP_PACKAGE_APPSETTING:
380                 snprintf(buf, MAX_QUERY_LEN, "package_info.package_appsetting IN %s", node->value);
381                 break;
382         case E_PMINFO_PKGINFO_PROP_PACKAGE_NODISPLAY_SETTING:
383                 snprintf(buf, MAX_QUERY_LEN, "package_info.package_nodisplay IN %s", node->value);
384                 break;
385         case E_PMINFO_PKGINFO_PROP_PACKAGE_SUPPORT_DISABLE:
386                 snprintf(buf, MAX_QUERY_LEN, "package_info.package_support_disable IN %s", node->value);
387                 break;
388         case E_PMINFO_PKGINFO_PROP_PACKAGE_DISABLE:
389                 snprintf(buf, MAX_QUERY_LEN, "package_info.package_disable IN %s", node->value);
390                 break;
391         case E_PMINFO_PKGINFO_PROP_PACKAGE_SUPPORT_MODE:
392                 snprintf(buf, MAX_QUERY_LEN, "package_info.package_support_mode & %s", node->value);
393                 break;
394         case E_PMINFO_PKGINFO_PROP_PACKAGE_USE_RESET:
395                 snprintf(buf, MAX_QUERY_LEN, "package_info.package_reserve2 IN %s", node->value);
396                 break;
397
398         case E_PMINFO_APPINFO_PROP_APP_ID:
399                 snprintf(buf, MAX_QUERY_LEN, "package_app_info.app_id='%s'", node->value);
400                 break;
401         case E_PMINFO_APPINFO_PROP_APP_COMPONENT:
402                 snprintf(buf, MAX_QUERY_LEN, "package_app_info.app_component='%s'", node->value);
403                 break;
404         case E_PMINFO_APPINFO_PROP_APP_COMPONENT_TYPE:
405                 sqlite3_snprintf(MAX_QUERY_LEN, buf, "package_app_info.component_type=%Q", node->value);
406                 break;
407         case E_PMINFO_APPINFO_PROP_APP_EXEC:
408                 snprintf(buf, MAX_QUERY_LEN, "package_app_info.app_exec='%s'", node->value);
409                 break;
410         case E_PMINFO_APPINFO_PROP_APP_AMBIENT_SUPPORT:
411                 snprintf(buf, MAX_QUERY_LEN, "package_app_info.app_ambient_support='%s'", node->value);
412                 break;
413         case E_PMINFO_APPINFO_PROP_APP_ICON:
414                 snprintf(buf, MAX_QUERY_LEN, "package_app_localized_info.app_icon='%s'", node->value);
415                 break;
416         case E_PMINFO_APPINFO_PROP_APP_TYPE:
417                 snprintf(buf, MAX_QUERY_LEN, "package_app_info.app_type='%s'", node->value);
418                 break;
419         case E_PMINFO_APPINFO_PROP_APP_OPERATION:
420                 snprintf(temp, PKG_STRING_LEN_MAX, "(%s)", node->value);
421                 snprintf(buf, MAX_QUERY_LEN, "package_app_app_svc.operation IN %s", temp);
422                 break;
423         case E_PMINFO_APPINFO_PROP_APP_URI:
424                 snprintf(temp, PKG_STRING_LEN_MAX, "(%s)", node->value);
425                 snprintf(buf, MAX_QUERY_LEN, "package_app_app_svc.uri_scheme IN %s", temp);
426                 break;
427         case E_PMINFO_APPINFO_PROP_APP_MIME:
428                 snprintf(temp, PKG_STRING_LEN_MAX, "(%s)", node->value);
429                 snprintf(buf, MAX_QUERY_LEN, "package_app_app_svc.mime_type IN %s", temp);
430                 break;
431         case E_PMINFO_APPINFO_PROP_APP_CATEGORY:
432                 snprintf(temp, PKG_STRING_LEN_MAX, "(%s)", node->value);
433                 snprintf(buf, MAX_QUERY_LEN, "package_app_app_category.category IN %s", temp);
434                 break;
435         case E_PMINFO_APPINFO_PROP_APP_NODISPLAY:
436                 snprintf(buf, MAX_QUERY_LEN, "package_app_info.app_nodisplay IN %s", node->value);
437                 break;
438         case E_PMINFO_APPINFO_PROP_APP_MULTIPLE:
439                 snprintf(buf, MAX_QUERY_LEN, "package_app_info.app_multiple IN %s", node->value);
440                 break;
441         case E_PMINFO_APPINFO_PROP_APP_ONBOOT:
442                 snprintf(buf, MAX_QUERY_LEN, "package_app_info.app_onboot IN %s", node->value);
443                 break;
444         case E_PMINFO_APPINFO_PROP_APP_AUTORESTART:
445                 snprintf(buf, MAX_QUERY_LEN, "package_app_info.app_autorestart IN %s", node->value);
446                 break;
447         case E_PMINFO_APPINFO_PROP_APP_TASKMANAGE:
448                 snprintf(buf, MAX_QUERY_LEN, "package_app_info.app_taskmanage IN %s", node->value);
449                 break;
450         case E_PMINFO_APPINFO_PROP_APP_HWACCELERATION:
451                 snprintf(buf, MAX_QUERY_LEN, "package_app_info.app_hwacceleration='%s'", node->value);
452                 break;
453         case E_PMINFO_APPINFO_PROP_APP_SCREENREADER:
454                 snprintf(buf, MAX_QUERY_LEN, "package_app_info.app_screenreader='%s'", node->value);
455                 break;
456         case E_PMINFO_APPINFO_PROP_APP_LAUNCHCONDITION:
457                 snprintf(buf, MAX_QUERY_LEN, "package_app_info.app_launchcondition IN %s", node->value);
458                 break;
459         case E_PMINFO_APPINFO_PROP_APP_SUPPORT_DISABLE:
460                 snprintf(buf, MAX_QUERY_LEN, "package_app_info.app_support_disable IN %s", node->value);
461                 break;
462         case E_PMINFO_APPINFO_PROP_APP_DISABLE:
463                 snprintf(buf, MAX_QUERY_LEN, "package_app_info.app_disable IN %s", node->value);
464                 break;
465         case E_PMINFO_APPINFO_PROP_APP_REMOVABLE:
466                 snprintf(buf, MAX_QUERY_LEN, "package_app_info.app_removable IN %s", node->value);
467                 break;
468         case E_PMINFO_APPINFO_PROP_APP_SUPPORT_MODE:
469                 snprintf(buf, MAX_QUERY_LEN, "package_app_info.app_support_mode & %s", node->value);
470                 break;
471         default:
472                 _LOGE("Invalid Property Type\n");
473                 *condition = NULL;
474                 return;
475         }
476         *condition = strdup(buf);
477         return;
478 }
479
480 int __pkginfo_check_installed_storage(pkgmgr_pkginfo_x *pkginfo)
481 {
482         char buf[MAX_QUERY_LEN] = {'\0'};
483         retvm_if(pkginfo->manifest_info->package == NULL, PMINFO_R_OK, "pkgid is NULL\n");
484         retvm_if(pkginfo->manifest_info->installed_storage == NULL, PMINFO_R_ERROR, "installed_storage is NULL\n");
485
486         if (strcmp(pkginfo->manifest_info->installed_storage,"installed_external") == 0) {
487                 snprintf(buf, MAX_QUERY_LEN - 1, "%s%s", PKG_SD_PATH, pkginfo->manifest_info->package);
488                 if (access(buf, R_OK) != 0) {
489                         _LOGE("can not access [%s]", buf);
490                         return PMINFO_R_ERROR;
491                 }
492         }
493
494         return PMINFO_R_OK;
495 }
496
497 int __appinfo_check_installed_storage(pkgmgr_appinfo_x *appinfo)
498 {
499         char buf[MAX_QUERY_LEN] = {'\0'};
500         char pkgid[MAX_QUERY_LEN] = {'\0'};
501
502         snprintf(pkgid, MAX_QUERY_LEN - 1, "%s", appinfo->uiapp_info->package);
503
504         retvm_if(appinfo->uiapp_info->installed_storage == NULL, PMINFO_R_ERROR, "installed_storage is NULL\n");
505
506         if (strcmp(appinfo->uiapp_info->installed_storage,"installed_external") == 0) {
507                 snprintf(buf, MAX_QUERY_LEN - 1, "%s%s", PKG_SD_PATH, pkgid);
508                 if (access(buf, R_OK) != 0) {
509                         _LOGE("can not access [%s]", buf);
510                         return PMINFO_R_ERROR;
511                 }
512         }
513
514         return PMINFO_R_OK;
515 }
516