From 5db0e3181a70598cbbd09a61f49b4032e6c6f930 Mon Sep 17 00:00:00 2001 From: Sungbok Park Date: Wed, 14 Nov 2012 02:15:49 +0900 Subject: [PATCH] merge with latest viewer code Change-Id: Ide966bdb3c1f9e0d0a13909377ca6ee48f998e26 --- viewer/include/email-viewer-utils.h | 2 + viewer/include/email-viewer.h | 1 + viewer/src/email-viewer-logic.c | 16 +-- viewer/src/email-viewer-utils.c | 125 ++++++++++++++++++++++ viewer/src/email-viewer-webview.c | 205 +++++++++++++++++++++++++++++++++++- viewer/src/email-viewer.c | 74 +++++++++++-- 6 files changed, 392 insertions(+), 31 deletions(-) diff --git a/viewer/include/email-viewer-utils.h b/viewer/include/email-viewer-utils.h index 88aeeaa..4c390bd 100755 --- a/viewer/include/email-viewer-utils.h +++ b/viewer/include/email-viewer-utils.h @@ -64,6 +64,8 @@ void _move_email(EmailViewerUGD *ug_data, int dest_folder_id, gboolean is_delete void _delete_email(EmailViewerUGD *ug_data); void _notify_mailbox_size(EmailViewerUGD *ug_data, char *size); +int viewer_get_filepath_from_path(char *default_path, char *origin_path, char *new_path, Eina_Bool get_new_path); +Eina_Bool viewer_save_file(const gchar *path, const gchar *buf, gsize len); // for saving images #endif /* __DEF_email_viewer_utils_H__ */ /* EOF */ diff --git a/viewer/include/email-viewer.h b/viewer/include/email-viewer.h index df70863..4ce72bc 100755 --- a/viewer/include/email-viewer.h +++ b/viewer/include/email-viewer.h @@ -80,6 +80,7 @@ #define ICON_CONTROLBAR_MORE IMGDIR"/M02_controlbar_icon_more.png" #define EMAIL_DEFAULT_HTML "file://"DATADIR"/_email_default.html" +#define EMAIL_VIEWER_TMP_FOLDER DIR_TMP_PREFIX"/email_viewer" #define EMAIL_VIEWER_NOC_WIDTH 710.0 #define EMAIL_VIEWER_NOC_HIGHT 949.0 diff --git a/viewer/src/email-viewer-logic.c b/viewer/src/email-viewer-logic.c index a34835c..1191e63 100755 --- a/viewer/src/email-viewer-logic.c +++ b/viewer/src/email-viewer-logic.c @@ -210,21 +210,7 @@ static void _set_request_report(EmailViewerProp *prop, email_mail_data_t * mail_ return; } - email_account_t *account = NULL; - if (!email_engine_get_account_full_data(mail_info->account_id, &account)) { - debug_log("Failed email_engine_get_account_full_data"); - return; - } - - if (account) { - account_user_data_t *ud = (account_user_data_t*)account->user_data; - if (ud != NULL) { - debug_log("send_read_report is %d", ud->send_read_report); - prop->request_report = ud->send_read_report; - } - email_free_account(&account, 1); - account = NULL; - } + prop->request_report = (mail_info->report_status & EMAIL_MAIL_REQUEST_MDN) ? TRUE : FALSE; debug_log("request_report (%d)", prop->request_report); } diff --git a/viewer/src/email-viewer-utils.c b/viewer/src/email-viewer-utils.c index de1a945..474ad72 100755 --- a/viewer/src/email-viewer-utils.c +++ b/viewer/src/email-viewer-utils.c @@ -499,4 +499,129 @@ void _notify_mailbox_size(EmailViewerUGD *ug_data, char *size) ret = service_destroy(service); debug_log("service_destroy: %d", ret); } + +int viewer_get_filepath_from_path(char *default_path, char *origin_path, char *new_path, Eina_Bool get_new_path) +{ + debug_log(""); + RETURN_VAL_IF_FAIL(STR_VALID(origin_path), EMAIL_EXT_SAVE_ERR_UNKNOWN); + + int err = EMAIL_EXT_SAVE_ERR_NONE; + gchar tmp_path[MAX_PATH_LEN] = { 0, }; + gchar new_filename[MAX_PATH_LEN] = { 0, }; + gchar prefix[MAX_PATH_LEN] = { 0, }; + gint max_length = MAX_PATH_LEN; + + snprintf(prefix, sizeof(prefix), "%s", default_path); + + debug_log("prefix:%s", prefix); + + memset(new_path, 0, sizeof(MAX_PATH_LEN)); + memset(tmp_path, 0, sizeof(MAX_PATH_LEN)); + + if (STR_LEN(tmp_path) == 0) { + g_sprintf(tmp_path, "%s", origin_path); + } + + gchar *file_name = NULL; + gchar *file_ext = NULL; + gchar *file_path = email_parse_get_filepath_from_path(tmp_path); + email_parse_get_filename_n_ext_from_path(tmp_path, &file_name, &file_ext); + + debug_log("file_name:%s", file_name); + debug_log("file_ext:%s", file_ext); + + if (file_ext == NULL) + file_ext = ""; + + if (STR_VALID(file_name) && file_ext != NULL) { + debug_log(""); + int num = 1; + if (STR_LEN(file_name) + STR_LEN(file_ext) > max_length - STR_LEN(prefix)) { + gint available_len = max_length - STR_LEN(prefix); + + if (STR_VALID(file_ext)) { + available_len -= STR_LEN(file_ext); + } + + gchar *new_name = email_cut_text_by_byte_len(file_name, available_len); + + if (STR_VALID(new_name)) { + g_sprintf(new_path, "%s/%s%s", prefix, new_name, file_ext); + g_sprintf(new_filename, "%s%s", new_name, file_ext); + g_free(new_name); /* MUST BE. */ + } + } else { + g_sprintf(new_path, "%s/%s%s", prefix, file_name, file_ext); + } + + do { + if (access(new_path, F_OK) != -1) { + debug_log("file existed"); + if (get_new_path == EINA_TRUE) { + memset(new_path, 0, sizeof(MAX_PATH_LEN)); + gint available_len = max_length - STR_LEN(prefix); + if (STR_VALID(file_ext)) { + available_len -= STR_LEN(file_ext); + } + gchar *new_name = email_cut_text_by_byte_len(file_name, available_len); + g_sprintf(new_path, "%s/%s(%d)%s", prefix, new_name, num++, file_ext); + g_free(new_name); + err = EMAIL_EXT_SAVE_ERR_ALREADY_EXIST; + } else { + err = EMAIL_EXT_SAVE_ERR_ALREADY_EXIST; + break; + } + } else { + debug_log("file path is valid."); + break; + } + } while(1); + } + + if (STR_VALID(file_path)) { + g_free(file_path); /* MUST BE. */ + } + + if (STR_VALID(file_name)) { + g_free(file_name); /* MUST BE. */ + } + + if (STR_VALID(file_ext)) { + g_free(file_ext); /* MUST BE. */ + } + + debug_log("new_path:%s", new_path); + + return err; +} + +Eina_Bool viewer_save_file(const gchar *path, const gchar *buf, gsize len) +{ + debug_log("path (%s)", path); + + Eina_Bool success_flag = EINA_TRUE; + + if (STR_LEN((gchar *)buf) >= 0 && len >= 0) { + int fd = open(path, O_WRONLY | O_CREAT | O_TRUNC, S_IREAD | S_IWRITE); + if (fd != -1) { + ssize_t nwrite = write(fd, (const void *)buf, (size_t) len); + debug_log("nwrite(%d)", nwrite); + if (nwrite == -1) { + debug_log("fail to write"); + success_flag = EINA_FALSE; + close(fd); + } + close(fd); + } else { + debug_log("fail to open"); + success_flag = EINA_FALSE; + } + } else { + debug_log("check the buf!!"); + success_flag = EINA_FALSE; + } + + return success_flag; +} + /* EOF */ diff --git a/viewer/src/email-viewer-webview.c b/viewer/src/email-viewer-webview.c index a87a3e8..2ccf985 100755 --- a/viewer/src/email-viewer-webview.c +++ b/viewer/src/email-viewer-webview.c @@ -16,7 +16,7 @@ #include "email-viewer-webview.h" #include "email-viewer-js.h" - +#include "email-viewer-utils.h" #include "email-debug.h" #include "email-engine.h" #include "email-html-converter.h" @@ -32,13 +32,19 @@ static void _webview_load_progress_cb(void *data, Evas_Object *obj, void *event_ /* Double_Scroller */ static void _webview_edge_top_cb(void *data, Evas_Object *obj, void *event_info); static void _webview_edge_bottom_cb(void *data, Evas_Object *obj, void *event_info); -static void _webview_scroll_down_cb(void *data, Evas_Object *obj, void *event_info); static void _webview_scroll_up_cb(void *data, Evas_Object *obj, void *event_info); +static void _webview_scroll_down_cb(void *data, Evas_Object *obj, void *event_info); +static void _webview_mouse_down_cb(void *data, Evas * evas, Evas_Object *obj, void *event_info); +static void _webview_contextmenu_customize_cb(void *data, Evas_Object *webview, void *event_info); +static void _webview_contextmenu_selected_cb(void *data, Evas_Object *webview, void *event_info); static int _send_read_report_mail(EmailViewerUGD *ug_data); extern EmailViewerUGD *_g_ug_data; extern ui_gadget_h _g_mailbox_ug; +static int _g_pos_x; +static int _g_pos_y; + Evas_Object *viewer_get_webview(EmailViewerUGD *ug_data, gboolean has_html) { debug_log(""); @@ -59,8 +65,8 @@ Evas_Object *viewer_get_webview(EmailViewerUGD *ug_data, gboolean has_html) ewk_view_vertical_panning_hold_set(ug_data->webview, EINA_TRUE); evas_object_smart_callback_add(ug_data->webview, "edge,top", _webview_edge_top_cb, ug_data); evas_object_smart_callback_add(ug_data->webview, "edge,bottom", _webview_edge_bottom_cb, ug_data); - evas_object_smart_callback_add(ug_data->webview, "scroll,down", _webview_scroll_down_cb, ug_data); evas_object_smart_callback_add(ug_data->webview, "scroll,up", _webview_scroll_up_cb, ug_data); + evas_object_smart_callback_add(ug_data->webview, "scroll,down", _webview_scroll_down_cb, ug_data); /*evas_object_smart_callback_add(ug_data->webkit, "load,progress", _webview_progressed_cb, ug_data);*/ evas_object_smart_callback_add(ug_data->webview, "load,committed", _webview_load_committed_cb, ug_data); @@ -69,6 +75,11 @@ Evas_Object *viewer_get_webview(EmailViewerUGD *ug_data, gboolean has_html) evas_object_smart_callback_add(ug_data->webview, "load,progress", _webview_load_progress_cb, ug_data); evas_object_smart_callback_add(ug_data->webview, "load,error", _webview_load_error_cb, ug_data); + evas_object_smart_callback_add(ug_data->webview, "contextmenu,customize", _webview_contextmenu_customize_cb, ug_data); + evas_object_smart_callback_add(ug_data->webview, "contextmenu,selected", _webview_contextmenu_selected_cb, ug_data); + + evas_object_event_callback_add(ug_data->webview, EVAS_CALLBACK_MOUSE_DOWN, _webview_mouse_down_cb, ug_data); + evas_object_show(ug_data->webview); return ug_data->webview; @@ -299,9 +310,22 @@ static void _webview_load_finished_cb(void *data, Evas_Object *obj, void *event_ ewk_view_scale_range_get(ug_data->webview, &mins, &maxs); debug_log("mins : %f , maxs : %f", mins, maxs); + int send_read_report = 0; + email_account_t *account = NULL; + if (email_engine_get_account_full_data(ug_data->account_id, &account)) { + if (account) { + account_user_data_t *ud = (account_user_data_t*)account->user_data; + if (ud) { + debug_log("send_read_report: %d", ud->send_read_report); + send_read_report = ud->send_read_report; + } + email_free_account(&account, 1); + account = NULL; + } + } - debug_log("flags_seen_field:%d, request_report:%d, report_status:%d", ug_data->email_data->mail_info->flags_seen_field, ug_data->property->request_report, ug_data->email_data->mail_info->report_status & EMAIL_MAIL_REQUEST_MDN); - if (!ug_data->email_data->mail_info->flags_seen_field && ug_data->property->request_report == TRUE && (ug_data->email_data->mail_info->report_status & EMAIL_MAIL_REQUEST_MDN)) { + debug_log("flags_seen_field:%d, send_read_report:%d, request_report:%d, report_status:%d", ug_data->email_data->mail_info->flags_seen_field, send_read_report, ug_data->property->request_report, ug_data->email_data->mail_info->report_status & EMAIL_MAIL_REQUEST_MDN); + if (!ug_data->email_data->mail_info->flags_seen_field && send_read_report && ug_data->property->request_report == TRUE && (ug_data->email_data->mail_info->report_status & EMAIL_MAIL_REQUEST_MDN)) { int send_result = _send_read_report_mail(ug_data); debug_log("send_result (%d)", send_result); if (send_result != 1) { @@ -380,6 +404,16 @@ static void _webview_scroll_up_cb(void *data, Evas_Object *obj, void *event_info // debug_log(""); } +static void _webview_mouse_down_cb(void *data, Evas * evas, Evas_Object *obj, void *event_info) +{ + debug_log(""); + + Evas_Event_Mouse_Down *mouse_info = (Evas_Event_Mouse_Down *)event_info; + debug_log("output position: [%d, %d]", mouse_info->output.x, mouse_info->output.y); + _g_pos_x = mouse_info->output.x; + _g_pos_y = mouse_info->output.y; +} + static int _send_read_report_mail(EmailViewerUGD *ug_data) { debug_log(""); @@ -422,4 +456,165 @@ static void _measure_webview_xy(EmailViewerUGD *ug_data) } #endif +static void _webview_contextmenu_customize_cb(void *data, Evas_Object *obj, void *event_info) +{ + debug_log(""); + + int i = 0, count = 0; + Eina_Bool isText = EINA_TRUE, isImage = EINA_FALSE; + Ewk_Context_Menu* contextmenu = (Ewk_Context_Menu*)event_info; + Ewk_Context_Menu_Item* menu_item = NULL; + Ewk_Context_Menu_Item_Tag menu_item_tag = EWK_CONTEXT_MENU_ITEM_TAG_NO_ACTION; + + count = ewk_context_menu_item_count(contextmenu); + menu_item = ewk_context_menu_nth_item_get(contextmenu, 0); + menu_item_tag = ewk_context_menu_item_tag_get(menu_item); + debug_log("menu_item_tag : %d", menu_item_tag); + + switch (menu_item_tag) { + case EWK_CONTEXT_MENU_ITEM_TAG_SEARCH_WEB: // text selection + isText = EINA_TRUE; + break; + case EWK_CONTEXT_MENU_ITEM_TAG_OPEN_LINK: // image or link selection + isText = EINA_FALSE; + isImage = EINA_TRUE; + break; + default: + debug_log("No context menu"); + return; + } + + for (i = 0; i < count; i++) { + menu_item = ewk_context_menu_nth_item_get(contextmenu, 0); + menu_item_tag = ewk_context_menu_item_tag_get(menu_item); + debug_log("menu_item_tag in for: %d", menu_item_tag); + if (menu_item_tag == EWK_CONTEXT_MENU_ITEM_TAG_TEXT_SELECTION_MODE) { // It is not an image. + isImage = EINA_FALSE; + } + ewk_context_menu_item_remove(contextmenu, menu_item); + } + + if (isText == EINA_TRUE) { + ewk_context_menu_item_append_as_action(contextmenu, EWK_CONTEXT_MENU_ITEM_TAG_COPY, _("IDS_EMAIL_OPT_COPY"), EINA_TRUE); +// ewk_context_menu_item_append_as_action(contextmenu, EWK_CONTEXT_MENU_ITEM_BASE_APPLICATION_TAG + 4, _("IDS_EMAIL_OPT_SHARE"), EINA_TRUE); + ewk_context_menu_item_append(contextmenu, EWK_CONTEXT_MENU_ITEM_BASE_APPLICATION_TAG, NULL, IMGDIR"/icon_search.png", EINA_TRUE); + } else { + if (isImage == EINA_TRUE) { + ewk_context_menu_item_append_as_action(contextmenu, EWK_CONTEXT_MENU_ITEM_TAG_COPY_IMAGE_TO_CLIPBOARD, _("IDS_EMAIL_OPT_COPY_IMAGE"), EINA_TRUE); + ewk_context_menu_item_append_as_action(contextmenu, EWK_CONTEXT_MENU_ITEM_BASE_APPLICATION_TAG + 1, _("IDS_EMAIL_OPT_SAVE_IMAGE"), EINA_TRUE); + ewk_context_menu_item_append_as_action(contextmenu, EWK_CONTEXT_MENU_ITEM_BASE_APPLICATION_TAG + 2, _("IDS_EMAIL_OPT_VIEW_IMAGE"), EINA_TRUE); + } + } +} + +static void _webview_contextmenu_selected_cb(void *data, Evas_Object *webview, void *event_info) +{ + debug_log(""); + + EmailViewerUGD *ug_data = (EmailViewerUGD *)data; + + Ewk_Context_Menu_Item* menu_item = (Ewk_Context_Menu_Item*)event_info; + Ewk_Context_Menu_Item_Tag menu_item_tag = EWK_CONTEXT_MENU_ITEM_TAG_NO_ACTION; + + int img_buf_len = 0; + gchar *img_buf = NULL; + char *img_url = NULL; + Ewk_Hit_Test *ewk_hit_test = NULL; + gchar new_path[MAX_PATH_LEN] = { 0, }; + + debug_log("menu_item : %d", menu_item); + menu_item_tag = ewk_context_menu_item_tag_get(menu_item); + debug_log("menu_item_tag : %d", menu_item_tag); + + img_url = (char *)ewk_context_menu_item_image_url_get(menu_item); + debug_log("View image : img_url(%s)", img_url); + + if (img_url != NULL) { + ewk_hit_test = ewk_view_hit_test_new(ug_data->webview, _g_pos_x, _g_pos_y, EWK_HIT_TEST_RESULT_CONTEXT_IMAGE); + + if (ewk_hit_test != NULL) { + char *ext = NULL; + img_buf = ewk_hit_test_image_buffer_get(ewk_hit_test); + img_buf_len = ewk_hit_test_image_buffer_length_get(ewk_hit_test); + debug_log("View image : img_buf_len(%d)", img_buf_len); + ext = (char *)ewk_hit_test_image_file_name_extension_get(ewk_hit_test); + debug_log("View image : ext(%s)", ext); + } + } + + switch (menu_item_tag) { + case EWK_CONTEXT_MENU_ITEM_BASE_APPLICATION_TAG : //Smart search + { + service_h service = NULL; + const char *keyword = NULL; + keyword = ewk_view_text_selection_text_get(ug_data->webview); + debug_log("keyword : %s", keyword); + + service_create(&service); + service_set_operation(service, SERVICE_OPERATION_SEARCH); + service_add_extra_data(service, "http://tizen.org/appcontrol/data/keyword", keyword); + service_send_launch_request(service, NULL, NULL); + service_destroy(service); + } + break; + + case EWK_CONTEXT_MENU_ITEM_BASE_APPLICATION_TAG + 1 : //Save image + { + if (viewer_get_filepath_from_path(DIR_DEFAULT_MEDIA_PHONE"/Images", img_url, new_path, EINA_TRUE) != EMAIL_EXT_SAVE_ERR_NONE) { + debug_log("file exist!"); + } + + if (viewer_save_file(new_path, img_buf, img_buf_len) == EINA_FALSE) { + debug_log("viewer_save_file error!"); + } else { + char str[128] = { 0, }; + snprintf(str, sizeof(str), "%s", dgettext("sys_string", "IDS_COM_POP_SAVED")); + int ret = status_message_post(str); + if (ret) + debug_log("status_message_post failed: %d", ret); + } + } + break; + + case EWK_CONTEXT_MENU_ITEM_BASE_APPLICATION_TAG + 2 : // View image + { + if (viewer_get_filepath_from_path(EMAIL_VIEWER_TMP_FOLDER, img_url, new_path, EINA_FALSE) == EMAIL_EXT_SAVE_ERR_NONE) { + debug_log("file existed!"); + } + if (viewer_save_file(new_path, img_buf, img_buf_len) == EINA_FALSE) { + debug_log("viewer_save_file error!"); + } + + int ret; + service_h service = NULL; + ret = service_create(&service); + debug_log("service_create: %d", ret); + if (!service) { + debug_log("service create failed"); + return; + } + ret = service_set_operation(service, SERVICE_OPERATION_VIEW); + debug_log("service_set_operation: %d", ret); + ret = service_set_uri(service, new_path); + debug_log("service_set_uri: %d", ret); + ret = service_add_extra_data(service, EMAIL_BUNDLE_KEY_VIDEO_PLAYER_LAUNCH_APP, "email"); + debug_log("service_add_extra_data: %d", ret); + ret = service_send_launch_request(service, NULL, NULL); + debug_log("service_send_launch_request: %d", ret); + ret = service_destroy(service); + debug_log("service_destroy: %d", ret); + } + break; + + default: + debug_log("Never here!"); + } + + if (ewk_hit_test != NULL) { + ewk_hit_test_free(ewk_hit_test); + ewk_hit_test = NULL; + } +} + + /* EOF */ diff --git a/viewer/src/email-viewer.c b/viewer/src/email-viewer.c index 9d9a860..fd34eda 100755 --- a/viewer/src/email-viewer.c +++ b/viewer/src/email-viewer.c @@ -137,6 +137,8 @@ static void _mbe_selected_cb(void *data, Evas_Object *obj, void *event_info); static void _destroy_down_progress_cb(void *data, Evas_Object *obj, void *event_info); /* Logic Functions */ +static int _viewer_create_temp_folder(); +static void _viewer_remove_temp_folder(); static void _init_viewer_data(int account_id, int mail_id, char *srv_mail_id, EmailViewerUGD *ug_data); static int _init_webview_data(EmailViewerUGD *ug_data); static Eina_Bool _check_body_download(void *data); @@ -528,13 +530,14 @@ static void on_destroy(ui_gadget_h ug, service_h data, void *pd) ug_data->base = NULL; + _viewer_remove_temp_folder(); + _dbus_receiver_remove(NULL); int ret = e_dbus_shutdown(); debug_log("ret: %d", ret); email_engine_finalize(); - debug_log("~"); } @@ -1427,6 +1430,8 @@ void _hide_view(EmailViewerUGD *ug_data) ewk_view_uri_set(ug_data->webview, EMAIL_DEFAULT_HTML); + _viewer_remove_temp_folder(); + debug_log("free address info list"); email_free_address_info_list(&(priv->addrs_info_list)); ug_data->from_list = NULL; @@ -2087,7 +2092,7 @@ static Evas_Object *_create_body(EmailViewerUGD *ug_data) static Evas_Object *_create_tab_bar(EmailViewerUGD *ug_data) { - debug_log(""); + debug_log("mailbox_type:%d", ug_data->mailbox_type); EmailViewerProp *prop = ug_data->property; Evas_Object *obj; @@ -2100,10 +2105,11 @@ static Evas_Object *_create_tab_bar(EmailViewerUGD *ug_data) int n_to_list = g_list_length(ug_data->to_list); int n_cc_list = g_list_length(ug_data->cc_list); debug_log("to:%d, cc:%d", n_to_list, n_cc_list); - if (n_to_list + n_cc_list >= 2) + if (n_to_list + n_cc_list >= 2) { ug_data->reply_ctr_it = elm_toolbar_item_append(obj, ICON_REPLY, dgettext("sys_string", "IDS_COM_SK_REPLY"), _reply_option_cb, ug_data); - else + } else { ug_data->reply_ctr_it = elm_toolbar_item_append(obj, ICON_REPLY, dgettext("sys_string", "IDS_COM_SK_REPLY"), _reply_cb, ug_data); + } ug_data->forward_ctr_it = elm_toolbar_item_append(obj, ICON_FORWARD, dgettext("sys_string", "IDS_COM_BODY_FORWARD"), _forward_cb, ug_data); ug_data->del_ctr_it = elm_toolbar_item_append(obj, ICON_DELETE, dgettext("sys_string", "IDS_COM_SK_DELETE"), _delete_cb, ug_data); ug_data->more_ctr_it = elm_toolbar_item_append(obj, ICON_CONTROLBAR_MORE, dgettext("sys_string", "IDS_COM_SK_MORE"), _more_cb, ug_data); @@ -2131,7 +2137,7 @@ static Evas_Object *_create_tab_bar(EmailViewerUGD *ug_data) static Evas_Object *_update_tab_bar(EmailViewerUGD *ug_data) { - debug_log(""); + debug_log("mailbox_type:%d", ug_data->mailbox_type); if (ug_data->mailbox_type == EMAIL_MAILBOX_TYPE_INBOX || ug_data->mailbox_type == EMAIL_MAILBOX_TYPE_SENTBOX || ug_data->mailbox_type == EMAIL_MAILBOX_TYPE_TRASH || ug_data->mailbox_type == EMAIL_MAILBOX_TYPE_SPAMBOX) { @@ -2528,6 +2534,7 @@ static void _create_more_ctxpopup(EmailViewerUGD *ug_data) elm_ctxpopup_item_append(ug_data->con_popup, dgettext("sys_string", "IDS_COM_BODY_MOVE"), NULL, _move_cb, ug_data); elm_ctxpopup_item_append(ug_data->con_popup, _("IDS_EMAIL_OPT_SAVE_EMAIL_ABB"), NULL, _save_email_cb, ug_data); + ug_data->create_contact_arg = CONTACTUI_REQ_ADD_EMAIL; elm_ctxpopup_item_append(ug_data->con_popup, dgettext("sys_string", "IDS_COM_OPT_ADD_TO_CONTACTS"), NULL, _ctxpopup_add_contact_cb, prop->sender); ug_data->more_ctx_block_item = elm_ctxpopup_item_append(ug_data->con_popup, _("IDS_EMAIL_OPT_BLOCK"), NULL, _ctxpopup_add_block_rule_cb, prop->sender); } @@ -2561,7 +2568,7 @@ static void _create_more_ctxpopup(EmailViewerUGD *ug_data) // evas_object_move(ug_data->con_popup, x, y - 20); evas_object_geometry_get(ug_data->ctr_bar, &x, &y, &w, &h); debug_log("x:%d, y:%d, w:%d, h:%d, mx:%d", x, y, w, h, ((w - x) * 6) / 7); - evas_object_move(ug_data->con_popup, ((w - x) * 6) / 7 , y); + evas_object_move(ug_data->con_popup, ((w - x) * 6) / 7, y); evas_object_show(ug_data->con_popup); } @@ -2587,9 +2594,9 @@ static void _create_reply_ctxpopup(EmailViewerUGD *ug_data) elm_ctxpopup_item_append(ug_data->con_popup, _("IDS_EMAIL_OPT_TO_SENDER_ABB"), NULL, _reply_cb, ug_data); elm_ctxpopup_item_append(ug_data->con_popup, _("IDS_EMAIL_OPT_TO_ALL_ABB"), NULL, _reply_all_cb, ug_data); - Evas_Coord x, y; - evas_pointer_canvas_xy_get(ug_data->evas, &x, &y); - evas_object_move(ug_data->con_popup, x, y - 20); + Evas_Coord x, y, w, h; + evas_object_geometry_get(ug_data->reply_ctr_it, &x, &y, &w, &h); + evas_object_move(ug_data->con_popup, x + (w / 2), y); evas_object_show(ug_data->con_popup); } @@ -3749,7 +3756,7 @@ static void _ctxpopup_send_email_cb(void *data, Evas_Object *obj, void *event_in static void _ctxpopup_add_contact_cb(void *data, Evas_Object *obj, void *event_info) { - debug_log(""); + debug_log("data(%s)", data); if (!data || !_g_ug_data) { debug_log("data is NULL"); return; @@ -4245,6 +4252,7 @@ static void _mbe_selected_cb(void *data, Evas_Object *obj, void *event_info) ug_data->ctx_block_item = elm_ctxpopup_item_append(ug_data->con_popup, _("IDS_EMAIL_OPT_BLOCK"), NULL, _ctxpopup_add_block_rule_cb, addrs_info->address); _delete_contacts_list(contact_list_item); } else { + ug_data->create_contact_arg = CONTACTUI_REQ_ADD_EMAIL; elm_ctxpopup_item_append(ug_data->con_popup, dgettext("sys_string", "IDS_COM_OPT_ADD_TO_CONTACTS"), NULL, _ctxpopup_add_contact_cb, addrs_info->address); elm_ctxpopup_item_append(ug_data->con_popup, _("IDS_EMAIL_OPT_SEND_EMAIL"), NULL, _ctxpopup_send_email_cb, addrs_info->address); ug_data->ctx_block_item = elm_ctxpopup_item_append(ug_data->con_popup, _("IDS_EMAIL_OPT_BLOCK"), NULL, _ctxpopup_add_block_rule_cb, addrs_info->address); @@ -4316,6 +4324,47 @@ static void _destroy_down_progress_cb(void *data, Evas_Object *obj, void *event_ } } +static int _viewer_create_temp_folder() +{ + debug_log(""); + + if (!email_check_dir_exist(EMAIL_VIEWER_TMP_FOLDER)) { + int nErr = -1; + nErr = mkdir(EMAIL_VIEWER_TMP_FOLDER, 0755); + debug_log("errno: %d", nErr); + if (nErr == -1) { + debug_log("Email viewer temp folder creation failed"); + return -1; + } + } else + debug_log("Email viewer temp folder already exists."); + return 0; +} + +static void _viewer_remove_temp_folder() +{ + debug_log(""); + + struct dirent *dir_entry = NULL; + DIR *dir; + char buffer[256]; + + dir = opendir(EMAIL_VIEWER_TMP_FOLDER); + if (!dir) { + debug_log("Unable to open %s", EMAIL_VIEWER_TMP_FOLDER); + return; + } + while ((dir_entry = readdir(dir))) { + debug_log("%s", dir_entry->d_name); + if (g_strcmp0(".", dir_entry->d_name) == 0 || g_strcmp0("..", dir_entry->d_name) == 0) + continue; + snprintf(buffer, 256, "%s/%s", EMAIL_VIEWER_TMP_FOLDER, dir_entry->d_name); + remove(buffer); + } + closedir(dir); + rmdir(EMAIL_VIEWER_TMP_FOLDER); +} + static void _init_viewer_data(int account_id, int mail_id, char *srv_mail_id, EmailViewerUGD *ug_data) { debug_log(""); @@ -4396,6 +4445,9 @@ static void _init_viewer_data(int account_id, int mail_id, char *srv_mail_id, Em } ug_data->option_header_opened = 0; + + if (_viewer_create_temp_folder() < 0) + debug_log("creating email viewer temp folder is failed"); } static int _init_webview_data(EmailViewerUGD *ug_data) @@ -5516,7 +5568,7 @@ static char *_get_service_fail_type(int type) ret = _("IDS_EMAIL_POP_DOWNLOADING_ATTACHMENTS_ON_THE_MOBILE_DEVICE_IS_NOT_ALLOWED_BY_EXCHANGE_SERVER_POLICY"); return g_strdup(ret); } else { - snprintf(str, sizeof(str), "%s (%d)", dgettext("sys_string", "IDS_COM_POP_INTERNAL_ERROR"), type); + snprintf(str, sizeof(str), "%s (%d)", dgettext("sys_string", "IDS_COM_POP_UNKNOWN_ERROR_OCCURRED"), type); return g_strdup(str); } } -- 2.7.4