Delete draft messages before saving draft message
authorSoonmin Jung <sm0415.jung@samsung.com>
Wed, 6 Feb 2013 08:29:19 +0000 (17:29 +0900)
committerSoonmin Jung <sm0415.jung@samsung.com>
Wed, 6 Feb 2013 10:46:22 +0000 (19:46 +0900)
Change-Id: I1ea0c6721a64c5b65068378de7f445e8c05f2e53

composer/include/msg-ui-composer-message.h
composer/src/message/msg-ui-composer-message.c
composer/src/ui-composer/msg-ui-composer-main.c

index e86aabe..39124b0 100755 (executable)
@@ -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);
 
index 6b66a7c..6ff0267 100755 (executable)
@@ -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);
index 29f3361..0efcd5f 100755 (executable)
@@ -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);
                                }
                        }
                }