4 * Copyright (c) 2000 - 2011 Samsung Electronics Co., Ltd. All rights reserved.
6 * Contact: Jayoun Lee <airjany@samsung.com>, Sewook Park <sewook7.park@samsung.com>,
7 * Jaeho Lee <jaeho81.lee@samsung.com>, Shobhit Srivastava <shobhit.s@samsung.com>
9 * Licensed under the Apache License, Version 2.0 (the "License");
10 * you may not use this file except in compliance with the License.
11 * You may obtain a copy of the License at
13 * http://www.apache.org/licenses/LICENSE-2.0
15 * Unless required by applicable law or agreed to in writing, software
16 * distributed under the License is distributed on an "AS IS" BASIS,
17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
18 * See the License for the specific language governing permissions and
19 * limitations under the License.
32 #include "pkgmgr-info.h"
33 #include "pkgmgrinfo_debug.h"
34 #include "pkgmgrinfo_private.h"
35 #include "pkgmgr_parser.h"
37 struct _pkginfo_str_map_t {
38 pkgmgrinfo_pkginfo_filter_prop_str prop;
42 static struct _pkginfo_str_map_t pkginfo_str_prop_map[] = {
43 {E_PMINFO_PKGINFO_PROP_PACKAGE_ID, PMINFO_PKGINFO_PROP_PACKAGE_ID},
44 {E_PMINFO_PKGINFO_PROP_PACKAGE_TYPE, PMINFO_PKGINFO_PROP_PACKAGE_TYPE},
45 {E_PMINFO_PKGINFO_PROP_PACKAGE_VERSION, PMINFO_PKGINFO_PROP_PACKAGE_VERSION},
46 {E_PMINFO_PKGINFO_PROP_PACKAGE_INSTALL_LOCATION,PMINFO_PKGINFO_PROP_PACKAGE_INSTALL_LOCATION},
47 {E_PMINFO_PKGINFO_PROP_PACKAGE_INSTALLED_STORAGE,PMINFO_PKGINFO_PROP_PACKAGE_INSTALLED_STORAGE},
48 {E_PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_NAME, PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_NAME},
49 {E_PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_EMAIL, PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_EMAIL},
50 {E_PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_HREF, PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_HREF},
51 {E_PMINFO_PKGINFO_PROP_PACKAGE_PRIVILEGE, PMINFO_PKGINFO_PROP_PACKAGE_PRIVILEGE}
54 struct _pkginfo_int_map_t {
55 pkgmgrinfo_pkginfo_filter_prop_int prop;
59 static struct _pkginfo_int_map_t pkginfo_int_prop_map[] = {
60 {E_PMINFO_PKGINFO_PROP_PACKAGE_SIZE, PMINFO_PKGINFO_PROP_PACKAGE_SIZE}
63 struct _pkginfo_bool_map_t {
64 pkgmgrinfo_pkginfo_filter_prop_bool prop;
68 static struct _pkginfo_bool_map_t pkginfo_bool_prop_map[] = {
69 {E_PMINFO_PKGINFO_PROP_PACKAGE_REMOVABLE, PMINFO_PKGINFO_PROP_PACKAGE_REMOVABLE},
70 {E_PMINFO_PKGINFO_PROP_PACKAGE_PRELOAD, PMINFO_PKGINFO_PROP_PACKAGE_PRELOAD},
71 {E_PMINFO_PKGINFO_PROP_PACKAGE_READONLY, PMINFO_PKGINFO_PROP_PACKAGE_READONLY},
72 {E_PMINFO_PKGINFO_PROP_PACKAGE_UPDATE, PMINFO_PKGINFO_PROP_PACKAGE_UPDATE},
73 {E_PMINFO_PKGINFO_PROP_PACKAGE_APPSETTING, PMINFO_PKGINFO_PROP_PACKAGE_APPSETTING},
74 {E_PMINFO_PKGINFO_PROP_PACKAGE_NODISPLAY_SETTING, PMINFO_PKGINFO_PROP_PACKAGE_NODISPLAY_SETTING}
77 struct _appinfo_str_map_t {
78 pkgmgrinfo_appinfo_filter_prop_str prop;
82 static struct _appinfo_str_map_t appinfo_str_prop_map[] = {
83 {E_PMINFO_APPINFO_PROP_APP_ID, PMINFO_APPINFO_PROP_APP_ID},
84 {E_PMINFO_APPINFO_PROP_APP_COMPONENT, PMINFO_APPINFO_PROP_APP_COMPONENT},
85 {E_PMINFO_APPINFO_PROP_APP_EXEC, PMINFO_APPINFO_PROP_APP_EXEC},
86 {E_PMINFO_APPINFO_PROP_APP_ICON, PMINFO_APPINFO_PROP_APP_ICON},
87 {E_PMINFO_APPINFO_PROP_APP_TYPE, PMINFO_APPINFO_PROP_APP_TYPE},
88 {E_PMINFO_APPINFO_PROP_APP_OPERATION, PMINFO_APPINFO_PROP_APP_OPERATION},
89 {E_PMINFO_APPINFO_PROP_APP_URI, PMINFO_APPINFO_PROP_APP_URI},
90 {E_PMINFO_APPINFO_PROP_APP_MIME, PMINFO_APPINFO_PROP_APP_MIME},
91 {E_PMINFO_APPINFO_PROP_APP_CATEGORY, PMINFO_APPINFO_PROP_APP_CATEGORY},
92 {E_PMINFO_APPINFO_PROP_APP_HWACCELERATION, PMINFO_APPINFO_PROP_APP_HWACCELERATION},
93 {E_PMINFO_APPINFO_PROP_APP_SCREENREADER, PMINFO_APPINFO_PROP_APP_SCREENREADER},
94 {E_PMINFO_APPINFO_PROP_APP_PACKAGE, PMINFO_APPINFO_PROP_APP_PACKAGE}
97 struct _appinfo_int_map_t {
98 pkgmgrinfo_appinfo_filter_prop_int prop;
102 static struct _appinfo_int_map_t appinfo_int_prop_map[] = {
103 /*Currently No Fields*/
106 struct _appinfo_bool_map_t {
107 pkgmgrinfo_appinfo_filter_prop_bool prop;
108 const char *property;
111 static struct _appinfo_bool_map_t appinfo_bool_prop_map[] = {
112 {E_PMINFO_APPINFO_PROP_APP_NODISPLAY, PMINFO_APPINFO_PROP_APP_NODISPLAY},
113 {E_PMINFO_APPINFO_PROP_APP_MULTIPLE, PMINFO_APPINFO_PROP_APP_MULTIPLE},
114 {E_PMINFO_APPINFO_PROP_APP_ONBOOT, PMINFO_APPINFO_PROP_APP_ONBOOT},
115 {E_PMINFO_APPINFO_PROP_APP_AUTORESTART, PMINFO_APPINFO_PROP_APP_AUTORESTART},
116 {E_PMINFO_APPINFO_PROP_APP_TASKMANAGE, PMINFO_APPINFO_PROP_APP_TASKMANAGE},
117 {E_PMINFO_APPINFO_PROP_APP_LAUNCHCONDITION, PMINFO_APPINFO_PROP_APP_LAUNCHCONDITION},
118 {E_PMINFO_APPINFO_PROP_APP_UI_GADGET, PMINFO_APPINFO_PROP_APP_UI_GADGET}
121 inline pkgmgrinfo_pkginfo_filter_prop_str _pminfo_pkginfo_convert_to_prop_str(const char *property)
125 pkgmgrinfo_pkginfo_filter_prop_str prop = -1;
127 if (property == NULL)
129 max = E_PMINFO_PKGINFO_PROP_PACKAGE_MAX_STR - E_PMINFO_PKGINFO_PROP_PACKAGE_MIN_STR + 1;
130 for (i = 0 ; i < max; i++) {
131 if (strcmp(property, pkginfo_str_prop_map[i].property) == 0) {
132 prop = pkginfo_str_prop_map[i].prop;
139 inline pkgmgrinfo_pkginfo_filter_prop_int _pminfo_pkginfo_convert_to_prop_int(const char *property)
143 pkgmgrinfo_pkginfo_filter_prop_int prop = -1;
145 if (property == NULL)
147 max = E_PMINFO_PKGINFO_PROP_PACKAGE_MAX_INT - E_PMINFO_PKGINFO_PROP_PACKAGE_MIN_INT + 1;
148 for (i = 0 ; i < max; i++) {
149 if (strcmp(property, pkginfo_int_prop_map[i].property) == 0) {
150 prop = pkginfo_int_prop_map[i].prop;
157 inline pkgmgrinfo_pkginfo_filter_prop_bool _pminfo_pkginfo_convert_to_prop_bool(const char *property)
161 pkgmgrinfo_pkginfo_filter_prop_bool prop = -1;
163 if (property == NULL)
165 max = E_PMINFO_PKGINFO_PROP_PACKAGE_MAX_BOOL - E_PMINFO_PKGINFO_PROP_PACKAGE_MIN_BOOL + 1;
166 for (i = 0 ; i < max; i++) {
167 if (strcmp(property, pkginfo_bool_prop_map[i].property) == 0) {
168 prop = pkginfo_bool_prop_map[i].prop;
175 inline pkgmgrinfo_appinfo_filter_prop_str _pminfo_appinfo_convert_to_prop_str(const char *property)
179 pkgmgrinfo_appinfo_filter_prop_str prop = -1;
181 if (property == NULL)
183 max = E_PMINFO_APPINFO_PROP_APP_MAX_STR - E_PMINFO_APPINFO_PROP_APP_MIN_STR + 1;
184 for (i = 0 ; i < max; i++) {
185 if (strcmp(property, appinfo_str_prop_map[i].property) == 0) {
186 prop = appinfo_str_prop_map[i].prop;
193 inline pkgmgrinfo_appinfo_filter_prop_int _pminfo_appinfo_convert_to_prop_int(const char *property)
197 pkgmgrinfo_appinfo_filter_prop_int prop = -1;
199 if (property == NULL)
201 max = E_PMINFO_APPINFO_PROP_APP_MAX_INT - E_PMINFO_APPINFO_PROP_APP_MIN_INT + 1;
202 for (i = 0 ; i < max; i++) {
203 if (strcmp(property, appinfo_int_prop_map[i].property) == 0) {
204 prop = appinfo_int_prop_map[i].prop;
211 inline pkgmgrinfo_appinfo_filter_prop_bool _pminfo_appinfo_convert_to_prop_bool(const char *property)
215 pkgmgrinfo_appinfo_filter_prop_bool prop = -1;
217 if (property == NULL)
219 max = E_PMINFO_APPINFO_PROP_APP_MAX_BOOL - E_PMINFO_APPINFO_PROP_APP_MIN_BOOL + 1;
220 for (i = 0 ; i < max; i++) {
221 if (strcmp(property, appinfo_bool_prop_map[i].property) == 0) {
222 prop = appinfo_bool_prop_map[i].prop;
229 void __get_filter_condition(gpointer data, char **condition)
231 pkgmgrinfo_node_x *node = (pkgmgrinfo_node_x*)data;
232 char buf[MAX_QUERY_LEN + 1] = {'\0'};
233 char temp[PKG_STRING_LEN_MAX] = {'\0'};
234 switch (node->prop) {
235 case E_PMINFO_PKGINFO_PROP_PACKAGE_ID:
236 snprintf(buf, MAX_QUERY_LEN, "package_info.package='%s'", node->value);
238 case E_PMINFO_PKGINFO_PROP_PACKAGE_TYPE:
239 snprintf(buf, MAX_QUERY_LEN, "package_info.package_type='%s'", node->value);
241 case E_PMINFO_PKGINFO_PROP_PACKAGE_VERSION:
242 snprintf(buf, MAX_QUERY_LEN, "package_info.package_version='%s'", node->value);
244 case E_PMINFO_PKGINFO_PROP_PACKAGE_INSTALL_LOCATION:
245 snprintf(buf, MAX_QUERY_LEN, "package_info.install_location='%s'", node->value);
247 case E_PMINFO_PKGINFO_PROP_PACKAGE_INSTALLED_STORAGE:
248 snprintf(buf, MAX_QUERY_LEN, "package_info.installed_storage='%s'", node->value);
250 case E_PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_NAME:
251 snprintf(buf, MAX_QUERY_LEN, "package_info.author_name='%s'", node->value);
253 case E_PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_HREF:
254 snprintf(buf, MAX_QUERY_LEN, "package_info.author_href='%s'", node->value);
256 case E_PMINFO_PKGINFO_PROP_PACKAGE_AUTHOR_EMAIL:
257 snprintf(buf, MAX_QUERY_LEN, "package_info.author_email='%s'", node->value);
259 case E_PMINFO_PKGINFO_PROP_PACKAGE_PRIVILEGE:
260 snprintf(buf, MAX_QUERY_LEN, "package_privilege_info.privilege='%s'", node->value);
262 case E_PMINFO_PKGINFO_PROP_PACKAGE_SIZE:
263 snprintf(buf, MAX_QUERY_LEN, "package_info.package_size='%s'", node->value);
265 case E_PMINFO_PKGINFO_PROP_PACKAGE_REMOVABLE:
266 snprintf(buf, MAX_QUERY_LEN, "package_info.package_removable IN %s", node->value);
268 case E_PMINFO_PKGINFO_PROP_PACKAGE_PRELOAD:
269 snprintf(buf, MAX_QUERY_LEN, "package_info.package_preload IN %s", node->value);
271 case E_PMINFO_PKGINFO_PROP_PACKAGE_READONLY:
272 snprintf(buf, MAX_QUERY_LEN, "package_info.package_readonly IN %s", node->value);
274 case E_PMINFO_PKGINFO_PROP_PACKAGE_UPDATE:
275 snprintf(buf, MAX_QUERY_LEN, "package_info.package_update IN %s", node->value);
277 case E_PMINFO_PKGINFO_PROP_PACKAGE_APPSETTING:
278 snprintf(buf, MAX_QUERY_LEN, "package_info.package_appsetting IN %s", node->value);
280 case E_PMINFO_PKGINFO_PROP_PACKAGE_NODISPLAY_SETTING:
281 snprintf(buf, MAX_QUERY_LEN, "package_info.package_nodisplay IN %s", node->value);
284 case E_PMINFO_APPINFO_PROP_APP_ID:
285 snprintf(buf, MAX_QUERY_LEN, "package_app_info.app_id='%s'", node->value);
287 case E_PMINFO_APPINFO_PROP_APP_COMPONENT:
288 snprintf(buf, MAX_QUERY_LEN, "package_app_info.app_component='%s'", node->value);
290 case E_PMINFO_APPINFO_PROP_APP_EXEC:
291 snprintf(buf, MAX_QUERY_LEN, "package_app_info.app_exec='%s'", node->value);
293 case E_PMINFO_APPINFO_PROP_APP_ICON:
294 snprintf(buf, MAX_QUERY_LEN, "package_app_localized_info.app_icon='%s'", node->value);
296 case E_PMINFO_APPINFO_PROP_APP_TYPE:
297 snprintf(buf, MAX_QUERY_LEN, "package_app_info.app_type='%s'", node->value);
299 case E_PMINFO_APPINFO_PROP_APP_OPERATION:
300 snprintf(temp, PKG_STRING_LEN_MAX, "(%s)", node->value);
301 snprintf(buf, MAX_QUERY_LEN, "package_app_app_svc.operation IN %s", temp);
303 case E_PMINFO_APPINFO_PROP_APP_URI:
304 snprintf(temp, PKG_STRING_LEN_MAX, "(%s)", node->value);
305 snprintf(buf, MAX_QUERY_LEN, "package_app_app_svc.uri_scheme IN %s", temp);
307 case E_PMINFO_APPINFO_PROP_APP_MIME:
308 snprintf(temp, PKG_STRING_LEN_MAX, "(%s)", node->value);
309 snprintf(buf, MAX_QUERY_LEN, "package_app_app_svc.mime_type IN %s", temp);
311 case E_PMINFO_APPINFO_PROP_APP_CATEGORY:
312 snprintf(temp, PKG_STRING_LEN_MAX, "(%s)", node->value);
313 snprintf(buf, MAX_QUERY_LEN, "package_app_app_category.category IN %s", temp);
315 case E_PMINFO_APPINFO_PROP_APP_NODISPLAY:
316 snprintf(buf, MAX_QUERY_LEN, "package_app_info.app_nodisplay IN %s", node->value);
318 case E_PMINFO_APPINFO_PROP_APP_MULTIPLE:
319 snprintf(buf, MAX_QUERY_LEN, "package_app_info.app_multiple IN %s", node->value);
321 case E_PMINFO_APPINFO_PROP_APP_ONBOOT:
322 snprintf(buf, MAX_QUERY_LEN, "package_app_info.app_onboot IN %s", node->value);
324 case E_PMINFO_APPINFO_PROP_APP_AUTORESTART:
325 snprintf(buf, MAX_QUERY_LEN, "package_app_info.app_autorestart IN %s", node->value);
327 case E_PMINFO_APPINFO_PROP_APP_TASKMANAGE:
328 snprintf(buf, MAX_QUERY_LEN, "package_app_info.app_taskmanage IN %s", node->value);
330 case E_PMINFO_APPINFO_PROP_APP_HWACCELERATION:
331 snprintf(buf, MAX_QUERY_LEN, "package_app_info.app_hwacceleration='%s'", node->value);
333 case E_PMINFO_APPINFO_PROP_APP_SCREENREADER:
334 snprintf(buf, MAX_QUERY_LEN, "package_app_info.app_screenreader='%s'", node->value);
336 case E_PMINFO_APPINFO_PROP_APP_LAUNCHCONDITION:
337 snprintf(buf, MAX_QUERY_LEN, "package_app_info.app_launchcondition IN %s", node->value);
339 case E_PMINFO_APPINFO_PROP_APP_PACKAGE:
340 snprintf(buf, MAX_QUERY_LEN, "package_app_info.package='%s'", node->value);
342 case E_PMINFO_APPINFO_PROP_APP_UI_GADGET:
343 snprintf(buf, MAX_QUERY_LEN, "package_app_info.app_ui_gadget IN %s", node->value);
346 _LOGE("Invalid Property Type\n");
350 *condition = strdup(buf);
354 char *_get_system_locale(void)
359 lang = vconf_get_str(VCONFKEY_LANGSET);
361 locale = strdup(DEFAULT_LOCALE);
362 if (locale == NULL) {
363 LOGE("out of memory");
369 locale = malloc(sizeof(char) * 6);
370 if (locale == NULL) {
371 LOGE("out of memory");
376 strncpy(locale, lang, 2);
378 locale[3] = tolower(lang[3]);
379 locale[4] = tolower(lang[4]);