Delete draft messages before saving draft message
[apps/home/message-app.git] / composer / src / message / msg-ui-composer-message.c
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);