3 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
5 * Licensed under the Flora License, Version 1.1 (the License);
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://floralicense.org/license/
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an AS IS BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
30 #include "taskmanager.h"
31 #include "_util_log.h"
33 #define TASKMANAGER_ICON_NAME "org.tizen.taskmgr.png"
35 static int grp_cnt[TS_MAX];
37 void _init_grp_cnt(void)
41 for(i = 0; i < TS_MAX; i++) {
46 int _get_grp_cnt(int which)
48 return grp_cnt[which];
51 int runapp_info_get(const aul_app_info *ainfo, void *data)
58 char buf[1024] = { 0, };
59 struct appdata *ad = data;
60 struct _task_info *info;
62 retvm_if(ainfo == NULL, -1, "Invalid argument: ainfo is NULL\n");
63 retvm_if(data == NULL, -1, "Invalid argument: data is NULL\n");
65 retvm_if(ainfo->pid <= 0, -1, "Invalid pid(%u)\n", ainfo->pid);
68 if (ainfo->pid == getpid()) {
72 retvm_if(ainfo->pkg_name == NULL, 0, "Invalid pkg_name(%s)\n", ainfo->pkg_name);
74 // _D("running app is (%s)\n", ainfo->pkg_name);
75 ret = ail_package_get_appinfo(ainfo->pkg_name, &handle);
76 retvm_if(ret != AIL_ERROR_OK, -1,
77 "Failed to get appinfo, pkg_name:%s\n", ainfo->pkg_name);
79 ret = ail_appinfo_get_bool(handle, AIL_PROP_X_SLP_TASKMANAGE_BOOL, &valb);
83 info = calloc(1, sizeof(struct _task_info));
85 _E("Failed to calloc task_info\n");
88 info->pkg_name = strdup(ainfo->pkg_name);
90 ret = ail_appinfo_get_str(handle, AIL_PROP_NAME_STR, &valc);
92 _D("%s: Failed to get ail name\n", ainfo->pkg_name);
95 info->app_name = strdup(valc);
97 ret = ail_appinfo_get_str(handle, AIL_PROP_ICON_STR, &valc);
98 if (valc == NULL || (ecore_file_exists(valc) == EINA_FALSE)) {
99 _D("%s: Failed to get ail icon\n", ainfo->pkg_name);
100 valc = TASKMANAGER_ICON_NAME;
103 snprintf(buf, sizeof(buf), "%s", valc);
104 info->icn_path = strdup(buf);
105 // _D("get app name[%s] set [%s], icon path[%s]\n", ainfo->pkg_name, info->app_name, buf);
108 info->pid = ainfo->pid;
109 info->category = TS_INUSE;
110 // info->mem_total = ad->mem_total;
111 _D("%s/pid(%d)\n", info->app_name, info->pid);
113 ad->applist[TS_INUSE] = eina_list_prepend(ad->applist[TS_INUSE], info);
117 ret = ail_package_destroy_appinfo(handle);
118 retvm_if(ret != AIL_ERROR_OK, -1, "Failed to destroy appinfo\n");
122 int taskmanager_get_history_app_info(void *data)
124 struct appdata *ad = data;
125 struct _task_info *info, *info_r;
129 struct rua_rec rec_result = { 0, };
131 char buf[1024] = { 0, };
132 int nrows = 0, ncols = 0;
135 ail_appinfo_h handle;
140 retvm_if(data == NULL, -1, "Invalid argument: data is NULL\n");
141 retvm_if(rua_init() == -1, -1, "Failed to rua_init\n");
143 if (rua_history_load_db(&table, &nrows, &ncols) == -1) {
149 rua_history_unload_db(&table);
154 ad->applist[TS_HISTORY] = eina_list_nth_list(ad->applist[TS_HISTORY], 0);
155 for (row = 0; row < nrows; row++) {
156 rua_history_get_rec(&rec_result, table, nrows, ncols, row);
159 * pkg_name could be NULL or 0 length because it is launch by fork.
161 if (rec_result.pkg_name == NULL
162 || strlen(rec_result.pkg_name) < 1) {
166 _D("%s\n", rec_result.pkg_name);
167 ret = ail_package_get_appinfo(rec_result.pkg_name, &handle);
168 if (ret != AIL_ERROR_OK) {
169 _D("Failed to get appinfo(%d)\n", ret);
173 ret = ail_appinfo_get_bool(handle, AIL_PROP_X_SLP_TASKMANAGE_BOOL, &valb);
175 _D("ail_appinfo_get_bool(handle, AIL_PROP_X_SLP_TASKMANAGE_BOOL, &valb) => valb is 0");
179 EINA_LIST_FOREACH(ad->applist[TS_INUSE], l_r, info_r) {
180 if (info_r != NULL) {
182 (rec_result.pkg_name, info_r->pkg_name)) {
190 info = calloc(1, sizeof(struct _task_info));
192 _E("Failed to calloc _task_info\n");
194 ret = ail_package_destroy_appinfo(handle);
199 info->pkg_name = strdup(rec_result.pkg_name);
201 ret = ail_appinfo_get_str(handle, AIL_PROP_NAME_STR, &valc);
203 _D("Failed to get ail name\n");
206 info->app_name = strdup(valc);
207 _D("%s\n", info->app_name);
209 ret = ail_appinfo_get_str(handle, AIL_PROP_ICON_STR, &valc);
210 if (valc == NULL || (ecore_file_exists(valc) == EINA_FALSE)) {
211 _D("Failed to get ail icon\n");
212 valc = TASKMANAGER_ICON_NAME;
214 snprintf(buf, sizeof(buf), "%s", valc);
215 info->icn_path = strdup(buf);
216 _D("%s\n", info->icn_path);
220 info->category = TS_HISTORY;
222 if (rec_result.arg != NULL) {
223 if (strlen(rec_result.arg) > 0) {
224 info->b = bundle_decode(
225 (const bundle_raw *)rec_result.arg,
226 strlen(rec_result.arg));
230 ad->applist[TS_HISTORY] =
231 eina_list_append(ad->applist[TS_HISTORY], info);
232 grp_cnt[TS_HISTORY]++;
239 ret = ail_package_destroy_appinfo(handle);
242 rua_history_unload_db(&table);
248 int _free_einalist_all(struct appdata *ad)
251 struct _task_info *info = NULL;
255 printf("[Error] Invalid argument: appdata is NULL\n");
259 for (i = 0; i < TS_MAX; i++) {
260 if (ad->applist[i] == NULL)
263 EINA_LIST_FOREACH(ad->applist[i], l, info) {
266 bundle_free(info->b);
268 taskmanager_free_info(info);
273 eina_list_free(ad->applist[i]);
274 ad->applist[i] = NULL;
280 int _subt_einalist_item(struct appdata *ad, int pid)
285 struct _task_info *info;
287 retvm_if(ad == NULL, -1, "Invalid argument: appdata is NULL\n");
288 retvm_if(ad->applist[TS_INUSE] == NULL, -1, "applist is NULL\n");
290 EINA_LIST_FOREACH(ad->applist[TS_INUSE], l, info) {
291 _D("pid(%u):(%u)\n", pid, info->pid);
293 _E("Failed to get info\n");
297 if (pid > 0 && pid == info->pid) {
298 if(info->app_name) _D("killed [%s]\n", info->app_name);
299 ad->applist[TS_INUSE] =
300 eina_list_remove_list(ad->applist[TS_INUSE], l);
301 taskmanager_free_info(info);