#include <Ecore_X.h>
#include <package-manager.h>
#include <ail.h>
-#include <media_content.h>
static int setting_storage_main_create(void *cb);
static int setting_storage_main_destroy(void *cb);
static long long __setting_storage_main_folder_size_get(char *path)
{
- SETTING_TRACE_BEGIN;
+ //SETTING_TRACE_BEGIN;
setting_retvm_if(NULL == path, SETTING_RETURN_FAIL, "path is NULL");
unsigned long long size = 0;
int i = 0;
int dir_list_len = setting_storage_list_len_get(dir_list);
int file_list_len = setting_storage_list_len_get(file_list);
- SETTING_TRACE("dir_list_len is [%d] file_list_len is [%d]", dir_list_len, file_list_len);
+ //SETTING_TRACE("dir_list_len is [%d] file_list_len is [%d]", dir_list_len, file_list_len);
for (i = 0; i < file_list_len; i++) {
Node_Info *pNode = NULL;
pNode = (Node_Info *)eina_list_nth(file_list, i);
if (pNode == NULL)
continue;
full_path = g_strconcat(pNode->path, "/", pNode->name, NULL);
- SETTING_TRACE("full_path is [%s]", full_path);
+ //SETTING_TRACE("full_path is [%s]", full_path);
size += (__setting_storage_main_folder_size_get(full_path));
FREE(full_path);
}
static int __setting_storage_status_size_transition(double size, char *size_desc)
{
- SETTING_TRACE_BEGIN;
- SETTING_TRACE("size = %f", size);
+ //SETTING_TRACE_BEGIN;
+ //SETTING_TRACE("size = %f", size);
double tmp_size = 0.0;
int ret = 0;
if (size < SETTING_STORAGE_MEGABYTE_VALUE) { // size < 1MB: show x.xKB
ad->internal_status = internal_status;
}
-static void __setting_storage_main_pictures_videos_status_get(void *data)
+static double __setting_storage_main_pictures_videos_status_get()
{
SETTING_TRACE_BEGIN;
- setting_retm_if(data == NULL, "Data parameter is NULL");
- SettingStorageUG *ad = (SettingStorageUG *) data;
-
- double dTotal = 0.0;
+ double total_size = 0.0;
+ double tmp_size = 0.0;
int ret = SETTING_RETURN_SUCCESS;
- Setting_Storage_Status pics_videos_status;
- dTotal = __setting_storage_main_folder_size_get(SETTING_STORAGE_PICTURES_PATH);
- setting_retm_if(ret == SETTING_RETURN_FAIL, "get pictures status failed");
- pics_videos_status.dTotal = dTotal;
- //SETTING_TRACE("pics_videos_status = %f", dTotal);
+ tmp_size = __setting_storage_main_folder_size_get(SETTING_STORAGE_PICTURES_PATH);
+ setting_retvm_if(ret == SETTING_RETURN_FAIL, total_size, "get pictures status failed");
+ total_size += tmp_size;
- dTotal = 0.0;
- dTotal = __setting_storage_main_folder_size_get(SETTING_STORAGE_VIDEOS_PATH);
- setting_retm_if(ret == SETTING_RETURN_FAIL, "get video status failed");
- //SETTING_TRACE("pics_videos_status = %f", dTotal);
- pics_videos_status.dTotal += dTotal;
+ tmp_size = 0.0;
+ tmp_size = __setting_storage_main_folder_size_get(SETTING_STORAGE_VIDEOS_PATH);
+ setting_retvm_if(ret == SETTING_RETURN_FAIL, total_size, "get video status failed");
+ total_size += tmp_size;
- dTotal = 0.0;
- dTotal = __setting_storage_main_folder_size_get(SETTING_STORAGE_CAMERA_PATH);
- setting_retm_if(ret == SETTING_RETURN_FAIL, "get camera status failed");
- //SETTING_TRACE("pics_videos_status = %f", dTotal);
- pics_videos_status.dTotal += dTotal;
+ tmp_size = 0.0;
+ tmp_size = __setting_storage_main_folder_size_get(SETTING_STORAGE_CAMERA_PATH);
+ setting_retvm_if(ret == SETTING_RETURN_FAIL, total_size, "get camera status failed");
+ total_size += tmp_size;
- //SETTING_TRACE("pics_videos_status = %f", pics_videos_status.dTotal);
-
- ad->pics_videos_status = pics_videos_status;
+ return total_size;
}
-static void __setting_storage_main_downloads_status_get(void *data)
+static double __setting_storage_main_downloads_status_get()
{
SETTING_TRACE_BEGIN;
- setting_retm_if(data == NULL, "Data parameter is NULL");
- SettingStorageUG *ad = (SettingStorageUG *) data;
- double dTotal = 0.0;
+ double total_size = 0.0;
int ret = SETTING_RETURN_SUCCESS;
- Setting_Storage_Status downloads_status;
-
- dTotal = __setting_storage_main_folder_size_get(SETTING_STORAGE_DOWNLOADS_PATH);
- setting_retm_if(ret == SETTING_RETURN_FAIL, "get pictures status failed");
- downloads_status.dTotal = dTotal;
- //SETTING_TRACE("downloads_status = %f", dTotal);
+ total_size = __setting_storage_main_folder_size_get(SETTING_STORAGE_DOWNLOADS_PATH);
+ setting_retvm_if(ret == SETTING_RETURN_FAIL, total_size, "get downloads status failed");
- ad->downloads_status = downloads_status;
+ return total_size;
}
static bool __setting_storage_main_media_item_cb(media_info_h media, void *data)
{
- SETTING_TRACE_BEGIN;
+ //SETTING_TRACE_BEGIN;
setting_retvm_if(media == NULL, true, "media is NULL");
setting_retvm_if(data == NULL, true, "Data parameter is NULL");
- SettingStorageUG *ad = (SettingStorageUG *) data;
+ double *total_size = (double *) data;
media_content_type_e media_type = 0;
unsigned long long size = 0;
//SETTING_TRACE("media_type : [%d]", media_type);
if(media_type == MEDIA_CONTENT_TYPE_MUSIC) {
- SETTING_TRACE("MEDIA_CONTENT_TYPE_MUSIC");
-
media_info_get_size(media, &size);
//SETTING_TRACE("size : [%lld]", size);
- ad->audio_status.dTotal += size;
+ *total_size += size;
} else {
SETTING_TRACE("Other Content");
}
return true;
}
-static void __setting_storage_main_audio_status_get(void *data)
+static double __setting_storage_main_audio_status_get()
{
SETTING_TRACE_BEGIN;
- setting_retm_if(data == NULL, "Data parameter is NULL");
- SettingStorageUG *ad = (SettingStorageUG *) data;
- ad->audio_status.dTotal = 0;
+ double total_size = 0.0;
int ret = MEDIA_CONTENT_ERROR_NONE;
filter_h filter = NULL;
ret = media_filter_create(&filter);
if(ret != MEDIA_CONTENT_ERROR_NONE) {
SETTING_TRACE("Fail to create filter");
- return;
+ return total_size;
}
ret = media_filter_set_condition(filter, condition, MEDIA_CONTENT_COLLATE_DEFAULT);
if(ret != MEDIA_CONTENT_ERROR_NONE) {
media_filter_destroy(filter);
SETTING_TRACE("Fail to set condition");
- return;
+ return total_size;
}
ret = media_filter_set_order(filter, MEDIA_CONTENT_ORDER_ASC, MEDIA_TITLE, MEDIA_CONTENT_COLLATE_NOCASE);
if(ret != MEDIA_CONTENT_ERROR_NONE) {
media_filter_destroy(filter);
SETTING_TRACE("Fail to set order");
- return;
+ return total_size;
}
- ret = media_info_foreach_media_from_db(filter, __setting_storage_main_media_item_cb, ad);
+ ret = media_info_foreach_media_from_db(filter, __setting_storage_main_media_item_cb, &total_size);
if(ret != MEDIA_CONTENT_ERROR_NONE) {
media_filter_destroy(filter);
SETTING_TRACE("Fail to get media");
- return;
+ return total_size;
}
+
+ return total_size;
}
static int __setting_storage_main_miscellaneous_list_get(char *path, Eina_List **dir_list, Eina_List **file_list)
* drwxrwxrwx 2 app app 16384 Oct 5 2012 lost+found
* ++++++++++++++++++++++++++++++++++++++++++++++++
*/
-static void __setting_storage_main_miscellaneous_size_get(void *data)
+static double __setting_storage_main_miscellaneous_size_get()
{
SETTING_TRACE_BEGIN;
- setting_retm_if(data == NULL, "Data parameter is NULL");
- SettingStorageUG *ad = (SettingStorageUG *) data;
unsigned long long size = 0;
Eina_List *file_list = NULL;
int i = 0;
int dir_list_len = setting_storage_list_len_get(dir_list);
int file_list_len = setting_storage_list_len_get(file_list);
- SETTING_TRACE("dir_list_len is [%d] file_list_len is [%d]", dir_list_len, file_list_len);
+ //SETTING_TRACE("dir_list_len is [%d] file_list_len is [%d]", dir_list_len, file_list_len);
for (i = 0; i < file_list_len; i++) {
Node_Info *pNode = NULL;
pNode = (Node_Info *)eina_list_nth(file_list, i);
if (pNode == NULL)
continue;
size += pNode->size;
- SETTING_TRACE("path is [%s], name is [%s]", pNode->path, pNode->name);
+ //SETTING_TRACE("path is [%s], name is [%s]", pNode->path, pNode->name);
}
for (i = 0; i < dir_list_len; i++) {
Node_Info *pNode = NULL;
if (pNode == NULL)
continue;
full_path = g_strconcat(pNode->path, "/", pNode->name, NULL);
- SETTING_TRACE("full_path is [%s]", full_path);
+ //SETTING_TRACE("full_path is [%s]", full_path);
size += (__setting_storage_main_folder_size_get(full_path));
FREE(full_path);
}
dir_list = NULL;
}
- ad->others_status.dTotal = size;
-}
-
-static void __setting_storage_main_apps_list_free(void *data)
-{
- setting_retm_if(data == NULL, "Data parameter is NULL");
- SettingStorageUG *ad = (SettingStorageUG *) data;
-
- Eina_List *l = NULL;
- App_Info *app_info;
- EINA_LIST_FOREACH (ad->apps_list, l, app_info)
- {
- G_FREE(app_info->pkg_name);
- G_FREE(app_info->pkg_type);
- FREE(app_info);
- }
- eina_list_free(ad->apps_list);
- ad->apps_list = NULL;
-}
-
-static ail_cb_ret_e __setting_storage_main_appinfo_func_cb(const ail_appinfo_h ail_info, void *data)
-{
- setting_retvm_if(data == NULL, AIL_CB_RET_CONTINUE, "Data parameter is NULL");
- SettingStorageUG *ad = (SettingStorageUG *) data;
-
- char *pkg_name = NULL;
- char *pkg_type = NULL;
-
- ail_appinfo_get_str(ail_info, AIL_PROP_PACKAGE_STR, &pkg_name);
- setting_retvm_if(pkg_name == NULL, AIL_CB_RET_CONTINUE, "get pkg_name failed");
-
- ail_appinfo_get_str(ail_info, AIL_PROP_X_SLP_PACKAGETYPE_STR, &pkg_type);
- setting_retvm_if(pkg_type == NULL, AIL_CB_RET_CONTINUE, "get pkg_type failed");
-
- App_Info *app_info = (App_Info*)calloc(1, sizeof(App_Info));
- setting_retvm_if(app_info == NULL, AIL_CB_RET_CONTINUE, "failed to calloc");
-
- app_info->pkg_name = (char *)g_strdup(pkg_name);
- app_info->pkg_type = (char *)g_strdup(pkg_type);
- ad->apps_list = eina_list_append(ad->apps_list, app_info);
- return AIL_CB_RET_CONTINUE;
-}
-
-static void __setting_storage_main_applications_list_get(void *data)
-{
- SETTING_TRACE_BEGIN;
- setting_retm_if(data == NULL, "Data parameter is NULL");
- SettingStorageUG *ad = (SettingStorageUG *) data;
-
- __setting_storage_main_apps_list_free(ad);
-
- /* get app_info from AIL */
- ail_filter_h filter_rpm = NULL;
- ail_filter_h filter_wrt = NULL;
- ail_filter_h filter_tpk = NULL;
-
- ail_filter_new(&filter_rpm);
- ail_filter_new(&filter_wrt);
- ail_filter_new(&filter_tpk);
-
- ail_filter_add_str(filter_rpm, AIL_PROP_X_SLP_PACKAGETYPE_STR, RPM_PREFIX);
- ail_filter_add_str(filter_wrt, AIL_PROP_X_SLP_PACKAGETYPE_STR, WRT_PREFIX);
- ail_filter_add_str(filter_tpk, AIL_PROP_X_SLP_PACKAGETYPE_STR, TPK_PREFIX);
-
- ail_filter_list_appinfo_foreach(filter_rpm, __setting_storage_main_appinfo_func_cb, (void*)ad);
- ail_filter_list_appinfo_foreach(filter_wrt, __setting_storage_main_appinfo_func_cb, (void*)ad);
- ail_filter_list_appinfo_foreach(filter_tpk, __setting_storage_main_appinfo_func_cb, (void*)ad);
-
- ail_filter_destroy(filter_rpm);
- ail_filter_destroy(filter_wrt);
- ail_filter_destroy(filter_tpk);
-}
-
-static void __setting_storage_main_applications_status_get(void *data)
-{
- SETTING_TRACE_BEGIN;
- setting_retm_if(data == NULL, "Data parameter is NULL");
- SettingStorageUG *ad = (SettingStorageUG *) data;
-
- __setting_storage_main_applications_list_get(ad);
-
- ad->apps_status.dTotal = 0;
-
- Eina_List *l = NULL;
- App_Info *app_info;
- EINA_LIST_FOREACH (ad->apps_list, l, app_info)
- {
- //SETTING_TRACE("pkg_name: %s ", app_info->pkg_name);
- //SETTING_TRACE("pkg_type: %s", app_info->pkg_type);
- pkgmgr_info *pkg_info = pkgmgr_info_new(app_info->pkg_type, app_info->pkg_name);
- if (!pkg_info) {
- SETTING_TRACE("pkg_info is null, couldn't get the sizes");
- app_info->total_size = 0;
- } else {
- char *buf = NULL;
- buf = pkgmgr_info_get_string(pkg_info, STR_INSTALLED_SIZE);
- if (buf) {
- //SETTING_TRACE("size : %s", buf);
- app_info->total_size = atoi(buf);
- G_FREE(buf);
- } else {
- app_info->total_size = 0;
- }
- pkgmgr_info_free(pkg_info);
- }
-
- ad->apps_status.dTotal += app_info->total_size;
- }
-
- char apps_desc[SETTING_STORAGE_MAX_STR_LEN + 1] = {0,};
- int ret = __setting_storage_status_size_transition(ad->apps_status.dTotal, apps_desc);
- setting_retm_if(ret == SETTING_RETURN_FAIL, "failed to transform");
-
- G_FREE(ad->apps->sub_desc);
- ad->apps->sub_desc = (char *)g_strdup(apps_desc);
- elm_object_item_data_set(ad->apps->item, ad->apps);
- elm_genlist_item_update(ad->apps->item);
-
- elm_object_item_data_set(ad->internal->item, ad->internal);
- elm_genlist_item_update(ad->internal->item);
-
- if (ad->pop_progress) {
- evas_object_del(ad->pop_progress);
- ad->pop_progress = NULL;
- }
-}
-
-static Eina_Bool __setting_storage_main_timer_cb(void *data)
-{
- SETTING_TRACE_BEGIN;
- setting_retvm_if(data == NULL, ECORE_CALLBACK_CANCEL, "data is NULL");
- SettingStorageUG *ad = (SettingStorageUG *)data;
-
- __setting_storage_main_applications_status_get(ad);
- return ECORE_CALLBACK_CANCEL;
+ return size;
}
static void __setting_storage_main_launch_ug_destroy_cb(ui_gadget_h ug, void *priv)
if (back_btn != NULL) {
elm_object_style_set(back_btn, NAVI_BACK_BUTTON_STYLE); /* take into effect */
}
-
- if (ad->pop_progress) {
- evas_object_del(ad->pop_progress);
- ad->pop_progress = NULL;
- }
- ad->pop_progress = setting_create_popup_with_progressbar(ad, ad->win_get,
- "pending_list",
- NULL, NULL, NULL, 0, TRUE, TRUE);
-
- if(ad->timer) {
- ecore_timer_del(ad->timer);
- ad->timer = NULL;
- }
- ad->timer = ecore_timer_add(2, (Ecore_Task_Cb)__setting_storage_main_timer_cb, ad);
}
static void __setting_storage_main_launch_ug_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv)
static void __setting_storage_main_genlist_update(Setting_GenGroupItem_Data *data, Setting_Storage_Status status)
{
- SETTING_TRACE_BEGIN;
+ //SETTING_TRACE_BEGIN;
setting_retm_if(data == NULL, "Data parameter is NULL");
Setting_GenGroupItem_Data *item_data = (Setting_GenGroupItem_Data *) data;
char desc[SETTING_STORAGE_MAX_STR_LEN + 1] = {0,};
int ret = __setting_storage_status_size_transition(status.dTotal, desc);
- setting_retvm_if(ret == SETTING_RETURN_FAIL, SETTING_RETURN_FAIL, "failed to transform")
+ setting_retm_if(ret == SETTING_RETURN_FAIL, "failed to transform")
G_FREE(item_data->sub_desc);
item_data->sub_desc = (char *)g_strdup(desc);
elm_genlist_item_update(item_data->item);
}
+static ail_cb_ret_e __setting_storage_main_appinfo_func_cb(const ail_appinfo_h ail_info, void *data)
+{
+ Eina_List **apps_list = (Eina_List **) data;
+
+ char *pkg_name = NULL;
+ char *pkg_type = NULL;
+
+ ail_appinfo_get_str(ail_info, AIL_PROP_PACKAGE_STR, &pkg_name);
+ setting_retvm_if(pkg_name == NULL, AIL_CB_RET_CONTINUE, "get pkg_name failed");
+
+ ail_appinfo_get_str(ail_info, AIL_PROP_X_SLP_PACKAGETYPE_STR, &pkg_type);
+ setting_retvm_if(pkg_type == NULL, AIL_CB_RET_CONTINUE, "get pkg_type failed");
+
+ App_Info *app_info = (App_Info*)calloc(1, sizeof(App_Info));
+ setting_retvm_if(app_info == NULL, AIL_CB_RET_CONTINUE, "failed to calloc");
+
+ app_info->pkg_name = (char *)g_strdup(pkg_name);
+ app_info->pkg_type = (char *)g_strdup(pkg_type);
+ *apps_list = eina_list_append(*apps_list, app_info);
+ return AIL_CB_RET_CONTINUE;
+}
+
+static void __setting_storage_main_applications_list_get(Eina_List **apps_list)
+{
+ SETTING_TRACE_BEGIN;
+ /* get app_info from AIL */
+ ail_filter_h filter_rpm = NULL;
+ ail_filter_h filter_wrt = NULL;
+ ail_filter_h filter_tpk = NULL;
+
+ ail_filter_new(&filter_rpm);
+ ail_filter_new(&filter_wrt);
+ ail_filter_new(&filter_tpk);
+
+ ail_filter_add_str(filter_rpm, AIL_PROP_X_SLP_PACKAGETYPE_STR, RPM_PREFIX);
+ ail_filter_add_str(filter_wrt, AIL_PROP_X_SLP_PACKAGETYPE_STR, WRT_PREFIX);
+ ail_filter_add_str(filter_tpk, AIL_PROP_X_SLP_PACKAGETYPE_STR, TPK_PREFIX);
+
+ ail_filter_list_appinfo_foreach(filter_rpm, __setting_storage_main_appinfo_func_cb, (void*)apps_list);
+ ail_filter_list_appinfo_foreach(filter_wrt, __setting_storage_main_appinfo_func_cb, (void*)apps_list);
+ ail_filter_list_appinfo_foreach(filter_tpk, __setting_storage_main_appinfo_func_cb, (void*)apps_list);
+
+ ail_filter_destroy(filter_rpm);
+ ail_filter_destroy(filter_wrt);
+ ail_filter_destroy(filter_tpk);
+}
+
+static double __setting_storage_main_applications_status_get(void *data)
+{
+ SETTING_TRACE_BEGIN;
+ setting_retvm_if(data == NULL, 0.0, "Data parameter is NULL");
+ SettingStorageUG *ad = (SettingStorageUG *)data;
+
+ Eina_List *apps_list = NULL;
+ __setting_storage_main_applications_list_get(&apps_list);
+
+ SETTING_TRACE("count = %d", eina_list_count(apps_list));
+
+ double total_size = 0.0;
+
+ Eina_List *l = NULL;
+ App_Info *app_info = NULL;
+ EINA_LIST_FOREACH (apps_list, l, app_info)
+ {
+ int exit_flag = 0;
+ pthread_mutex_lock(&ad->exit_mutex);
+ exit_flag = ad->exit_flag;
+ pthread_mutex_unlock(&ad->exit_mutex);
+
+ if (exit_flag == 1) {
+ SETTING_TRACE("exit_flag is 1");
+ break;
+ }
+
+ //SETTING_TRACE("pkg_name: %s ", app_info->pkg_name);
+ //SETTING_TRACE("pkg_type: %s", app_info->pkg_type);
+ pkgmgr_info *pkg_info = pkgmgr_info_new(app_info->pkg_type, app_info->pkg_name);
+ if (!pkg_info) {
+ SETTING_TRACE("pkg_info is null, couldn't get the sizes");
+ app_info->total_size = 0;
+ } else {
+ char *buf = NULL;
+ buf = pkgmgr_info_get_string(pkg_info, STR_INSTALLED_SIZE);
+ if (buf) {
+ //SETTING_TRACE("size : %s", buf);
+ app_info->total_size = atoi(buf);
+ G_FREE(buf);
+ } else {
+ app_info->total_size = 0;
+ }
+ pkgmgr_info_free(pkg_info);
+ }
+
+ total_size += app_info->total_size;
+ }
+
+ /* free the list */
+ Eina_List *tmp = NULL;
+ app_info = NULL;
+ EINA_LIST_FOREACH(apps_list, tmp, app_info)
+ {
+ G_FREE(app_info->pkg_name);
+ G_FREE(app_info->pkg_type);
+ FREE(app_info);
+ }
+ eina_list_free(apps_list);
+ apps_list = NULL;
+
+ return total_size;
+}
+
+void __setting_storage_main_pipe_cb(void *data, void *buffer, unsigned int nbyte)
+{
+ SETTING_TRACE_BEGIN;
+ setting_retm_if(data == NULL, "Data parameter is NULL");
+ setting_retm_if(buffer == NULL, "buffer parameter is NULL");
+ SettingStorageUG *ad = (SettingStorageUG *)data;
+
+ Update_Info *update_info = (Update_Info *) buffer;
+
+ SETTING_TRACE("update_info : %d", update_info->type);
+
+ switch (update_info->type) {
+ case SETTING_STORAGE_APPLICATIONS:
+ {
+ ad->apps_status.dTotal = update_info->total_size;
+ __setting_storage_main_genlist_update(ad->apps, ad->apps_status);
+ }
+ break;
+ case SETTING_STORAGE_PICTURES_VIDEO:
+ {
+ ad->pics_videos_status.dTotal = update_info->total_size;
+ __setting_storage_main_genlist_update(ad->pics_videos, ad->pics_videos_status);
+ }
+ break;
+ case SETTING_STORAGE_DOWNLOADS:
+ {
+ ad->downloads_status.dTotal = update_info->total_size;
+ __setting_storage_main_genlist_update(ad->downloads, ad->downloads_status);
+ }
+ break;
+ case SETTING_STORAGE_AUDIO:
+ {
+ ad->audio_status.dTotal = update_info->total_size;
+ __setting_storage_main_genlist_update(ad->audio, ad->audio_status);
+ }
+ break;
+ case SETTING_STORAGE_MISCELLANEOUS:
+ {
+ ad->others_status.dTotal = update_info->total_size;
+ __setting_storage_main_genlist_update(ad->others, ad->others_status);
+ }
+ break;
+ default:
+ /* do nothing*/
+ SETTING_TRACE_ERROR("wrong update type");
+ break;
+ }
+
+ __setting_storage_main_genlist_update(ad->internal, ad->internal_status);
+
+ SETTING_TRACE_END;
+}
+
+static void *__setting_storage_main_thread_start_routine(void *data)
+{
+ SETTING_TRACE("==== sub thread id = %d =====", (int)pthread_self());
+ SETTING_TRACE_BEGIN;
+ setting_retvm_if(data == NULL, NULL, "Data parameter is NULL");
+ SettingStorageUG *ad = (SettingStorageUG *)data;
+
+ Ecore_Pipe *pipe = ad->pipe;
+ update_type type = SETTING_STORAGE_PICTURES_VIDEO;
+ while (1) {
+ pthread_mutex_lock(&ad->update_mutex);
+ while (ad->type == SETTING_STORAGE_SLEEP) {
+ /* wait to be waked up*/
+ pthread_cond_wait(&ad->wait_cond, &ad->update_mutex);
+ }
+ type = ad->type;
+ pthread_mutex_unlock(&ad->update_mutex);
+
+ SETTING_TRACE("thread start to work, update type = %d", type);
+
+ int exit_flag = 0;
+
+ pthread_mutex_lock(&ad->exit_mutex);
+ exit_flag = ad->exit_flag;
+ pthread_mutex_unlock(&ad->exit_mutex);
+
+ if (exit_flag == 1) {
+ SETTING_TRACE("exit_flag is 1");
+ break;
+ }
+
+ if (type >= SETTING_STORAGE_MAX) {
+ SETTING_TRACE("work is done, thread will sleep");
+ pthread_mutex_lock(&ad->update_mutex);
+ ad->type = SETTING_STORAGE_SLEEP;
+ pthread_mutex_unlock(&ad->update_mutex);
+ continue;
+ }
+
+ switch (type) {
+ case SETTING_STORAGE_PICTURES_VIDEO:
+ {
+ /* get pictures and videos info */
+ double pics_videos_size = __setting_storage_main_pictures_videos_status_get();
+ SETTING_TRACE("pics_videos_size = %f", pics_videos_size);
+
+ Update_Info pics_videos_info;
+ memset(&pics_videos_info, 0, sizeof(Update_Info));
+ pics_videos_info.type = SETTING_STORAGE_PICTURES_VIDEO;
+ pics_videos_info.total_size = pics_videos_size;
+
+ ecore_pipe_write(pipe, &pics_videos_info, sizeof(pics_videos_info));
+ }
+ break;
+ case SETTING_STORAGE_DOWNLOADS:
+ {
+ /* get downloads info */
+ double downloads_size = __setting_storage_main_downloads_status_get();
+ SETTING_TRACE("downloads_size = %f", downloads_size);
+
+ Update_Info downloads_info;
+ memset(&downloads_info, 0, sizeof(Update_Info));
+ downloads_info.type = SETTING_STORAGE_DOWNLOADS;
+ downloads_info.total_size = downloads_size;
+
+ ecore_pipe_write(pipe, &downloads_info, sizeof(downloads_info));
+ }
+ break;
+ case SETTING_STORAGE_AUDIO:
+ {
+ /* get audio info */
+ double audio_size = __setting_storage_main_audio_status_get();
+ SETTING_TRACE("audio_size = %f", audio_size);
+
+ Update_Info audio_info;
+ memset(&audio_info, 0, sizeof(Update_Info));
+ audio_info.type = SETTING_STORAGE_AUDIO;
+ audio_info.total_size = audio_size;
+
+ ecore_pipe_write(pipe, &audio_info, sizeof(audio_info));
+ }
+ break;
+ case SETTING_STORAGE_MISCELLANEOUS:
+ {
+ /* get miscellaneous files info */
+ double misc_size = __setting_storage_main_miscellaneous_size_get();
+ SETTING_TRACE("misc_size = %f", misc_size);
+
+ Update_Info misc_info;
+ memset(&misc_info, 0, sizeof(Update_Info));
+ misc_info.type = SETTING_STORAGE_MISCELLANEOUS;
+ misc_info.total_size = misc_size;
+
+ ecore_pipe_write(pipe, &misc_info, sizeof(misc_info));
+ }
+ break;
+ case SETTING_STORAGE_APPLICATIONS:
+ {
+ /* get apps info */
+ double apps_size = __setting_storage_main_applications_status_get(ad);
+ SETTING_TRACE("apps_size = %f", apps_size);
+
+ Update_Info apps_info;
+ memset(&apps_info, 0, sizeof(Update_Info));
+ apps_info.type = SETTING_STORAGE_APPLICATIONS;
+ apps_info.total_size = apps_size;
+
+ ecore_pipe_write(pipe, &apps_info, sizeof(apps_info));
+ }
+ break;
+ default:
+ {
+ SETTING_TRACE("type = %d", type);
+ break;
+ }
+ }
+
+ pthread_mutex_lock(&ad->update_mutex);
+ ad->type++;
+ SETTING_TRACE("ad->type = %d", ad->type);
+ pthread_mutex_unlock(&ad->update_mutex);
+ }
+ SETTING_TRACE_END;
+ pthread_exit((void *) 0);
+}
+
+static void __setting_storage_main_init(void *data)
+{
+ SETTING_TRACE_BEGIN;
+ setting_retm_if(data == NULL, "Data parameter is NULL");
+ SettingStorageUG *ad = (SettingStorageUG *)data;
+
+ pthread_mutex_init(&ad->exit_mutex, NULL);
+ pthread_mutex_init(&ad->update_mutex, NULL);
+ pthread_cond_init(&ad->wait_cond, NULL);
+
+ ad->exit_flag = EINA_FALSE;
+ ad->type = SETTING_STORAGE_PICTURES_VIDEO;
+
+ ad->internal_status.dAvail = 0.0;
+ ad->internal_status.dTotal= 0.0;
+
+ ad->apps_status.dAvail = 0.0;
+ ad->apps_status.dTotal= 0.0;
+
+ ad->pics_videos_status.dAvail = 0.0;
+ ad->pics_videos_status.dTotal= 0.0;
+
+ ad->downloads_status.dAvail = 0.0;
+ ad->downloads_status.dTotal= 0.0;
+
+ ad->audio_status.dAvail = 0.0;
+ ad->audio_status.dTotal= 0.0;
+
+ ad->others_status.dAvail = 0.0;
+ ad->others_status.dTotal= 0.0;
+}
+
/* ***************************************************
*
*basic func
SettingStorageUG *ad = (SettingStorageUG *) cb;
- int ret = SETTING_RETURN_SUCCESS;
+ __setting_storage_main_init(ad);
- ret = media_content_connect();
- if(ret == MEDIA_CONTENT_ERROR_NONE) {
- SETTING_TRACE("media_content_connect is success");
- } else {
- SETTING_TRACE_ERROR("media_content_connect is failed");
- return SETTING_RETURN_FAIL;
- }
+ int ret = SETTING_RETURN_SUCCESS;
retvm_if(ad->win_main_layout == NULL, SETTING_DRAW_ERR_FAIL_LOAD_EDJ,
"win_main_layout is NULL");
__setting_storage_main_internal_storage_status_get(ad);
- __setting_storage_main_pictures_videos_status_get(ad);
-
- __setting_storage_main_downloads_status_get(ad);
-
- __setting_storage_main_audio_status_get(ad);
-
- __setting_storage_main_miscellaneous_size_get(ad);
-
Elm_Object_Item *item = NULL;
bool is_emulator = isEmulBin();
}
/* Applications */
- ad->apps_status.dTotal = 0; /* initial value */
- char apps_desc[SETTING_STORAGE_MAX_STR_LEN + 1] = {0,};
- ret = __setting_storage_status_size_transition(ad->apps_status.dTotal, apps_desc);
- setting_retvm_if(ret == SETTING_RETURN_FAIL, SETTING_RETURN_FAIL, "failed to transform")
-
ad->apps = setting_create_Gendial_field_def(ad->genlist, &(ad->itc_2text_1icon_3),
__setting_storage_main_Gendial_mouse_up_cb,
ad, SWALLOW_Type_INVALID, SETTING_STORAGE_APPS_ICON_PATH,
NULL, 0, "IDS_ST_BODY_APPLICATIONS",
- apps_desc, NULL);
+ _("IDS_ST_HEADER_PLEASE_WAIT"), NULL);
if (ad->apps) {
ad->apps->userdata = ad;
if (is_emulator) {
}
/* Pictures, Videos */
- char pics_videos_desc[SETTING_STORAGE_MAX_STR_LEN + 1] = {0,};
- ret = __setting_storage_status_size_transition(ad->pics_videos_status.dTotal, pics_videos_desc);
- setting_retvm_if(ret == SETTING_RETURN_FAIL, SETTING_RETURN_FAIL, "failed to transform")
ad->pics_videos = setting_create_Gendial_field_def(ad->genlist, &(ad->itc_2text_1icon_3),
__setting_storage_main_Gendial_mouse_up_cb,
ad, SWALLOW_Type_INVALID, SETTING_STORAGE_PICS_ICON_PATH,
NULL, 0, SETTING_STORAGE_PICS_STR,
- pics_videos_desc, NULL);
+ _("IDS_ST_HEADER_PLEASE_WAIT"), NULL);
if (ad->pics_videos) {
ad->pics_videos->userdata = ad;
if (is_emulator) {
}
/* Downloads */
- char downloads_desc[SETTING_STORAGE_MAX_STR_LEN + 1] = {0,};
- ret = __setting_storage_status_size_transition(ad->downloads_status.dTotal, downloads_desc);
- setting_retvm_if(ret == SETTING_RETURN_FAIL, SETTING_RETURN_FAIL, "failed to transform")
ad->downloads = setting_create_Gendial_field_def(ad->genlist, &(ad->itc_2text_1icon_3),
__setting_storage_main_Gendial_mouse_up_cb,
ad, SWALLOW_Type_INVALID, SETTING_STORAGE_DOWNS_ICON_PATH,
NULL, 0, SETTING_STORAGE_DOWNS_STR,
- downloads_desc,
- NULL);
+ _("IDS_ST_HEADER_PLEASE_WAIT"), NULL);
if (ad->downloads) {
ad->downloads->userdata = ad;
if (is_emulator) {
}
/* Audio */
- char audio_desc[SETTING_STORAGE_MAX_STR_LEN + 1] = {0,};
- ret = __setting_storage_status_size_transition(ad->audio_status.dTotal, audio_desc);
- setting_retvm_if(ret == SETTING_RETURN_FAIL, SETTING_RETURN_FAIL, "failed to transform")
ad->audio = setting_create_Gendial_field_def(ad->genlist, &(ad->itc_2text_1icon_3),
__setting_storage_main_Gendial_mouse_up_cb,
ad, SWALLOW_Type_INVALID, SETTING_STORAGE_AUDIO_ICON_PATH,
NULL, 0, SETTING_STORAGE_AUDIO_STR,
- audio_desc,
- NULL);
+ _("IDS_ST_HEADER_PLEASE_WAIT"), NULL);
if (ad->audio) {
ad->audio->userdata = ad;
}
/* Miscellaneous files */
- char others_desc[SETTING_STORAGE_MAX_STR_LEN + 1] = {0,};
- ret = __setting_storage_status_size_transition(ad->others_status.dTotal, others_desc);
- setting_retvm_if(ret == SETTING_RETURN_FAIL, SETTING_RETURN_FAIL, "failed to transform")
-
ad->others = setting_create_Gendial_field_def(ad->genlist, &(ad->itc_2text_1icon_3),
__setting_storage_main_Gendial_mouse_up_cb,
ad, SWALLOW_Type_INVALID, SETTING_STORAGE_MISCES_ICON_PATH,
NULL, 0, SETTING_STORAGE_MISCES_STR,
- others_desc, NULL);
+ _("IDS_ST_HEADER_PLEASE_WAIT"), NULL);
if (ad->others) {
ad->others->userdata = ad;
} else {
/* SD card info */
setting_create_Gendial_field_titleItem(ad->genlist, &(ad->itc_group_item),
- "IDS_ST_BODY_SD_CARD", NULL);
+ "IDS_ST_BODY_SD_CARD", NULL);
__setting_storage_main_sd_card_info_append(ad);
ret = vconf_notify_key_changed(VCONFKEY_SYSMAN_MMC_STATUS,
elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
}
- if(ad->timer) {
- ecore_timer_del(ad->timer);
- ad->timer = NULL;
+ setting_view_storage_main.is_create = 1;
+
+ if (ad->pipe) {
+ ecore_pipe_del(ad->pipe);
+ ad->pipe = NULL;
+ }
+ ad->pipe = ecore_pipe_add(__setting_storage_main_pipe_cb, ad);
+ ret = pthread_create(&ad->tid, NULL, __setting_storage_main_thread_start_routine, ad);
+ if (ret != 0) {
+ SETTING_TRACE_ERROR("fail to create thread");
}
- ad->timer = ecore_timer_add(2, (Ecore_Task_Cb)__setting_storage_main_timer_cb, ad);
+ SETTING_TRACE("thread id = %d", ad->tid);
- setting_view_storage_main.is_create = 1;
return SETTING_RETURN_SUCCESS;
}
SettingStorageUG *ad = (SettingStorageUG *) cb;
- int ret = media_content_disconnect();
- if (ret == MEDIA_CONTENT_ERROR_NONE) {
- SETTING_TRACE("media_content_disconnect is success");
- } else {
- SETTING_TRACE_ERROR("media_content_disconnect is failed");
- }
+ int ret = 0;
- if (ad->pop_progress) {
- evas_object_del(ad->pop_progress);
- ad->pop_progress = NULL;
- }
+ pthread_mutex_lock(&ad->exit_mutex);
+ ad->exit_flag = 1;
+ pthread_mutex_unlock(&ad->exit_mutex);
+
+ /* wake up thread */
+ pthread_mutex_lock(&ad->update_mutex);
+ ad->type = SETTING_STORAGE_REUPDATE;
+ pthread_cond_signal(&ad->wait_cond);
+ pthread_mutex_unlock(&ad->update_mutex);
- if(ad->timer) {
- ecore_timer_del(ad->timer);
- ad->timer = NULL;
+ void *thread_ret = NULL;
+ ret = pthread_join(ad->tid, &thread_ret);
+ if(ret != 0) {
+ SETTING_TRACE_ERROR("fail to join with thread");
}
+ SETTING_TRACE("thread exit code %d", (int)thread_ret);
- __setting_storage_main_apps_list_free(ad);
+ pthread_mutex_destroy(&ad->exit_mutex);
+ pthread_mutex_destroy(&ad->update_mutex);
+ pthread_cond_destroy(&ad->wait_cond);
+
+ if (ad->pipe) {
+ ecore_pipe_del(ad->pipe);
+ ad->pipe = NULL;
+ }
if (!isEmulBin()) {
ret = vconf_ignore_key_changed(VCONFKEY_SYSMAN_MMC_STATUS,
SettingStorageUG *ad = (SettingStorageUG *) cb;
- /* update internal */
- __setting_storage_main_internal_storage_status_get(ad);
- __setting_storage_main_genlist_update(ad->internal, ad->internal_status);
-
- /* update pictures videos */
- __setting_storage_main_pictures_videos_status_get(ad);
- __setting_storage_main_genlist_update(ad->pics_videos, ad->pics_videos_status);
-
- /* update download */
- __setting_storage_main_downloads_status_get(ad);
- __setting_storage_main_genlist_update(ad->downloads, ad->downloads_status);
-
- /* update audio */
- __setting_storage_main_audio_status_get(ad);
- __setting_storage_main_genlist_update(ad->audio, ad->audio_status);
-
- /* update miscellaneous */
- __setting_storage_main_miscellaneous_size_get(ad);
- __setting_storage_main_genlist_update(ad->others, ad->others_status);
-
- /* update available */
- char desc[SETTING_STORAGE_MAX_STR_LEN + 1] = {0,};
- int ret = __setting_storage_status_size_transition(ad->internal_status.dAvail, desc);
- setting_retvm_if(ret == SETTING_RETURN_FAIL, SETTING_RETURN_FAIL, "failed to transform")
-
- G_FREE(ad->avail->sub_desc);
- ad->avail->sub_desc = (char *)g_strdup(desc);
- elm_object_item_data_set(ad->avail->item, ad->avail);
- elm_genlist_item_update(ad->avail->item);
+ /* wake up thread */
+ pthread_mutex_lock(&ad->update_mutex);
+ ad->type = SETTING_STORAGE_REUPDATE;
+ pthread_cond_signal(&ad->wait_cond);
+ pthread_mutex_unlock(&ad->update_mutex);
if (ad->ly_main != NULL) {
evas_object_show(ad->ly_main);