2 * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #ifndef __MENU_DB_UTIL_H_
18 #define __MENU_DB_UTIL_H_
22 #include "simple_util.h"
24 #define MAX_PATH_LEN 1024
26 #define AUL_APP_INFO_FLD_PKG_NAME "package"
27 #define AUL_APP_INFO_FLD_APP_PATH "exec"
28 #define AUL_APP_INFO_FLD_APP_TYPE "x_slp_packagetype"
29 #define AUL_APP_INFO_FLD_WIDTH "x_slp_baselayoutwidth"
30 #define AUL_APP_INFO_FLD_HEIGHT "x_slp_baselayoutheight"
31 #define AUL_APP_INFO_FLD_VERTICAL "x_slp_ishorizontalscale"
32 #define AUL_APP_INFO_FLD_MULTIPLE "x_slp_multiple"
33 #define AUL_APP_INFO_FLD_TASK_MANAGE "x_slp_taskmanage"
34 #define AUL_APP_INFO_FLD_MIMETYPE "mimetype"
35 #define AUL_APP_INFO_FLD_SERVICE "x_slp_service"
37 #define AUL_RETRIEVE_PKG_NAME "package = '?'"
38 #define AUL_RETRIEVE_APP_PATH "exec = '?'"
39 #define AUL_RETRIEVE_MIMETYPE "mimetype like '?'"
40 #define AUL_RETRIEVE_SERVICE "x_slp_service like '?'"
43 char *pkg_name; /* package */
44 char *app_path; /* exec */
45 char *original_app_path; /* exec */
46 char *pkg_type; /* x_slp_packagetype */
47 char *hwacc; /* hwacceleration */
50 static inline char *_get_pkgname(app_info_from_db *menu_info)
52 if (menu_info->pkg_name == NULL) {
55 return menu_info->pkg_name;
58 static inline char *_get_app_path(app_info_from_db *menu_info)
63 if (menu_info->app_path == NULL) {
67 while (menu_info->app_path[i] != 0) {
68 if (menu_info->app_path[i] == ' '
69 || menu_info->app_path[i] == '\t')
78 free(menu_info->app_path);
79 menu_info->app_path = NULL;
80 } else if (path_len > 0) {
81 char *tmp_app_path = (char *)malloc(sizeof(char) * (path_len + 1));
82 if (tmp_app_path == NULL) {
85 snprintf(tmp_app_path, path_len + 1, "%s", menu_info->app_path);
86 free(menu_info->app_path);
87 menu_info->app_path = tmp_app_path;
90 return menu_info->app_path;
93 static inline char *_get_original_app_path(app_info_from_db *menu_info)
95 if (menu_info->original_app_path == NULL) {
98 return menu_info->original_app_path;
101 static inline void _free_app_info_from_db(app_info_from_db *menu_info)
103 if (menu_info != NULL) {
104 if (menu_info->pkg_name != NULL) {
105 free(menu_info->pkg_name);
107 if (menu_info->app_path != NULL) {
108 free(menu_info->app_path);
110 if (menu_info->original_app_path != NULL) {
111 free(menu_info->original_app_path);
113 if (menu_info->hwacc != NULL) {
114 free(menu_info->hwacc);
120 static inline app_info_from_db *_get_app_info_from_db_by_pkgname(
123 app_info_from_db *menu_info;
124 ail_appinfo_h handle;
128 menu_info = (app_info_from_db *)calloc(1, sizeof(app_info_from_db));
129 if (menu_info == NULL) {
133 ret = ail_get_appinfo(pkgname, &handle);
134 if (ret != AIL_ERROR_OK) {
135 _free_app_info_from_db(menu_info);
139 ret = ail_appinfo_get_str(handle, AIL_PROP_PACKAGE_STR, &str);
141 menu_info->pkg_name = strdup(str);
145 ret = ail_appinfo_get_str(handle, AIL_PROP_EXEC_STR, &str);
147 menu_info->app_path = strdup(str);
151 if (menu_info->app_path != NULL) {
152 menu_info->original_app_path = strdup(menu_info->app_path);
155 ret = ail_appinfo_get_str(handle, AIL_PROP_X_SLP_PACKAGETYPE_STR, &str);
157 menu_info->pkg_type = strdup(str);
161 ret = ail_destroy_appinfo(handle);
162 if (ret != AIL_ERROR_OK) {
163 _E("ail_destroy_appinfo failed");
166 if (!_get_app_path(menu_info)) {
167 _free_app_info_from_db(menu_info);
174 static inline ail_cb_ret_e __appinfo_func(const ail_appinfo_h appinfo,
177 app_info_from_db *menu_info = (app_info_from_db *)user_data;
180 ail_appinfo_get_str(appinfo, AIL_PROP_PACKAGE_STR, &package);
182 menu_info->pkg_name = strdup(package);
184 return AIL_CB_RET_CANCEL; /*return AIL_CB_RET_CONTINUE;*/
187 static inline app_info_from_db *_get_app_info_from_db_by_apppath(
190 app_info_from_db *menu_info = NULL;
195 if (apppath == NULL) {
199 menu_info = (app_info_from_db *)calloc(1, sizeof(app_info_from_db));
200 if (menu_info == NULL) {
204 ret = ail_filter_new(&filter);
205 if (ret != AIL_ERROR_OK) {
206 _free_app_info_from_db(menu_info);
210 ret = ail_filter_add_str(filter, AIL_PROP_X_SLP_EXE_PATH, apppath);
211 if (ret != AIL_ERROR_OK) {
212 ail_filter_destroy(filter);
213 _free_app_info_from_db(menu_info);
217 ret = ail_filter_count_appinfo(filter, &count);
218 if (ret != AIL_ERROR_OK) {
219 ail_filter_destroy(filter);
220 _free_app_info_from_db(menu_info);
224 ail_filter_destroy(filter);
225 _free_app_info_from_db(menu_info);
229 ail_filter_list_appinfo_foreach(filter, __appinfo_func, (void *)menu_info);
231 ail_filter_destroy(filter);
233 menu_info->app_path = strdup(apppath);
234 menu_info->original_app_path = strdup(apppath);
240 static inline app_info_from_db *_get_app_info_from_bundle_by_pkgname(
241 const char *pkgname, bundle *kb)
243 app_info_from_db *menu_info;
245 menu_info = (app_info_from_db*)calloc(1, sizeof(app_info_from_db));
246 if (menu_info == NULL) {
250 menu_info->pkg_name = strdup(pkgname);
251 menu_info->app_path = strdup(bundle_get_val(kb, AUL_K_EXEC));
252 if (menu_info->app_path != NULL) {
253 menu_info->original_app_path = strdup(menu_info->app_path);
255 menu_info->pkg_type = strdup(bundle_get_val(kb, AUL_K_PACKAGETYPE));
256 menu_info->hwacc = strdup(bundle_get_val(kb, AUL_K_HWACC));
258 if (!_get_app_path(menu_info)) {
259 _free_app_info_from_db(menu_info);
265 #endif //__MENU_DB_UTIL_H_