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>, Jaeho Lee <jaeho81.lee@samsung.com>
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
12 * http://www.apache.org/licenses/LICENSE-2.0
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.
22 #ifndef __MENU_DB_UTIL_H_
23 #define __MENU_DB_UTIL_H_
28 #include "simple_util.h"
30 #define MAX_PATH_LEN 1024
32 #define AUL_APP_INFO_FLD_PKG_NAME "package"
33 #define AUL_APP_INFO_FLD_APP_PATH "exec"
34 #define AUL_APP_INFO_FLD_APP_TYPE "x_slp_packagetype"
35 #define AUL_APP_INFO_FLD_WIDTH "x_slp_baselayoutwidth"
36 #define AUL_APP_INFO_FLD_HEIGHT "x_slp_baselayoutheight"
37 #define AUL_APP_INFO_FLD_VERTICAL "x_slp_ishorizontalscale"
38 #define AUL_APP_INFO_FLD_MULTIPLE "x_slp_multiple"
39 #define AUL_APP_INFO_FLD_TASK_MANAGE "x_slp_taskmanage"
40 #define AUL_APP_INFO_FLD_MIMETYPE "mimetype"
41 #define AUL_APP_INFO_FLD_SERVICE "x_slp_service"
43 #define AUL_RETRIEVE_PKG_NAME "package = '?'"
44 #define AUL_RETRIEVE_APP_PATH "exec = '?'"
45 #define AUL_RETRIEVE_MIMETYPE "mimetype like '?'"
46 #define AUL_RETRIEVE_SERVICE "x_slp_service like '?'"
49 char *pkg_name; /* package */
50 char *app_path; /* exec */
51 char *original_app_path; /* exec */
52 char *pkg_type; /* x_slp_packagetype */
53 char *hwacc; /* hwacceleration */
54 char *taskmanage; /* taskmanage */
58 static inline char *_get_pkgname(app_info_from_db *menu_info)
60 return menu_info ? menu_info->pkg_name : NULL;
63 static inline char *_get_pkgid(app_info_from_db *menu_info)
65 return menu_info ? menu_info->pkg_id : NULL;
68 static inline char *_get_app_path(app_info_from_db *menu_info)
73 if (!menu_info || menu_info->app_path == NULL)
76 while (menu_info->app_path[i] != 0) {
77 if (menu_info->app_path[i] == ' '
78 || menu_info->app_path[i] == '\t') {
86 free(menu_info->app_path);
87 menu_info->app_path = NULL;
88 } else if (path_len > 0) {
89 char *tmp_app_path = malloc(sizeof(char) * (path_len + 1));
90 if(tmp_app_path == NULL)
92 snprintf(tmp_app_path, path_len + 1, "%s", menu_info->app_path);
93 free(menu_info->app_path);
94 menu_info->app_path = tmp_app_path;
97 return menu_info->app_path;
100 static inline char *_get_original_app_path(app_info_from_db *menu_info)
102 return menu_info ? menu_info->original_app_path : NULL;
105 static inline void _free_app_info_from_db(app_info_from_db *menu_info)
107 if (menu_info != NULL) {
108 if (menu_info->pkg_name != NULL)
109 free(menu_info->pkg_name);
110 if (menu_info->app_path != NULL)
111 free(menu_info->app_path);
112 if (menu_info->original_app_path != NULL)
113 free(menu_info->original_app_path);
114 if (menu_info->pkg_type != NULL)
115 free(menu_info->pkg_type);
116 if (menu_info->hwacc != NULL)
117 free(menu_info->hwacc);
118 if (menu_info->taskmanage != NULL)
119 free(menu_info->taskmanage);
120 if (menu_info->pkg_id != NULL)
121 free(menu_info->pkg_id);
126 static inline app_info_from_db *_get_app_info_from_db_by_pkgname(
129 app_info_from_db *menu_info;
130 ail_appinfo_h handle;
134 menu_info = calloc(1, sizeof(app_info_from_db));
135 if (menu_info == NULL) {
139 ret = ail_get_appinfo(pkgname, &handle);
140 if (ret != AIL_ERROR_OK) {
141 _free_app_info_from_db(menu_info);
145 ret = ail_appinfo_get_str(handle, AIL_PROP_PACKAGE_STR, &str);
147 menu_info->pkg_name = strdup(str);
151 ret = ail_appinfo_get_str(handle, AIL_PROP_EXEC_STR, &str);
153 menu_info->app_path = strdup(str);
157 if (menu_info->app_path != NULL)
158 menu_info->original_app_path = strdup(menu_info->app_path);
160 ret = ail_appinfo_get_str(handle, AIL_PROP_X_SLP_PACKAGETYPE_STR, &str);
162 menu_info->pkg_type = strdup(str);
166 ret = ail_destroy_appinfo(handle);
167 if (ret != AIL_ERROR_OK) {
168 _E("ail_destroy_appinfo failed");
171 if (!_get_app_path(menu_info)) {
172 _free_app_info_from_db(menu_info);
179 static inline ail_cb_ret_e __appinfo_func(const ail_appinfo_h appinfo, void *user_data)
181 app_info_from_db *menu_info = (app_info_from_db *)user_data;
184 ail_cb_ret_e ret = AIL_CB_RET_CONTINUE;
189 ail_appinfo_get_str(appinfo, AIL_PROP_PACKAGE_STR, &package);
191 menu_info->pkg_name = strdup(package);
192 ret = AIL_CB_RET_CANCEL;
195 ail_appinfo_get_str(appinfo, AIL_PROP_X_SLP_PKGID_STR, &pkgid);
197 menu_info->pkg_id = strdup(pkgid);
203 static inline app_info_from_db *_get_app_info_from_db_by_apppath(
206 app_info_from_db *menu_info = NULL;
214 menu_info = calloc(1, sizeof(app_info_from_db));
215 if (menu_info == NULL)
218 ret = ail_filter_new(&filter);
219 if (ret != AIL_ERROR_OK) {
220 _free_app_info_from_db(menu_info);
224 ret = ail_filter_add_str(filter, AIL_PROP_X_SLP_EXE_PATH, apppath);
225 if (ret != AIL_ERROR_OK) {
226 ail_filter_destroy(filter);
227 _free_app_info_from_db(menu_info);
231 ret = ail_filter_count_appinfo(filter, &count);
232 if (ret != AIL_ERROR_OK) {
233 ail_filter_destroy(filter);
234 _free_app_info_from_db(menu_info);
238 ail_filter_destroy(filter);
239 _free_app_info_from_db(menu_info);
243 ail_filter_list_appinfo_foreach(filter, __appinfo_func, (void *)menu_info);
245 ail_filter_destroy(filter);
247 menu_info->app_path = strdup(apppath);
248 menu_info->original_app_path = strdup(apppath);