From 71844a58e732ce3b948589812fe3e761782dd896 Mon Sep 17 00:00:00 2001 From: Soonmin Jung Date: Wed, 6 Feb 2013 17:29:19 +0900 Subject: [PATCH] Delete draft messages before saving draft message Change-Id: I1ea0c6721a64c5b65068378de7f445e8c05f2e53 --- composer/include/msg-ui-composer-message.h | 2 + composer/src/message/msg-ui-composer-message.c | 72 +++++++++++++++++++++++++ composer/src/ui-composer/msg-ui-composer-main.c | 71 +++++++++++++++++------- 3 files changed, 126 insertions(+), 19 deletions(-) diff --git a/composer/include/msg-ui-composer-message.h b/composer/include/msg-ui-composer-message.h index e86aabe..39124b0 100755 --- a/composer/include/msg-ui-composer-message.h +++ b/composer/include/msg-ui-composer-message.h @@ -87,6 +87,8 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_message_mms_set_media(const char *file_pa COMPOSER_RETURN_TYPE_E msg_ui_composer_message_mms_set_page_duration(int nPage, int duration); /* save send*/ +COMPOSER_RETURN_TYPE_E msg_ui_composer_get_thread_id_by_address(msg_handle_t msg_handle, GSList *addr_list, msg_thread_id_t *tid); +COMPOSER_RETURN_TYPE_E msg_ui_composer_delete_draft_message(msg_handle_t msg_handle, msg_thread_id_t tid); COMPOSER_RETURN_TYPE_E msg_ui_composer_save_message(msg_handle_t msg_handle, int msg_id); COMPOSER_RETURN_TYPE_E msg_ui_composer_get_message_data(MSG_COMPOSER_VIEW_DATA_S *cd); diff --git a/composer/src/message/msg-ui-composer-message.c b/composer/src/message/msg-ui-composer-message.c index 6b66a7c..6ff0267 100755 --- a/composer/src/message/msg-ui-composer-message.c +++ b/composer/src/message/msg-ui-composer-message.c @@ -835,6 +835,78 @@ COMPOSER_RETURN_TYPE_E msg_ui_composer_message_make_and_send(msg_handle_t msg_ha return ret; } +COMPOSER_RETURN_TYPE_E msg_ui_composer_get_thread_id_by_address(msg_handle_t msg_handle, GSList *address_list, msg_thread_id_t *tid) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + if (address_list == NULL || tid == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "param is NULL"); + return COMPOSER_RETURN_FAIL; + } + + COMPOSER_RETURN_TYPE_E ret = COMPOSER_RETURN_SUCCESS; + int count = g_slist_length(address_list); + int i = 0; + msg_struct_list_s *addr_list = NULL; + msg_struct_t msgInfo = msg_create_struct(MSG_STRUCT_MESSAGE_INFO); + + if (msgInfo) { + msg_get_list_handle(msgInfo, MSG_MESSAGE_ADDR_LIST_STRUCT, (void**)&addr_list); + + addr_list->nCount = count; + for (i = 0; i < count; i++) { + char *address = (char *)g_slist_nth_data(address_list, i); + if (address == NULL) { + MSG_UI_DEBUG(MSG_UI_LEVEL_DEBUG, "address is NULL, skip"); + continue; + } + + int addr_type = get_address_type((const char*)address); + if (addr_type == COMPOSER_UTIL_ADDRTYPE_NUMBER) + msg_set_int_value(addr_list->msg_struct_info[i], MSG_ADDRESS_INFO_ADDRESS_TYPE_INT, MSG_ADDRESS_TYPE_PLMN); + else if (addr_type == COMPOSER_UTIL_ADDRTYPE_EMAIL) + msg_set_int_value(addr_list->msg_struct_info[i], MSG_ADDRESS_INFO_ADDRESS_TYPE_INT, MSG_ADDRESS_TYPE_EMAIL); + msg_set_int_value(addr_list->msg_struct_info[i], MSG_ADDRESS_INFO_RECIPIENT_TYPE_INT, MSG_RECIPIENTS_TYPE_TO); + msg_set_str_value(addr_list->msg_struct_info[i], MSG_ADDRESS_INFO_ADDRESS_VALUE_STR, address, strlen(address)); + } + + msg_get_thread_id_by_address(msg_handle, addr_list, tid); + + msg_release_struct(&msgInfo); + } else { + MSG_UI_DEBUG(MSG_UI_LEVEL_ERR, "msgInfo is NULL"); + ret = COMPOSER_RETURN_FAIL; + } + + return ret; +} + +COMPOSER_RETURN_TYPE_E msg_ui_composer_delete_draft_message(msg_handle_t msg_handle, msg_thread_id_t tid) +{ + MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); + + COMPOSER_RETURN_TYPE_E ret = COMPOSER_RETURN_SUCCESS; + msg_struct_list_s msg_list = {0,}; + + if (msg_get_message_list(msg_handle, MSG_DRAFT_ID, tid, 0, 0, &msg_list) == MSG_SUCCESS) { + int i = 0; + int msgid = 0; + + if (msg_list.nCount) + D_MSG("delete draft message"); + + for (i = 0; i < msg_list.nCount; i++) { + msg_get_int_value(msg_list.msg_struct_info[i], MSG_MESSAGE_ID_INT, &msgid); + D_MSG("draft msg_id is %d", msgid); + if (msg_delete_message(msg_handle, msgid) != COMPOSER_RETURN_SUCCESS) + D_EMSG("msg_delete_message is failed, msgid = %d", msgid); + } + } + msg_release_list_struct(&msg_list); + + return ret; +} + COMPOSER_RETURN_TYPE_E msg_ui_composer_save_message(msg_handle_t msg_handle, int msg_id) { MSG_UI_ENTER(MSG_UI_LEVEL_DEBUG); diff --git a/composer/src/ui-composer/msg-ui-composer-main.c b/composer/src/ui-composer/msg-ui-composer-main.c index 29f3361..0efcd5f 100755 --- a/composer/src/ui-composer/msg-ui-composer-main.c +++ b/composer/src/ui-composer/msg-ui-composer-main.c @@ -883,7 +883,23 @@ void msg_ui_composer_reset_request(MSG_COMPOSER_VIEW_DATA_S *cd, service_h svc_h msg_ui_composer_message_init(); if (msg_ui_composer_get_message_data(cd) == COMPOSER_RETURN_SUCCESS) { - msg_ui_composer_save_message(cd->msg_handle, cd->msg_id); + /* delete draft message */ + msg_thread_id_t tid = 0; + + if (cd->msg_ug_mode == MSG_UG_MODE_BUBBLE_COMPOSER) { + PMSG_BUBBLE_DATA bubble_data = cd->bubble_data; + tid = bubble_data->threadId; + } else { + GSList *address_list = msg_ui_composer_message_get_address(); + msg_ui_composer_get_thread_id_by_address(cd->msg_handle, address_list, &tid); + } + + D_MSG("tid = %d", tid); + if (tid > 0) + msg_ui_composer_delete_draft_message(cd->msg_handle, tid); + + D_MSG("save draft message"); + msg_ui_composer_save_message(cd->msg_handle, 0); } msg_ui_composer_message_destroy(); @@ -941,7 +957,23 @@ void msg_ui_composer_reset_request(MSG_COMPOSER_VIEW_DATA_S *cd, service_h svc_h msg_ui_composer_message_init(); if (msg_ui_composer_get_message_data(cd) == COMPOSER_RETURN_SUCCESS) { - msg_ui_composer_save_message(cd->msg_handle, cd->msg_id); + /* delete draft message */ + msg_thread_id_t tid = 0; + + if (cd->msg_ug_mode == MSG_UG_MODE_BUBBLE_COMPOSER) { + PMSG_BUBBLE_DATA bubble_data = cd->bubble_data; + tid = bubble_data->threadId; + } else { + GSList *address_list = msg_ui_composer_message_get_address(); + msg_ui_composer_get_thread_id_by_address(cd->msg_handle, address_list, &tid); + } + + D_MSG("tid = %d", tid); + if (tid > 0) + msg_ui_composer_delete_draft_message(cd->msg_handle, tid); + + D_MSG("save draft message"); + msg_ui_composer_save_message(cd->msg_handle, 0); } msg_ui_composer_message_destroy(); @@ -1118,12 +1150,27 @@ static void __msg_composer_auto_save_and_delete_msg(MSG_COMPOSER_VIEW_DATA_S *cd if (!cd->disable_auto_save_mode) { COMPOSER_EDIT_STATE_E edit_state = __msg_ui_composer_edit_check(cd); if (edit_state == COMPOSER_EDIT_RECIPIENT_AND_BODY) { + /* auto save composer data */ msg_ui_composer_message_init(); - if (msg_ui_composer_get_message_data(cd) == COMPOSER_RETURN_SUCCESS) { + /* delete draft message */ + msg_thread_id_t tid = 0; + + if (cd->msg_ug_mode == MSG_UG_MODE_BUBBLE_COMPOSER) { + PMSG_BUBBLE_DATA bubble_data = cd->bubble_data; + tid = bubble_data->threadId; + } else { + GSList *address_list = msg_ui_composer_message_get_address(); + msg_ui_composer_get_thread_id_by_address(cd->msg_handle, address_list, &tid); + } + + D_MSG("tid = %d", tid); + if (tid > 0) + msg_ui_composer_delete_draft_message(cd->msg_handle, tid); + D_MSG("save draft message"); - msg_ui_composer_save_message(cd->msg_handle, cd->msg_id); + msg_ui_composer_save_message(cd->msg_handle, 0); /* show saved ticker popup */ msg_ui_composer_common_tickernoti(cd, COMPOSER_TICKERNOTI_AUTO_SAVED); } @@ -1135,21 +1182,7 @@ static void __msg_composer_auto_save_and_delete_msg(MSG_COMPOSER_VIEW_DATA_S *cd MSG_BUBBLE_DATA *bubble_data = cd->bubble_data; if (bubble_data) { - msg_struct_list_s msg_list = {0,}; - - if (msg_get_message_list(cd->msg_handle, MSG_DRAFT_ID, bubble_data->threadId, 0, 0, &msg_list) == MSG_SUCCESS) { - int i = 0; - int msgid = 0; - - D_MSG("delete draft message"); - for (i = 0; i < msg_list.nCount; i++) { - msg_get_int_value(msg_list.msg_struct_info[i], MSG_MESSAGE_ID_INT, &msgid); - D_MSG("draft msg_id is %d", msgid); - if (msg_delete_message(cd->msg_handle, msgid) != COMPOSER_RETURN_SUCCESS) - D_EMSG("msg_ui_comp_core_delete_message is failed = %d", msgid); - } - } - msg_release_list_struct(&msg_list); + msg_ui_composer_delete_draft_message(cd->msg_handle, bubble_data->threadId); } } } -- 2.7.4