diff options
Diffstat (limited to 'mailbox/src/email-mailbox-sweep.c')
-rwxr-xr-x | mailbox/src/email-mailbox-sweep.c | 417 |
1 files changed, 417 insertions, 0 deletions
diff --git a/mailbox/src/email-mailbox-sweep.c b/mailbox/src/email-mailbox-sweep.c new file mode 100755 index 0000000..045fbd6 --- /dev/null +++ b/mailbox/src/email-mailbox-sweep.c @@ -0,0 +1,417 @@ +/* + * Copyright 2012 Samsung Electronics Co., Ltd + * + * Licensed under the Flora License, Version 1.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.tizenopensource.org/license + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "email-mailbox.h" +#include "email-mailbox-sweep.h" +#include "email-mailbox-item.h" + + +extern Eina_List *edit_list; + + +static void _sweep_move_cb(void *data, Evas_Object *obj, void *event_info); +static void _sweep_delete_cb(void *data, Evas_Object *obj, void *event_info); +static void _sweep_reply_cb(void *data, Evas_Object *obj, void *event_info); +static void _sweep_forward_cb(void *data, Evas_Object *obj, void *event_info); +static void _sweep_mark_as_read_unread_cb(void *data, Evas_Object *obj, void *event_info); +static void _popup_response_cb(void *data, Evas_Object *obj, void *event_info); +static void _popup_response_sweep_delete_ok_cb(void *data, Evas_Object *obj, void *event_info); + +Evas_Object* _create_sweep_delete_button(Evas_Object* parent,list_data* ld) +{ + + Evas_Object *button = elm_button_add(parent); + elm_object_style_set(button, "sweep/delete"); + + if(ld->thread_count > 1 && ld->mailbox_ugd->b_thread_list) { + elm_object_text_set(button, dgettext("sys_string", "IDS_COM_BODY_DELETE_ALL")); + } + else{ + elm_object_text_set(button, dgettext("sys_string", "IDS_COM_SK_DELETE")); + } + + evas_object_smart_callback_add(button, "clicked", _sweep_delete_cb, ld); + + if (ld != NULL && (ld->is_sending_now == EMAIL_MAIL_STATUS_SENDING || ld->is_sending_now == EMAIL_MAIL_STATUS_SEND_WAIT)) + elm_object_disabled_set(button,EINA_TRUE); + + return button; + +} + +Evas_Object* _create_sweep_read_unread_button(Evas_Object* parent,list_data* ld) +{ + + Evas_Object *button = elm_button_add(parent); + elm_object_style_set(button, "sweep/multiline"); + if (ld->is_seen == false) + elm_object_text_set(button, _("IDS_EMAIL_OPT_MARK_AS_READ")); + else + elm_object_text_set(button, _("IDS_EMAIL_OPT_MARK_AS_UNREAD")); + + evas_object_smart_callback_add(button, "clicked", _sweep_mark_as_read_unread_cb, ld); + + if ((ld != NULL && (ld->is_sending_now == EMAIL_MAIL_STATUS_SENDING || ld->is_sending_now == EMAIL_MAIL_STATUS_SEND_WAIT)) + || (ld->thread_count > 1 && ld->mailbox_ugd->b_thread_list)) + { + elm_object_disabled_set(button,EINA_TRUE); + } + + return button; +} + +Evas_Object* _create_sweep_move_button(Evas_Object* parent,list_data* ld) +{ + + Evas_Object *button = elm_button_add(parent); + elm_object_style_set(button, "sweep/multiline"); + elm_object_text_set(button, dgettext("sys_string", "IDS_COM_BODY_MOVE")); + evas_object_smart_callback_add(button, "clicked", _sweep_move_cb, ld); + + if (ld != NULL && (ld->is_sending_now == EMAIL_MAIL_STATUS_SENDING || ld->is_sending_now == EMAIL_MAIL_STATUS_SEND_WAIT)) + elm_object_disabled_set(button,EINA_TRUE); + + return button; +} + +Evas_Object* _create_sweep_reply_button(Evas_Object* parent,list_data* ld) +{ + + Evas_Object *button = elm_button_add(parent); + elm_object_style_set(button, "sweep/multiline"); + elm_object_text_set(button, dgettext("sys_string", "IDS_COM_SK_REPLY")); + evas_object_smart_callback_add(button, "clicked", _sweep_reply_cb, ld); + + if (ld != NULL && (ld->is_sending_now == EMAIL_MAIL_STATUS_SENDING || ld->is_sending_now == EMAIL_MAIL_STATUS_SEND_WAIT)) + elm_object_disabled_set(button,EINA_TRUE); + + return button; + +} + +Evas_Object* _create_sweep_forward_button(Evas_Object* parent,list_data* ld) +{ + + Evas_Object *button = elm_button_add(parent); + elm_object_style_set(button, "sweep/multiline"); + elm_object_text_set(button, dgettext("sys_string", "IDS_COM_BODY_FORWARD")); + evas_object_smart_callback_add(button, "clicked", _sweep_forward_cb, ld); + + if (ld != NULL && (ld->is_sending_now == EMAIL_MAIL_STATUS_SENDING || ld->is_sending_now == EMAIL_MAIL_STATUS_SEND_WAIT)) + elm_object_disabled_set(button,EINA_TRUE); + + return button; + +} + +static void _sweep_move_cb(void *data, Evas_Object *obj, void *event_info) +{ + debug_enter(); + + if (!data) { + debug_log("data is NULL"); + return; + } + + list_data *ld = (list_data *)data; + int prev_view = ld->mailbox_ugd->previous_view; + ld->mailbox_ugd->previous_view = ld->mailbox_ugd->view_type; + + if(edit_list) { + debug_warning("edit_list is not released in previous use"); + edit_list = eina_list_free(edit_list); + } + edit_list = eina_list_append(edit_list, ld); + mailbox_process_move_mail(ld->mailbox_ugd); + edit_list = eina_list_free(edit_list); + + ld->mailbox_ugd->previous_view = prev_view; +} + +static void _sweep_delete_cb(void *data, Evas_Object *obj, void *event_info) +{ + debug_log(""); + if (data == NULL) { + debug_log("data == NULL"); + return; + } + list_data *ld = (list_data *)data; + EmailMailboxUGD *mailbox_ugd = (EmailMailboxUGD *)(ld->mailbox_ugd); + debug_log("ld->thread_id: %d, ld->account_id: %d", ld->thread_id, ld->account_id); + debug_log("ld->mail_id: %d", ld->mail_id); + debug_log("mailbox_ugd->mailbox_id: %d", mailbox_ugd->mailbox_id); + + if (mailbox_ugd->delete_popup) { + evas_object_del(mailbox_ugd->delete_popup); + mailbox_ugd->delete_popup = NULL; + } + + Evas_Object *notify = elm_popup_add(mailbox_ugd->win_main); + evas_object_size_hint_weight_set(notify, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_object_text_set(notify, dgettext("sys_string", "IDS_COM_POP_DELETE_Q")); + mailbox_ugd->delete_popup = notify; + + Evas_Object *btn1 = elm_button_add(notify); + elm_object_style_set(btn1, "popup_button/default"); + elm_object_text_set(btn1, dgettext("sys_string", "IDS_COM_SK_DELETE")); + elm_object_part_content_set(notify, "button1", btn1); + evas_object_smart_callback_add(btn1, "clicked", _popup_response_sweep_delete_ok_cb, data); + + Evas_Object *btn2 = elm_button_add(notify); + elm_object_style_set(btn2, "popup_button/default"); + elm_object_text_set(btn2, dgettext("sys_string", "IDS_COM_SK_CANCEL")); + elm_object_part_content_set(notify, "button2", btn2); + evas_object_smart_callback_add(btn2, "clicked", _popup_response_cb, mailbox_ugd); + + evas_object_show(notify); +} + +static void _popup_response_cb(void *data, Evas_Object *obj, void *event_info) +{ + debug_log(""); + + if (!data) { + debug_log("data is NULL"); + return; + } + + EmailMailboxUGD *mailbox_ugd = (EmailMailboxUGD *)data; + + if (mailbox_ugd->delete_popup) { + evas_object_del(mailbox_ugd->delete_popup); + mailbox_ugd->delete_popup = NULL; + } +} + +static void _sweep_reply_cb(void *data, Evas_Object *obj, void *event_info) +{ + debug_log(""); + if (!data) { + debug_log("data is NULL"); + return; + } + list_data *ld = (list_data *)data; +// EmailMailboxUGD *mailbox_ugd = (EmailMailboxUGD *)(ld->mailbox_ugd); + + debug_log("mailbox_ugd->account_id: %d", ld->account_id); + debug_log("ld->mail_id: %d", ld->mail_id); + + email_mailbox_t *mbox = NULL; + int e = email_get_mailbox_by_mailbox_id(ld->mailbox_id, &mbox); + if (e != EMAIL_ERROR_NONE) { + debug_log("email_get_mailbox_by_mailbox_id mailbox_id(%d)- err[%d]", ld->mailbox_id, e); + goto CLEANUP; + } + + if (ld->mailbox_ugd->ug_composer) { + debug_log("Composer UG is already launched"); + goto CLEANUP; + } + + service_h service; + if (SERVICE_ERROR_NONE != service_create(&service)) + { + debug_log("creating service handle failed"); + goto CLEANUP; + } + + char cmd[30] = { 0, }; + snprintf(cmd, sizeof(cmd), "%d", RUN_COMPOSER_REPLY); + + char mailid[30] = { 0, }; + snprintf(mailid, sizeof(mailid), "%d", ld->mail_id); + char acctid[30] = { 0, }; + snprintf(acctid, sizeof(acctid), "%d", ld->account_id); + char mailboxid[30] = { 0, }; + snprintf(mailboxid, sizeof(mailboxid), "%d", ld->mailbox_id); + service_add_extra_data(service, EMAIL_BUNDLE_KEY_RUN_TYPE, cmd); + service_add_extra_data(service, EMAIL_BUNDLE_KEY_ACCOUNT_ID, acctid); + service_add_extra_data(service, EMAIL_BUNDLE_KEY_MAILBOX, mailboxid); + service_add_extra_data(service, EMAIL_BUNDLE_KEY_MAIL_ID, mailid); + + ld->mailbox_ugd->ug_composer = create_composer_ug(UG_NAME_EMAIL_COMPOSER, service, ld->mailbox_ugd); + service_destroy(service); + +CLEANUP: + email_free_mailbox(&mbox, 1); + +} + +static void _sweep_forward_cb(void *data, Evas_Object *obj, void *event_info) +{ + debug_log(""); + if (!data) { + debug_log("data is NULL"); + return; + } + list_data *ld = (list_data *)data; +// EmailMailboxUGD *mailbox_ugd = (EmailMailboxUGD *)(ld->mailbox_ugd); + + debug_log("mailbox_ugd->account_id: %d", ld->account_id); + debug_log("ld->mail_id: %d", ld->mail_id); + + email_mailbox_t *mbox = NULL; + int e = email_get_mailbox_by_mailbox_id(ld->mailbox_id, &mbox); + if (e != EMAIL_ERROR_NONE) { + debug_log("email_get_mailbox_by_mailbox_id mailbox_id(%d)- err[%d]", ld->mailbox_id, e); + goto CLEANUP; + } + + if (ld->mailbox_ugd->ug_composer) { + debug_log("Composer UG is already launched"); + goto CLEANUP; + } + + service_h service; + if (SERVICE_ERROR_NONE != service_create(&service)) + { + debug_log("creating service handle failed"); + goto CLEANUP; + } + + char cmd[30] = { 0, }; + snprintf(cmd, sizeof(cmd), "%d", RUN_COMPOSER_FORWARD); + + char mailid[30] = { 0, }; + snprintf(mailid, sizeof(mailid), "%d", ld->mail_id); + char acctid[30] = { 0, }; + snprintf(acctid, sizeof(acctid), "%d", ld->account_id); + char mailboxid[30] = { 0, }; + snprintf(mailboxid, sizeof(mailboxid), "%d", ld->mailbox_id); + service_add_extra_data(service, EMAIL_BUNDLE_KEY_RUN_TYPE, cmd); + service_add_extra_data(service, EMAIL_BUNDLE_KEY_ACCOUNT_ID, acctid); + service_add_extra_data(service, EMAIL_BUNDLE_KEY_MAILBOX, mailboxid); + service_add_extra_data(service, EMAIL_BUNDLE_KEY_MAIL_ID, mailid); + + ld->mailbox_ugd->ug_composer = create_composer_ug(UG_NAME_EMAIL_COMPOSER, service, ld->mailbox_ugd); + service_destroy(service); + +CLEANUP: + email_free_mailbox(&mbox, 1); + +} + +static void _sweep_mark_as_read_unread_cb(void *data, Evas_Object *obj, void *event_info) +{ + debug_log(""); + + if (!data) { + debug_log("data is NULL"); + return; + } + + list_data *ld = (list_data *)data; + EmailMailboxUGD *mailbox_ugd = (EmailMailboxUGD *)(ld->mailbox_ugd); + + debug_log("mailbox_ugd->account_id: %d", ld->account_id); + debug_log("mailbox_ugd->mailbox_id: %d", mailbox_ugd->mailbox_id); + debug_log("ld->mail_id: %d", ld->mail_id); + debug_log("mailbox_ugd->previous_view: %d", mailbox_ugd->previous_view); + debug_log("current view: %d, thread_list: %d", mailbox_ugd->view_type, mailbox_ugd->b_thread_list); + debug_log("thread id: %d", ld->thread_id); + debug_log("mode: %d", mailbox_ugd->mode); + + /* Finish genlist sweep */ + elm_genlist_item_decorate_mode_set(ld->item, "slide", EINA_FALSE); + elm_genlist_item_select_mode_set(ld->item, ELM_OBJECT_SELECT_MODE_DEFAULT); + + int seen_flag = (ld->is_seen == false)? 1/* make it read */ : 0/* make it unread */; + debug_log("updated seen_flag(%d)", seen_flag); + ld->is_seen = seen_flag; + elm_genlist_item_update(ld->item); + + if ( mailbox_ugd->view_type == EMAIL_VIEW_DATE && + mailbox_ugd->b_thread_list == true) { + + int *mail_id_list = NULL; + email_mail_list_item_t *mail_list = NULL; + int count = 0; + int err = email_get_mail_list(ld->account_id, 0, ld->thread_id, + -1, /* start_index */ + -1, /* limit_count */ + _mailbox_conv_sort_type(mailbox_ugd->sort_type), + &mail_list, &count); + if ( err != EMAIL_ERROR_NONE || !mail_list ) { + debug_warning("email_get_mail_list_ex - err(%d) or mailbox_data NULL(%p)", + err, mail_list); + goto CLEANUP; + } + + mail_id_list = MEM_ALLOC(mail_id_list, count); + if(!mail_id_list) return; + int i = 0; + for (i = 0; i < count; ++i) + mail_id_list[i] = mail_list[i].mail_id; + + err = email_set_flags_field(ld->account_id, mail_id_list, count, EMAIL_FLAGS_SEEN_FIELD, seen_flag, 1); + if (err != EMAIL_ERROR_NONE) + debug_log("email_set_flags_field - err(%d)", err); + +CLEANUP: + FREE(mail_list); + FREE(mail_id_list); + } + else { + /* For all other views where mail list is present but threaded mail list is not present */ + int err = email_set_flags_field(ld->account_id, &(ld->mail_id), 1, EMAIL_FLAGS_SEEN_FIELD, seen_flag, 1); + if (err != EMAIL_ERROR_NONE) + debug_log("email_set_flags_field - err(%d)", err); + } +} + + + +static void _popup_response_sweep_delete_ok_cb(void *data, Evas_Object *obj, void *event_info) +{ + debug_log(""); + if (!data) { + debug_log("data is NULL"); + return; + } + list_data *ld = (list_data *)data; + EmailMailboxUGD *mailbox_ugd = (EmailMailboxUGD *)(ld->mailbox_ugd); + debug_log("ld->thread_id: %d, ld->account_id: %d", ld->thread_id, ld->account_id); + debug_log("ld->mail_id: %d", ld->mail_id); + debug_log("mailbox_ugd->previous_view: %d", mailbox_ugd->previous_view); + + if (mailbox_ugd->delete_popup) { + evas_object_del(mailbox_ugd->delete_popup); + mailbox_ugd->delete_popup = NULL; + } + + int prev_view = ld->mailbox_ugd->previous_view; + ld->mailbox_ugd->previous_view = ld->mailbox_ugd->view_type; + + if(edit_list) { + debug_warning("edit_list is not released in previous use"); + edit_list = eina_list_free(edit_list); + } + edit_list = eina_list_append(edit_list, ld); + + edit_req_t *req = MEM_ALLOC(req, 1); + if(!req){ + debug_warning("edit_req_t alloc failed"); + return; + } + req->previous_view = ld->mailbox_ugd->previous_view; + req->mailbox_ugd = ld->mailbox_ugd; + + ecore_thread_feedback_run(mailbox_process_delete_mail, NULL, NULL, NULL, req, EINA_TRUE); + ld->mailbox_ugd->previous_view = prev_view; + +} + + |