*/
#include <setting-storage-main.h>
#include <Ecore_X.h>
-#include <sys/statvfs.h>
-#include <sys/stat.h>
-#include <sys/mount.h>
-#include <dirent.h>
-#include <glib.h>
-#include <glib/gprintf.h>
-#include <sysman.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);
return SETTING_RETURN_SUCCESS;
}
-static int __setting_storage_main_file_stat_get(const char *filename, Node_Info **node)
-{
- setting_retvm_if(!filename || !node, SETTING_RETURN_FAIL, "NULL input parameters");
- struct stat statbuf;
- if (stat(filename, &statbuf) == -1) {
- SETTING_TRACE_ERROR("failed to call stat");
- return SETTING_RETURN_FAIL;
- }
-
- if (*node == NULL) {
- SETTING_TRACE_ERROR("node is NULL");
- return SETTING_RETURN_FAIL;
- }
-
- (*node)->size = statbuf.st_size;
-
- return SETTING_RETURN_SUCCESS;
-}
-
-static int __setting_storage_main_file_list_get(char *path, Eina_List **dir_list, Eina_List **file_list)
-{
- SETTING_TRACE_BEGIN;
- setting_retvm_if(NULL == path, SETTING_RETURN_FAIL, "path is NULL");
-
- DIR *pDir = NULL;
- struct dirent *ent = NULL;
- char childpath[SETTING_STORAGE_CHILDPATH_LEN] = {0,};
-
- pDir = opendir(path);
- setting_retvm_if(NULL == pDir, SETTING_RETURN_FAIL, "pDir is NULL");
-
- while ((ent = readdir(pDir)) != NULL) {
- if (safeStrCmp(ent->d_name, ".") == 0 || safeStrCmp(ent->d_name, "..") == 0) {
- continue;
- }
- /*only deal with dirs and regular files*/
- if ((ent->d_type & DT_DIR) == 0 && (ent->d_type & DT_REG) == 0) {
- continue;
- }
-
- Node_Info *pNode = (Node_Info *)malloc(sizeof(Node_Info));
-
- if (pNode == NULL) {
- continue;
- }
-
- memset(pNode, 0, sizeof(Node_Info));
- /*get path*/
- g_strlcpy(pNode->path, path, (gsize) sizeof(pNode->path));
-
- /*get name*/
- g_strlcpy(pNode->name, ent->d_name, (gsize) sizeof(pNode->name));
-
- /*get size*/
- int copiednum = g_sprintf(childpath, "%s/%s", path, ent->d_name);
- if (copiednum < 0) {
- FREE(pNode);
- continue;
- }
- if (__setting_storage_main_file_stat_get(childpath, &pNode) == SETTING_RETURN_FAIL) {
- FREE(pNode);
- continue;
- }
-
- if (ent->d_type & DT_DIR) {
- *dir_list = eina_list_append(*dir_list, pNode);
- } else {
- *file_list = eina_list_append(*file_list, pNode);
- }
- }
- closedir(pDir);
-
- return SETTING_RETURN_SUCCESS;
-}
-
-static int __setting_storage_main_list_len_get(const Eina_List *list)
-{
- if (list == NULL)
- return 0;
-
- return eina_list_count(list);
-}
-
static long __setting_storage_main_folder_size_get(char *path)
{
SETTING_TRACE_BEGIN;
if (ecore_file_is_dir(path)) {
int ret = SETTING_RETURN_FAIL;
- ret = __setting_storage_main_file_list_get(path, &dir_list, &file_list);
+ ret = setting_storage_file_list_get(path, &dir_list, &file_list);
if (ret == SETTING_RETURN_SUCCESS) {
int i = 0;
- int dir_list_len = __setting_storage_main_list_len_get(dir_list);
- int file_list_len = __setting_storage_main_list_len_get(file_list);
+ 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);
for (i = 0; i < file_list_len; i++) {
Node_Info *pNode = NULL;
dAvail = 0.0;
ret = __setting_storage_main_fs_stat(&dTotal, &dAvail, SETTING_STORAGE_MEDIA_PATH);
setting_retm_if(ret == SETTING_RETURN_FAIL, "get media status failed");
+
internal_status.dTotal += dTotal;
internal_status.dAvail += dAvail;
ad->downloads_status = downloads_status;
}
+static bool __setting_storage_main_media_item_cb(media_info_h media, void *data)
+{
+ 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;
+
+ media_content_type_e media_type = 0;
+ unsigned long long size = 0;
+
+ media_info_get_media_type(media, &media_type);
+ //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;
+ } else {
+ SETTING_TRACE("Other Content");
+ }
+
+ return true;
+}
+
static void __setting_storage_main_audio_status_get(void *data)
{
SETTING_TRACE_BEGIN;
setting_retm_if(data == NULL, "Data parameter is NULL");
SettingStorageUG *ad = (SettingStorageUG *) data;
- double dTotal = 0.0;
- int ret = SETTING_RETURN_SUCCESS;
- Setting_Storage_Status audio_status;
+ ad->audio_status.dTotal = 0;
- dTotal = __setting_storage_main_folder_size_get(SETTING_STORAGE_AUDIO_PATH);
- setting_retm_if(ret == SETTING_RETURN_FAIL, "get audio status failed");
- audio_status.dTotal = dTotal;
+ int ret = MEDIA_CONTENT_ERROR_NONE;
+ filter_h filter = NULL;
- //SETTING_TRACE("audio_status = %f", dTotal);
+ /*Set Filter*/
+ char *condition = "MEDIA_TYPE=3"; /*0-image, 1-video, 2-sound, 3-music, 4-other*/
- ad->audio_status = audio_status;
+ ret = media_filter_create(&filter);
+ if(ret != MEDIA_CONTENT_ERROR_NONE) {
+ SETTING_TRACE("Fail to create filter");
+ return;
+ }
+
+ 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;
+ }
+
+ 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;
+ }
+
+ ret = media_info_foreach_media_from_db(filter, __setting_storage_main_media_item_cb, ad);
+ if(ret != MEDIA_CONTENT_ERROR_NONE) {
+ media_filter_destroy(filter);
+ SETTING_TRACE("Fail to get media");
+ return;
+ }
+}
+
+static int __setting_storage_main_miscellaneous_list_get(char *path, Eina_List **dir_list, Eina_List **file_list)
+{
+ SETTING_TRACE_BEGIN;
+ setting_retvm_if(NULL == path, SETTING_RETURN_FAIL, "path is NULL");
+
+ DIR *pDir = NULL;
+ struct dirent *ent = NULL;
+ char childpath[SETTING_STORAGE_CHILDPATH_LEN] = {0,};
+
+ pDir = opendir(path);
+ setting_retvm_if(NULL == pDir, SETTING_RETURN_FAIL, "pDir is NULL");
+
+ while ((ent = readdir(pDir)) != NULL) {
+ if (safeStrCmp(ent->d_name, ".") == 0
+ || safeStrCmp(ent->d_name, "..") == 0
+ || safeStrCmp(ent->d_name, ".tmp_download") == 0
+ || safeStrCmp(ent->d_name, ".video-hub") == 0
+ || safeStrCmp(ent->d_name, "Camera") == 0
+ || safeStrCmp(ent->d_name, "Downloads") == 0
+ || safeStrCmp(ent->d_name, "Images") == 0
+ || safeStrCmp(ent->d_name, "Others") == 0
+ || safeStrCmp(ent->d_name, "Sounds") == 0
+ || safeStrCmp(ent->d_name, "Videos") == 0
+ || safeStrCmp(ent->d_name, "lost+found") == 0) {
+ continue;
+ }
+ /*only deal with dirs and regular files*/
+ if ((ent->d_type & DT_DIR) == 0 && (ent->d_type & DT_REG) == 0) {
+ continue;
+ }
+
+ Node_Info *pNode = (Node_Info *)malloc(sizeof(Node_Info));
+
+ if (pNode == NULL) {
+ continue;
+ }
+
+ memset(pNode, 0, sizeof(Node_Info));
+ /*get path*/
+ g_strlcpy(pNode->path, path, (gsize) sizeof(pNode->path));
+
+ /*get name*/
+ g_strlcpy(pNode->name, ent->d_name, (gsize) sizeof(pNode->name));
+
+ /*get size*/
+ int copiednum = g_sprintf(childpath, "%s/%s", path, ent->d_name);
+ if (copiednum < 0) {
+ FREE(pNode);
+ continue;
+ }
+ if (setting_storage_file_stat_get(childpath, &pNode) == SETTING_RETURN_FAIL) {
+ FREE(pNode);
+ continue;
+ }
+
+ if (ent->d_type & DT_DIR) {
+ *dir_list = eina_list_append(*dir_list, pNode);
+ } else {
+ *file_list = eina_list_append(*file_list, pNode);
+ }
+ }
+ closedir(pDir);
+
+ return SETTING_RETURN_SUCCESS;
+}
+
+/**
+ * Miscellaneous files is all directories files under /opt/media/ except below default directories:
+ * ++++++++++++++++++++++++++++++++++++++++++++++++
+ * -sh-4.1# ls -all
+ * total 56
+ * drwxrwxrwx 11 app app 4096 Jan 4 12:42 .
+ * drwxr-xr-x 20 root root 4096 Jan 7 10:09 ..
+ * drwxr-xr-x 2 root root 4096 Jan 4 08:46 .tmp_download
+ * drwxr-xr-x 2 app app 4096 Jan 4 08:47 .video-hub
+ * drwxrwxrwx 2 app app 4096 Oct 5 2012 Camera
+ * drwxrwxrwx 3 app app 4096 Jan 4 08:46 Downloads
+ * drwxrwxrwx 2 app app 4096 Oct 5 2012 Images
+ * drwxrwxrwx 2 app app 4096 Oct 5 2012 Others
+ * drwxrwxrwx 3 app app 4096 Oct 5 2012 Sounds
+ * drwxrwxrwx 2 app app 4096 Oct 5 2012 Videos
+ * drwxrwxrwx 2 app app 16384 Oct 5 2012 lost+found
+ * ++++++++++++++++++++++++++++++++++++++++++++++++
+ */
+static void __setting_storage_main_miscellaneous_size_get(void *data)
+{
+ SETTING_TRACE_BEGIN;
+ setting_retm_if(data == NULL, "Data parameter is NULL");
+ SettingStorageUG *ad = (SettingStorageUG *) data;
+
+ unsigned long size = 0;
+ Eina_List *file_list = NULL;
+ Eina_List *dir_list = NULL;
+
+ char *path = SETTING_STORAGE_MEDIA_PATH;
+
+ if (ecore_file_is_dir(path)) {
+ int ret = SETTING_RETURN_FAIL;
+ ret = __setting_storage_main_miscellaneous_list_get(path, &dir_list, &file_list);
+
+ if (ret == SETTING_RETURN_SUCCESS) {
+ 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);
+ 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);
+ }
+ for (i = 0; i < dir_list_len; i++) {
+ Node_Info *pNode = NULL;
+ char *full_path = NULL;
+ pNode = (Node_Info *)eina_list_nth(dir_list, i);
+ if (pNode == NULL)
+ continue;
+ full_path = g_strconcat(pNode->path, "/", pNode->name, NULL);
+ SETTING_TRACE("full_path is [%s]", full_path);
+ size += (__setting_storage_main_folder_size_get(full_path));
+ FREE(full_path);
+ }
+ }
+ }
+
+ if (file_list) {
+ eina_list_free(file_list);
+ file_list = NULL;
+ }
+
+ if (dir_list) {
+ eina_list_free(dir_list);
+ 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;
}
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)
SETTING_TRACE_BEGIN;
setting_retm_if(app_name == NULL, "app_name is NULL");
- #if 0
- if(aul_app_is_running((const char *)app_name)) {
- SETTING_TRACE_DEBUG("%s is already launched.", app_name);
- aul_open_app((const char *)app_name);
- } else {
- SETTING_TRACE_DEBUG("%s will be launched. ", app_name);
- aul_launch_app((const char *)app_name, NULL);
- }
- #else
- app_launcher(app_name);
- #endif
+ app_launcher(app_name);
}
static void __setting_storage_main_Gendial_mouse_up_cb(void *data, Evas_Object *obj, void *event_info)
SettingStorageUG *ad = (SettingStorageUG *) cb;
+ int ret = SETTING_RETURN_SUCCESS;
+
+ 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;
+ }
+
retvm_if(ad->win_main_layout == NULL, SETTING_DRAW_ERR_FAIL_LOAD_EDJ,
"win_main_layout is NULL");
- int ret = SETTING_RETURN_SUCCESS;
-
ad->ly_main =
setting_create_layout_navi_bar_genlist(ad->win_main_layout,
ad->win_get,
__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 = 230.45 * 1024 * 1024; /* for test*/
+ 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")
}
/* Miscellaneous files */
- ad->others_status.dTotal = ad->internal_status.dTotal - ad->internal_status.dAvail
- - ad->apps_status.dTotal - ad->pics_videos_status.dTotal
- - ad->downloads_status.dTotal - ad->audio_status.dTotal;
- ad->others_status.dAvail = 0.0;
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),
+ 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,
}
if (!is_emulator) {
+#if DISABLED_CODE
/* Format USB storage */
setting_create_Gendial_field_def(ad->genlist, &(ad->itc_1text), NULL,
ad, SWALLOW_Type_INVALID, NULL,
ad, SWALLOW_Type_LAYOUT_SPECIALIZTION_X,
NULL, NULL, 0, SETTING_STORAGE_FORMAT_DESC_STR, NULL,
NULL);
+#endif
/* SD card info */
setting_create_Gendial_field_titleItem(ad->genlist, &(ad->itc_group_item),
elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
}
+ 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);
+
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");
+ }
+
+ if (ad->pop_progress) {
+ evas_object_del(ad->pop_progress);
+ ad->pop_progress = NULL;
+ }
+
+ if(ad->timer) {
+ ecore_timer_del(ad->timer);
+ ad->timer = NULL;
+ }
+
+ __setting_storage_main_apps_list_free(ad);
+
if (!isEmulBin()) {
- int ret = vconf_ignore_key_changed(VCONFKEY_SYSMAN_MMC_STATUS,
+ ret = vconf_ignore_key_changed(VCONFKEY_SYSMAN_MMC_STATUS,
__setting_storage_vconf_change_cb);
if (ret != 0) {
SETTING_TRACE_ERROR("call vconf_ignore_key_changed failed");
SettingStorageUG *ad = (SettingStorageUG *) cb;
+ __setting_storage_main_miscellaneous_size_get(ad);
+
+ char others_desc[SETTING_STORAGE_MAX_STR_LEN + 1] = {0,};
+ int 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")
+
+ G_FREE(ad->others->sub_desc);
+ ad->others->sub_desc = (char *)g_strdup(others_desc);
+ elm_object_item_data_set(ad->others->item, ad->others);
+ elm_genlist_item_update(ad->others->item);
+
if (ad->ly_main != NULL) {
evas_object_show(ad->ly_main);
}
.cleanup = setting_storage_miscellaneous_files_cleanup,
};
+static int __setting_storage_miscellaneous_files_list_get(char *path, Eina_List **list)
+{
+ SETTING_TRACE_BEGIN;
+ setting_retvm_if(NULL == path, SETTING_RETURN_FAIL, "path is NULL");
+
+ DIR *pDir = NULL;
+ struct dirent *ent = NULL;
+ char childpath[SETTING_STORAGE_CHILDPATH_LEN] = {0,};
+
+ pDir = opendir(path);
+ setting_retvm_if(NULL == pDir, SETTING_RETURN_FAIL, "pDir is NULL");
+
+ while ((ent = readdir(pDir)) != NULL) {
+ if (safeStrCmp(ent->d_name, ".") == 0
+ || safeStrCmp(ent->d_name, "..") == 0
+ || safeStrCmp(ent->d_name, ".tmp_download") == 0
+ || safeStrCmp(ent->d_name, ".video-hub") == 0
+ || safeStrCmp(ent->d_name, "Camera") == 0
+ || safeStrCmp(ent->d_name, "Downloads") == 0
+ || safeStrCmp(ent->d_name, "Images") == 0
+ || safeStrCmp(ent->d_name, "Others") == 0
+ || safeStrCmp(ent->d_name, "Sounds") == 0
+ || safeStrCmp(ent->d_name, "Videos") == 0
+ || safeStrCmp(ent->d_name, "lost+found") == 0) {
+ continue;
+ }
+ /*only deal with dirs and regular files*/
+ if ((ent->d_type & DT_DIR) == 0 && (ent->d_type & DT_REG) == 0) {
+ continue;
+ }
+
+ Node_Info *pNode = (Node_Info *)malloc(sizeof(Node_Info));
+
+ if (pNode == NULL) {
+ continue;
+ }
+
+ memset(pNode, 0, sizeof(Node_Info));
+ /*get path*/
+ g_strlcpy(pNode->path, path, (gsize) sizeof(pNode->path));
+
+ /*get name*/
+ g_strlcpy(pNode->name, ent->d_name, (gsize) sizeof(pNode->name));
+
+ /*get size*/
+ int copiednum = g_sprintf(childpath, "%s/%s", path, ent->d_name);
+ if (copiednum < 0) {
+ FREE(pNode);
+ continue;
+ }
+ if (setting_storage_file_stat_get(childpath, &pNode) == SETTING_RETURN_FAIL) {
+ FREE(pNode);
+ continue;
+ }
+
+ *list = eina_list_append(*list, pNode);
+ }
+ closedir(pDir);
+
+ return SETTING_RETURN_SUCCESS;
+}
+
+
static int setting_storage_miscellaneous_files_create(void *cb)
{
SETTING_TRACE_BEGIN;
NULL, ad, view_layout, ad->navibar,
&controllbar);
- Setting_Done_List_Data *list_data = (Setting_Done_List_Data *)calloc(1, sizeof(Setting_Done_List_Data));
- setting_retvm_if(list_data == NULL, SETTING_RETURN_FAIL, "failed to calloc");
+ Setting_Done_List_Data *list_data = &(ad->miscellaneous_list);
- ad->miscellaneous_list = list_data;
list_data->win_main = ad->win_main_layout;
list_data->UG_data = ad;
list_data->ly_parent = view_layout;
list_data->controllbar = controllbar;
list_data->select_all_checked = EINA_FALSE;
+ Eina_List *list = NULL;
+ __setting_storage_miscellaneous_files_list_get(SETTING_STORAGE_MEDIA_PATH, &list);
+
+ int count = eina_list_count(list);
int i = 0;
- for (; i < 2; i++) {
- list_data->chk_items[i].item_name = "file";
+ for (; i < count; i++) {
+ Node_Info *pNode = NULL;
+ pNode = (Node_Info *)eina_list_nth(list, i);
+ if (pNode == NULL)
+ continue;
+ list_data->chk_items[i].item_name = pNode->name;
}
list_data->cur_item_num = i;
scroller = setting_create_done_list(list_data);
elm_object_part_content_set(view_layout, "elm.swallow.contents", scroller);
+ if (list) {
+ eina_list_free(list);
+ list = NULL;
+ }
+
+ if(i == 0) {
+ /* disable "Delete" button */
+ Elm_Object_Item *delete_button = elm_toolbar_first_item_get(controllbar);
+ elm_object_item_disabled_set(delete_button, EINA_TRUE);
+ }
+
setting_view_storage_miscellaneous_files.is_create = 1;
return SETTING_RETURN_SUCCESS;
}
retv_if(cb == NULL, SETTING_GENERAL_ERR_NULL_DATA_PARAMETER);
SettingStorageUG *ad = (SettingStorageUG *)cb;
- if (ad->miscellaneous_list->selInfoPop) {
- evas_object_del(ad->miscellaneous_list->selInfoPop);
- ad->miscellaneous_list->selInfoPop = NULL;
+ if (ad->miscellaneous_list.selInfoPop) {
+ evas_object_del(ad->miscellaneous_list.selInfoPop);
+ ad->miscellaneous_list.selInfoPop = NULL;
+ }
+
+ if (ad->popup) {
+ evas_object_del(ad->popup);
+ ad->popup = NULL;
}
elm_naviframe_item_pop(ad->navibar);
setting_view_change(&setting_view_storage_miscellaneous_files, &setting_view_storage_main, ad);
}
+static int __setting_storage_file_remove(char *path)
+{
+ SETTING_TRACE_BEGIN;
+ setting_retvm_if(NULL == path, SETTING_RETURN_FAIL, "path is NULL");
+
+ int ret = SETTING_RETURN_FAIL;
+
+ Eina_List *file_list = NULL;
+ Eina_List *dir_list = NULL;
+
+ if (ecore_file_is_dir(path)) {
+ ret = setting_storage_file_list_get(path, &dir_list, &file_list);
+
+ if (ret == SETTING_RETURN_SUCCESS) {
+ 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);
+ for (i = 0; i < file_list_len; i++) {
+ Node_Info *pNode = NULL;
+ char *full_path = 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);
+ ret = ecore_file_remove(full_path);
+ }
+ for (i = 0; i < dir_list_len; i++) {
+ Node_Info *pNode = NULL;
+ char *full_path = NULL;
+ pNode = (Node_Info *)eina_list_nth(dir_list, i);
+ if (pNode == NULL)
+ continue;
+ full_path = g_strconcat(pNode->path, "/", pNode->name, NULL);
+ SETTING_TRACE("full_path is [%s]", full_path);
+ ret = (__setting_storage_file_remove(full_path));
+ ret = ecore_file_remove(full_path);
+ FREE(full_path);
+ }
+ SETTING_TRACE("full_path is [%s]", path);
+ ret = ecore_file_remove(path);
+ }
+ } else {
+ SETTING_TRACE("path is [%s]", path);
+ ret = ecore_file_remove(path);
+ }
+
+ if (file_list) {
+ eina_list_free(file_list);
+ file_list = NULL;
+ }
+
+ if (dir_list) {
+ eina_list_free(dir_list);
+ dir_list = NULL;
+ }
+
+ return ret;
+}
+
+static void __setting_storage_miscellaneous_files_genlist_update(void *data)
+{
+ SETTING_TRACE_BEGIN;
+ setting_retm_if(data == NULL, "Data parameter is NULL");
+ SettingStorageUG *ad = (SettingStorageUG *) data;
+
+ Evas_Object *view_layout = ad->miscellaneous_list.ly_parent;
+
+ Evas_Object *scroller = NULL;
+ scroller = elm_object_part_content_get(view_layout, "elm.swallow.contents");
+ setting_retm_if(NULL == scroller, "scroller is NULL");
+ elm_genlist_clear(scroller);
+
+ elm_object_part_content_unset(view_layout, "elm.swallow.contents");
+ evas_object_del(scroller);
+ scroller = NULL;
+
+ Eina_List *list = NULL;
+ __setting_storage_miscellaneous_files_list_get(SETTING_STORAGE_MEDIA_PATH, &list);
+
+ int count = eina_list_count(list);
+ int i = 0;
+ for (; i < count; i++) {
+ Node_Info *pNode = NULL;
+ pNode = (Node_Info *)eina_list_nth(list, i);
+ if (pNode == NULL)
+ continue;
+ ad->miscellaneous_list.chk_items[i].item_name = pNode->name;
+ }
+
+ ad->miscellaneous_list.cur_item_num = i;
+ SETTING_TRACE("list_data->cur_item_num:%d", ad->miscellaneous_list.cur_item_num);
+ scroller = setting_create_done_list(&ad->miscellaneous_list);
+ elm_object_part_content_set(view_layout, "elm.swallow.contents", scroller);
+
+ if (list) {
+ eina_list_free(list);
+ list = NULL;
+ }
+
+ if(i == 0) {
+ /* disable "Delete" button */
+ Elm_Object_Item *delete_button = elm_toolbar_first_item_get(ad->miscellaneous_list.controllbar);
+ elm_object_item_disabled_set(delete_button, EINA_TRUE);
+ }
+}
+
static void __setting_storage_miscellaneous_files_delete_cb(void *data,
Evas_Object *obj, void *event_info)
{
SETTING_TRACE_BEGIN;
retm_if(data == NULL, "Data parameter is NULL");
- //SettingStorageUG *ad = (SettingStorageUG *) data;
+ SettingStorageUG *ad = (SettingStorageUG *) data;
+
+ if (ad->miscellaneous_list.selInfoPop) {
+ evas_object_del(ad->miscellaneous_list.selInfoPop);
+ ad->miscellaneous_list.selInfoPop = NULL;
+ }
+
+ if (!setting_done_list_is_some_item_selected(&ad->miscellaneous_list)) {
+ setting_create_simple_popup(NULL, ad->win_get, NULL, "No item selected");
+ } else {
+ int i = 0;
+ for (; i < ad->miscellaneous_list.cur_item_num; i++) {
+ if (!ad->miscellaneous_list.chk_items[i].data_GenItem->chk_status) {
+ continue;
+ }
+
+ char path[SETTING_STORAGE_CHILDPATH_LEN] = {0,};
+ snprintf(path, SETTING_STORAGE_CHILDPATH_LEN, "%s/%s", SETTING_STORAGE_MEDIA_PATH,
+ ad->miscellaneous_list.chk_items[i].item_name);
+ SETTING_TRACE("path = %s", path);
+ /*unselect item*/
+ elm_check_state_set(ad->miscellaneous_list.chk_items[i].data_GenItem->eo_check, 0);
+ ad->miscellaneous_list.chk_items[i].data_GenItem->chk_status = 0;
+
+ int ret = __setting_storage_file_remove(path);
+ if (!ret) {
+ SETTING_TRACE_ERROR("failed to __setting_storage_file_remove");
+ if (ad->popup) {
+ evas_object_del(ad->popup);
+ ad->popup = NULL;
+ }
+ ad->popup = setting_create_popup_without_btn(ad, ad->win_get,
+ _("IDS_COM_POP_FAILED"),
+ NULL, NULL, POPUP_INTERVAL, FALSE, FALSE);
+ return;
+ }
+
+ }
+
+ /* update genlist */
+ __setting_storage_miscellaneous_files_genlist_update(ad);
+
+ /* reset sel_all item */
+ elm_check_state_set(ad->miscellaneous_list.select_all_checkbox, 0);
+ ad->miscellaneous_list.select_all_checked = EINA_FALSE;
+ }
}