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.
25 #include "simple_util.h"
27 #define MAX_PATH_LEN 1024
29 #define AUL_APP_INFO_FLD_PKG_NAME "package"
30 #define AUL_APP_INFO_FLD_APP_PATH "exec"
31 #define AUL_APP_INFO_FLD_APP_TYPE "x_slp_packagetype"
32 #define AUL_APP_INFO_FLD_WIDTH "x_slp_baselayoutwidth"
33 #define AUL_APP_INFO_FLD_HEIGHT "x_slp_baselayoutheight"
34 #define AUL_APP_INFO_FLD_VERTICAL "x_slp_ishorizontalscale"
35 #define AUL_APP_INFO_FLD_MULTIPLE "x_slp_multiple"
36 #define AUL_APP_INFO_FLD_TASK_MANAGE "x_slp_taskmanage"
37 #define AUL_APP_INFO_FLD_MIMETYPE "mimetype"
38 #define AUL_APP_INFO_FLD_SERVICE "x_slp_service"
40 #define AUL_RETRIEVE_PKG_NAME "package = '?'"
41 #define AUL_RETRIEVE_APP_PATH "exec = '?'"
42 #define AUL_RETRIEVE_MIMETYPE "mimetype like '?'"
43 #define AUL_RETRIEVE_SERVICE "x_slp_service like '?'"
46 char *pkg_name; /* package */
47 char *app_path; /* exec */
48 char *original_app_path; /* exec */
49 char *app_type; /* x_slp_packagetype */
50 int width; /* x_slp_baselayoutwidth */
51 int height; /* x_slp_baselayoutheight */
52 int vertical; /* x_slp_ishorizontalscale */
53 int multiple; /* x_slp_multiple */
54 int task_manage; /* x_slp_taskmanage */
58 static inline char *_get_pkgname(app_info_from_db *menu_info)
60 if (menu_info->pkg_name == NULL)
62 return menu_info->pkg_name;
65 static inline char *_get_app_path(app_info_from_db *menu_info)
70 if (menu_info->app_path == NULL)
73 while (menu_info->app_path[i] != 0) {
74 if (menu_info->app_path[i] == ' '
75 || menu_info->app_path[i] == '\t') {
83 free(menu_info->app_path);
84 menu_info->app_path = NULL;
85 } else if (path_len > 0) {
86 char *tmp_app_path = malloc(sizeof(char) * (path_len + 1));
87 if(tmp_app_path == NULL)
89 snprintf(tmp_app_path, path_len + 1, "%s", menu_info->app_path);
90 free(menu_info->app_path);
91 menu_info->app_path = tmp_app_path;
94 return menu_info->app_path;
97 static inline char *_get_original_app_path(app_info_from_db *menu_info)
99 if (menu_info->original_app_path == NULL)
101 return menu_info->original_app_path;
104 static inline char *_get_app_app_type(app_info_from_db *menu_info)
106 return menu_info->app_type;
109 static inline int _get_app_width(app_info_from_db *menu_info)
111 return menu_info->width;
114 static inline int _get_app_height(app_info_from_db *menu_info)
116 return menu_info->height;
119 static inline int _is_app_scalable_with_height(app_info_from_db *menu_info)
121 if (menu_info->vertical)
127 static inline int _is_app_multi_inst(app_info_from_db *menu_info)
129 if (menu_info->multiple)
135 static inline int _get_app_task_manage(app_info_from_db *menu_info)
137 return menu_info->task_manage;
140 static inline void _free_app_info_from_db(app_info_from_db *menu_info)
142 if (menu_info != NULL) {
143 if (menu_info->pkg_name != NULL)
144 free(menu_info->pkg_name);
145 if (menu_info->app_path != NULL)
146 free(menu_info->app_path);
147 if (menu_info->original_app_path != NULL)
148 free(menu_info->original_app_path);
149 if (menu_info->app_type != NULL)
150 free(menu_info->app_type);
155 static inline app_info_from_db *_get_app_info_from_db_by_pkgname(
158 app_info_from_db *menu_info;
159 ail_appinfo_h handle;
163 menu_info = calloc(1, sizeof(app_info_from_db));
164 if (menu_info == NULL) {
168 ret = ail_package_get_appinfo(pkgname, &handle);
169 if (ret != AIL_ERROR_OK) {
170 _free_app_info_from_db(menu_info);
174 ret = ail_appinfo_get_str(handle, AIL_PROP_PACKAGE_STR, &str);
176 menu_info->pkg_name = strdup(str);
180 ret = ail_appinfo_get_str(handle, AIL_PROP_EXEC_STR, &str);
182 menu_info->app_path = strdup(str);
186 if (menu_info->app_path != NULL)
187 menu_info->original_app_path = strdup(menu_info->app_path);
189 ret = ail_appinfo_get_int(handle, AIL_PROP_X_SLP_BASELAYOUTWIDTH_INT, &menu_info->width);
191 ret = ail_appinfo_get_int(handle, AIL_PROP_X_SLP_BASELAYOUTHEIGHT_INT, &menu_info->height);
193 ret = ail_appinfo_get_bool(handle, AIL_PROP_X_SLP_ISHORIZONTALSCALE_BOOL, &menu_info->vertical);
195 ret = ail_appinfo_get_bool(handle, AIL_PROP_X_SLP_MULTIPLE_BOOL, &menu_info->multiple);
197 ret = ail_appinfo_get_bool(handle, AIL_PROP_X_SLP_TASKMANAGE_BOOL, &menu_info->task_manage);
199 ret = ail_appinfo_get_str(handle, AIL_PROP_TYPE_STR, &str);
201 menu_info->app_type = strdup(str);
205 ret = ail_appinfo_get_str(handle, AIL_PROP_X_SLP_PACKAGETYPE_STR, &str);
207 menu_info->pkg_type = strdup(str);
211 ret = ail_package_destroy_appinfo(handle);
212 if (ret != AIL_ERROR_OK) {
213 _E("ail_package_destroy_appinfo failed");
216 if (!_get_app_path(menu_info)) {
217 _free_app_info_from_db(menu_info);
224 static inline ail_cb_ret_e __appinfo_func(const ail_appinfo_h appinfo, void *user_data)
226 app_info_from_db *menu_info = (app_info_from_db *)user_data;
229 ail_appinfo_get_str(appinfo, AIL_PROP_PACKAGE_STR, &package);
231 menu_info->pkg_name = strdup(package);
233 return AIL_CB_RET_CANCEL; /*return AIL_CB_RET_CONTINUE;*/
236 static inline app_info_from_db *_get_app_info_from_db_by_apppath(
239 app_info_from_db *menu_info = NULL;
247 menu_info = calloc(1, sizeof(app_info_from_db));
248 if (menu_info == NULL)
251 ret = ail_filter_new(&filter);
252 if (ret != AIL_ERROR_OK) {
253 _free_app_info_from_db(menu_info);
257 ret = ail_filter_add_str(filter, AIL_PROP_X_SLP_EXE_PATH, apppath);
258 if (ret != AIL_ERROR_OK) {
259 ail_filter_destroy(filter);
260 _free_app_info_from_db(menu_info);
264 ret = ail_filter_count_appinfo(filter, &count);
265 if (ret != AIL_ERROR_OK) {
266 ail_filter_destroy(filter);
267 _free_app_info_from_db(menu_info);
271 ail_filter_destroy(filter);
272 _free_app_info_from_db(menu_info);
276 ail_filter_list_appinfo_foreach(filter, __appinfo_func, (void *)menu_info);
278 ail_filter_destroy(filter);
280 menu_info->app_path = strdup(apppath);
281 menu_info->original_app_path = strdup(apppath);