summaryrefslogtreecommitdiff
path: root/mailbox/src/email-mailbox-sweep.c
diff options
context:
space:
mode:
Diffstat (limited to 'mailbox/src/email-mailbox-sweep.c')
-rwxr-xr-xmailbox/src/email-mailbox-sweep.c417
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;
+
+}
+
+