3 * Copyright (c) 2000-2012 Samsung Electronics Co., Ltd. All Rights Reserved.
5 * This file is part of msg-service.
7 * Contact: Jaeyun Jeong <jyjeong@samsung.com>
8 * Sangkoo Kim <sangkoo.kim@samsung.com>
9 * Seunghwan Lee <sh.cat.lee@samsung.com>
10 * SoonMin Jung <sm0415.jung@samsung.com>
11 * Jae-Young Lee <jy4710.lee@samsung.com>
12 * KeeBum Kim <keebum.kim@samsung.com>
14 * PROPRIETARY/CONFIDENTIAL
16 * This software is the confidential and proprietary information of
17 * SAMSUNG ELECTRONICS ("Confidential Information"). You shall not
18 * disclose such Confidential Information and shall use it only in
19 * accordance with the terms of the license agreement you entered
20 * into with SAMSUNG ELECTRONICS.
22 * SAMSUNG make no representations or warranties about the suitability
23 * of the software, either express or implied, including but not limited
24 * to the implied warranties of merchantability, fitness for a particular
25 * purpose, or non-infringement. SAMSUNG shall not be liable for any
26 * damages suffered by licensee as a result of using, modifying or
27 * distributing this software or its derivatives.
33 #include "MsgHandle.h"
35 #include "MsgException.h"
36 #include "MapiMessage.h"
37 #include "MapiStorage.h"
40 /*==================================================================================================
41 FUNCTION IMPLEMENTATION
42 ==================================================================================================*/
43 EXPORT_API int msg_add_message(MSG_HANDLE_T handle, const msg_message_t opq_msg, const MSG_SENDINGOPT_S *send_opt)
45 MSG_ERROR_T err = MSG_SUCCESS;
47 if (handle == NULL || opq_msg == NULL || send_opt == NULL)
52 MsgHandle* pHandle = (MsgHandle*)handle;
53 MSG_MESSAGE_S* pMsg = (MSG_MESSAGE_S*) opq_msg;
57 err = pHandle->addMessage(pMsg, send_opt);
59 catch (MsgException& e)
61 MSG_FATAL("%s", e.what());
62 return MSG_ERR_STORAGE_ERROR;
69 EXPORT_API int msg_add_syncml_message(MSG_HANDLE_T handle, const MSG_SYNCML_MESSAGE_S *syncml_msg)
71 MSG_ERROR_T err = MSG_SUCCESS;
73 if (handle == NULL || syncml_msg == NULL)
78 MsgHandle* pHandle = (MsgHandle*)handle;
82 err = pHandle->addSyncMLMessage(syncml_msg);
84 catch (MsgException& e)
86 MSG_FATAL("%s", e.what());
87 return MSG_ERR_STORAGE_ERROR;
94 EXPORT_API int msg_update_message(MSG_HANDLE_T handle, const msg_message_t opq_msg, const MSG_SENDINGOPT_S *send_opt)
96 MSG_ERROR_T err = MSG_SUCCESS;
98 if (handle == NULL || opq_msg == NULL || send_opt == NULL)
103 MsgHandle* pHandle = (MsgHandle*)handle;
104 MSG_MESSAGE_S* pMsg = (MSG_MESSAGE_S*) opq_msg;
106 if (pMsg->nAddressCnt > 1)
108 MSG_DEBUG("Multiple Address cannot be updated [%d]", pMsg->nAddressCnt);
114 err = pHandle->updateMessage(pMsg, send_opt);
116 catch (MsgException& e)
118 MSG_FATAL("%s", e.what());
119 return MSG_ERR_STORAGE_ERROR;
126 EXPORT_API int msg_update_read_status(MSG_HANDLE_T handle, MSG_MESSAGE_ID_T msg_id, bool read)
128 MSG_ERROR_T err = MSG_SUCCESS;
135 MsgHandle* pHandle = (MsgHandle*)handle;
139 err = pHandle->updateReadStatus(msg_id, read);
141 catch (MsgException& e)
143 MSG_FATAL("%s", e.what());
144 return MSG_ERR_STORAGE_ERROR;
151 EXPORT_API int msg_update_protected_status(MSG_HANDLE_T handle, MSG_MESSAGE_ID_T msg_id, bool is_protected)
153 MSG_ERROR_T err = MSG_SUCCESS;
160 MsgHandle* pHandle = (MsgHandle*)handle;
164 err = pHandle->updateProtectedStatus(msg_id, is_protected);
166 catch (MsgException& e)
168 MSG_FATAL("%s", e.what());
169 return MSG_ERR_STORAGE_ERROR;
176 EXPORT_API int msg_delete_message(MSG_HANDLE_T handle, MSG_MESSAGE_ID_T msg_id)
178 MSG_ERROR_T err = MSG_SUCCESS;
185 MsgHandle* pHandle = (MsgHandle*)handle;
189 err = pHandle->deleteMessage(msg_id);
191 catch (MsgException& e)
193 MSG_FATAL("%s", e.what());
194 return MSG_ERR_STORAGE_ERROR;
201 EXPORT_API int msg_delete_all_msgs_in_folder(MSG_HANDLE_T handle, MSG_FOLDER_ID_T folder_id, bool bOnlyDB)
203 MSG_ERROR_T err = MSG_SUCCESS;
210 MsgHandle* pHandle = (MsgHandle*)handle;
214 err = pHandle->deleteAllMessagesInFolder(folder_id, bOnlyDB);
216 catch (MsgException& e)
218 MSG_FATAL("%s", e.what());
219 return MSG_ERR_STORAGE_ERROR;
226 EXPORT_API int msg_move_msg_to_folder(MSG_HANDLE_T handle, MSG_MESSAGE_ID_T msg_id, MSG_FOLDER_ID_T dest_folder_id)
228 MSG_ERROR_T err = MSG_SUCCESS;
235 MsgHandle* pHandle = (MsgHandle*)handle;
239 err = pHandle->moveMessageToFolder(msg_id, dest_folder_id);
241 catch (MsgException& e)
243 MSG_FATAL("%s", e.what());
244 return MSG_ERR_STORAGE_ERROR;
251 EXPORT_API int msg_move_msg_to_storage(MSG_HANDLE_T handle, MSG_MESSAGE_ID_T msg_id, MSG_STORAGE_ID_T storage_id)
253 MSG_ERROR_T err = MSG_SUCCESS;
260 if (storage_id != MSG_STORAGE_PHONE && storage_id != MSG_STORAGE_SIM)
262 MSG_FATAL("unsupported storage [%d]", storage_id);
263 return MSG_ERR_INVALID_PARAMETER;
266 MsgHandle* pHandle = (MsgHandle*)handle;
270 err = pHandle->moveMessageToStorage(msg_id, storage_id);
272 catch (MsgException& e)
274 MSG_FATAL("%s", e.what());
275 return MSG_ERR_STORAGE_ERROR;
282 EXPORT_API int msg_count_message(MSG_HANDLE_T handle, MSG_FOLDER_ID_T folder_id, MSG_COUNT_INFO_S *count_info)
284 MSG_ERROR_T err = MSG_SUCCESS;
291 MsgHandle* pHandle = (MsgHandle*)handle;
295 err = pHandle->countMessage(folder_id, count_info);
297 catch (MsgException& e)
299 MSG_FATAL("%s", e.what());
300 return MSG_ERR_STORAGE_ERROR;
307 EXPORT_API int msg_count_msg_by_type(MSG_HANDLE_T handle, MSG_MESSAGE_TYPE_T msg_type, int *msg_count)
309 MSG_ERROR_T err = MSG_SUCCESS;
316 MsgHandle* pHandle = (MsgHandle*)handle;
318 MSG_MESSAGE_TYPE_S msgType = {0};
320 if (msg_type == MSG_TYPE_SMS)
322 msgType.mainType = MSG_SMS_TYPE;
323 msgType.subType = MSG_NORMAL_SMS;
325 else if (msg_type == MSG_TYPE_SMS_WAPPUSH)
327 msgType.mainType = MSG_SMS_TYPE;
328 msgType.subType = MSG_WAP_SI_SMS;
330 else if (msg_type == MSG_TYPE_MMS)
332 msgType.mainType = MSG_MMS_TYPE;
333 msgType.subType = MSG_SENDREQ_MMS;
338 err = pHandle->countMsgByType(&msgType, msg_count);
340 catch (MsgException& e)
342 MSG_FATAL("%s", e.what());
343 return MSG_ERR_STORAGE_ERROR;
350 EXPORT_API int msg_count_msg_by_contact(MSG_HANDLE_T handle, const MSG_THREAD_LIST_INDEX_S *addr_info, MSG_THREAD_COUNT_INFO_S *msg_thread_count_list)
352 MSG_ERROR_T err = MSG_SUCCESS;
354 if (handle == NULL || addr_info == NULL)
359 MsgHandle* pHandle = (MsgHandle*)handle;
363 err = pHandle->countMsgByContact(addr_info, msg_thread_count_list);
365 catch (MsgException& e)
367 MSG_FATAL("%s", e.what());
368 return MSG_ERR_STORAGE_ERROR;
375 EXPORT_API int msg_get_message(MSG_HANDLE_T handle, MSG_MESSAGE_ID_T msg_id, msg_message_t opq_msg, MSG_SENDINGOPT_S *send_opt)
377 MSG_ERROR_T err = MSG_SUCCESS;
379 if (handle == NULL || !opq_msg)
381 MSG_FATAL("handle or opq_msg is NULL");
385 MsgHandle* pHandle = (MsgHandle*)handle;
386 MSG_MESSAGE_S* pMsg = (MSG_MESSAGE_S*) opq_msg;
390 err = pHandle->getMessage(msg_id, pMsg, send_opt);
392 catch (MsgException& e)
394 MSG_FATAL("%s", e.what());
395 return MSG_ERR_STORAGE_ERROR;
402 EXPORT_API int msg_get_folder_view_list(MSG_HANDLE_T handle, MSG_FOLDER_ID_T folder_id, const MSG_SORT_RULE_S *sort_rule, MSG_LIST_S *msg_folder_view_list)
404 MSG_ERROR_T err = MSG_SUCCESS;
411 MsgHandle* pHandle = (MsgHandle*)handle;
415 if (sort_rule == NULL)
417 MSG_SORT_RULE_S sortRule = {0};
419 sortRule.sortType = MSG_SORT_BY_READ_STATUS;
420 sortRule.bAscending = true;
422 err = pHandle->getFolderViewList(folder_id, &sortRule, msg_folder_view_list);
426 err = pHandle->getFolderViewList(folder_id, sort_rule, msg_folder_view_list);
429 catch (MsgException& e)
431 MSG_FATAL("%s", e.what());
432 return MSG_ERR_STORAGE_ERROR;
439 EXPORT_API int msg_get_thread_view_list(MSG_HANDLE_T handle, const MSG_SORT_RULE_S *sort_rule, MSG_THREAD_VIEW_LIST_S *msg_thread_view_list)
441 MSG_ERROR_T err = MSG_SUCCESS;
448 MsgHandle* pHandle = (MsgHandle*)handle;
452 if (sort_rule == NULL)
454 MSG_SORT_RULE_S sortRule = {0};
456 sortRule.sortType = MSG_SORT_BY_THREAD_DATE;
457 sortRule.bAscending = false;
459 err = pHandle->getThreadViewList(&sortRule, msg_thread_view_list);
463 err = pHandle->getThreadViewList(sort_rule, msg_thread_view_list);
466 catch (MsgException& e)
468 MSG_FATAL("%s", e.what());
469 return MSG_ERR_STORAGE_ERROR;
476 EXPORT_API void msg_release_thread_view_list(MSG_THREAD_VIEW_LIST_S *msg_thread_view_list)
478 if (msg_thread_view_list == NULL)
484 if(msg_thread_view_list->msgThreadInfo != NULL)
486 if(msg_thread_view_list->nCount > 0)
488 for(int i=0; i<msg_thread_view_list->nCount; i++)
489 delete [] (MSG_THREAD_VIEW_S*)msg_thread_view_list->msgThreadInfo[i];
492 //free peer info list
493 delete [] msg_thread_view_list->msgThreadInfo;
494 msg_thread_view_list->msgThreadInfo = NULL;
497 msg_thread_view_list->nCount = 0;
501 EXPORT_API int msg_get_conversation_view_list(MSG_HANDLE_T handle, MSG_THREAD_ID_T thread_id, MSG_LIST_S *msg_conv_view_list)
503 MSG_ERROR_T err = MSG_SUCCESS;
510 MsgHandle* pHandle = (MsgHandle*)handle;
514 err = pHandle->getConversationViewList(thread_id, msg_conv_view_list);
516 catch (MsgException& e)
518 MSG_FATAL("%s", e.what());
519 return MSG_ERR_STORAGE_ERROR;
526 EXPORT_API int msg_delete_thread_message_list(MSG_HANDLE_T handle, MSG_THREAD_ID_T thread_id)
528 MSG_ERROR_T err = MSG_SUCCESS;
535 MsgHandle* pHandle = (MsgHandle*)handle;
539 err = pHandle->deleteThreadMessageList(thread_id);
541 catch (MsgException& e)
543 MSG_FATAL("%s", e.what());
544 return MSG_ERR_STORAGE_ERROR;
551 EXPORT_API int msg_add_folder(MSG_HANDLE_T handle, const MSG_FOLDER_INFO_S *folder_info)
553 MSG_ERROR_T err = MSG_SUCCESS;
555 if (handle == NULL || folder_info == NULL)
560 MsgHandle* pHandle = (MsgHandle*)handle;
564 err = pHandle->addFolder(folder_info);
566 catch (MsgException& e)
568 MSG_FATAL("%s", e.what());
569 return MSG_ERR_STORAGE_ERROR;
576 EXPORT_API int msg_update_folder(MSG_HANDLE_T handle, const MSG_FOLDER_INFO_S *folder_info)
578 MSG_ERROR_T err = MSG_SUCCESS;
580 if (handle == NULL || folder_info == NULL)
585 MsgHandle* pHandle = (MsgHandle*)handle;
589 err = pHandle->updateFolder(folder_info);
591 catch (MsgException& e)
593 MSG_FATAL("%s", e.what());
594 return MSG_ERR_STORAGE_ERROR;
601 EXPORT_API int msg_delete_folder(MSG_HANDLE_T handle, MSG_FOLDER_ID_T folder_id)
603 MSG_ERROR_T err = MSG_SUCCESS;
610 MsgHandle* pHandle = (MsgHandle*)handle;
614 err = pHandle->deleteFolder(folder_id);
616 catch (MsgException& e)
618 MSG_FATAL("%s", e.what());
619 return MSG_ERR_STORAGE_ERROR;
626 EXPORT_API int msg_get_folder_list(MSG_HANDLE_T handle, MSG_FOLDER_LIST_S *folder_list)
628 MSG_ERROR_T err = MSG_SUCCESS;
635 MsgHandle* pHandle = (MsgHandle*)handle;
639 err = pHandle->getFolderList(folder_list);
641 catch (MsgException& e)
643 MSG_FATAL("%s", e.what());
644 return MSG_ERR_STORAGE_ERROR;
651 EXPORT_API void msg_release_folder_list(MSG_FOLDER_LIST_S *folder_list)
653 if (folder_list == NULL)
659 if (folder_list->folderInfo != NULL)
661 free(folder_list->folderInfo);
662 folder_list->folderInfo = NULL;
665 folder_list->nCount = 0;
669 EXPORT_API int msg_generate_message(MSG_HANDLE_T handle, MSG_MESSAGE_TYPE_T msg_type, MSG_FOLDER_ID_T folder_id, unsigned int num_msg)
673 MSG_DEBUG("Handle is NULL");
677 if (folder_id >= MSG_MAX_FOLDER_ID)
679 MSG_DEBUG("folderId is invalid [%d]", folder_id);
683 MSG_DEBUG("type : %d, folder : %d, num_msg : %d", msg_type, folder_id, num_msg);
686 MSG_SENDINGOPT_S sendingOpt = {0};
687 sendingOpt.bSetting = false;
689 char strMsg[20] = {0};
690 char prefix[10] ="0103001";
691 // int postfix = 8111;
696 MSG_MESSAGE_S msgInfo = {0, }; //structure is used to enhance performance
698 for (unsigned int i = 0; i < num_msg; i++)
700 bzero(&msgInfo, sizeof(MSG_MESSAGE_S));
702 msgInfo.msgId = 0; // It should be set 0
703 msgInfo.folderId = folder_id;
705 if (msg_type == MSG_TYPE_MMS)
707 msgInfo.msgType.mainType = MSG_MMS_TYPE;
708 //msgInfo.msgType.subType = MSG_RETRIEVE_MMS;
709 msgInfo.msgType.subType = MSG_SENDREQ_MMS;
713 msgInfo.msgType.mainType = MSG_SMS_TYPE;
714 msgInfo.msgType.subType = MSG_NORMAL_SMS;
716 snprintf(strMsg, sizeof(strMsg), "test msg %d", i);
717 msgInfo.dataSize = strlen(strMsg);
718 msgInfo.pData = strMsg;
721 msgInfo.storageId = MSG_STORAGE_PHONE;
723 msgInfo.nAddressCnt = 1;
725 msgInfo.addressList[0].addressType = MSG_ADDRESS_TYPE_PLMN;
727 postfix = rand()%10000;
728 snprintf(msgInfo.addressList[0].addressVal, MAX_ADDRESS_VAL_LEN+1, "%s%04d", prefix, postfix);
730 msgInfo.addressList[0].recipientType = MSG_RECIPIENTS_TYPE_TO;
732 time(&(msgInfo.displayTime));
734 msgInfo.networkStatus = MSG_NETWORK_NOT_SEND;
735 msgInfo.bRead = false;
736 msgInfo.bProtected = false;
737 msgInfo.priority = MSG_MESSAGE_PRIORITY_NORMAL;
739 if (folder_id == MSG_OUTBOX_ID || folder_id == MSG_SENTBOX_ID)
740 msgInfo.direction = MSG_DIRECTION_TYPE_MO;
742 msgInfo.direction = MSG_DIRECTION_TYPE_MT;
744 if (msg_type == MSG_TYPE_MMS)
746 snprintf(msgInfo.subject, MAX_SUBJECT_LEN+1, "subject %d", i);
748 if(folder_id == MSG_INBOX_ID) msgInfo.networkStatus = MSG_NETWORK_RETRIEVE_SUCCESS;
750 MMS_MESSAGE_DATA_S* mms_data;
752 MMS_MEDIA_S* media[5];
754 mms_data = msg_mms_create_message();
756 msg_mms_set_rootlayout(mms_data, 100, 100, 0xffffff);
757 msg_mms_add_region(mms_data, "Image", 0, 50, 100, 50, 0xffffff);
758 msg_mms_add_region(mms_data, "Text", 0, 0, 100, 50, 0xffffff);
760 //------------> 1st Slide Composing
761 page[0] = msg_mms_add_page(mms_data, 5440);
763 media[0] = msg_mms_add_media(page[0], MMS_SMIL_MEDIA_IMG, "Image", (char*)"/opt/etc/msg-service/P091120_104633.jpg");
764 media[1] = msg_mms_add_media(page[0], MMS_SMIL_MEDIA_AUDIO, NULL, (char*)"/opt/etc/msg-service/audio.amr");
765 media[2] = msg_mms_add_media(page[0], MMS_SMIL_MEDIA_TEXT, "Text", (char*)"/opt/etc/msg-service/Temp0_2.txt");
766 media[2]->sMedia.sText.nColor = 0x000000;
767 media[2]->sMedia.sText.nSize = MMS_SMIL_FONT_SIZE_NORMAL;
768 media[2]->sMedia.sText.bBold = true;
770 //------------> 2nd Slide Composing
771 page[1] = msg_mms_add_page(mms_data, 4544);
773 media[3] = msg_mms_add_media(page[1], MMS_SMIL_MEDIA_TEXT, "Text", (char*)"/opt/etc/msg-service/Temp1_0.txt");
774 media[3]->sMedia.sText.nColor = 0x000000;
775 media[3]->sMedia.sText.nSize = MMS_SMIL_FONT_SIZE_NORMAL;
776 media[3]->sMedia.sText.bItalic = true;
777 media[4] = msg_mms_add_media(page[1], MMS_SMIL_MEDIA_VIDEO, "Text", (char*)"/opt/etc/msg-service/V091120_104905.3gp");
778 strncpy(media[4]->szAlt, "Video Load Fail", MAX_SMIL_ALT_LEN-1);
780 msg_mms_set_message_body((msg_message_t)&msgInfo, mms_data);
782 msg_mms_destroy_message(mms_data);
785 err = msg_add_message(handle, (msg_message_t)&msgInfo, &sendingOpt);
787 if (msg_type == MSG_TYPE_MMS && msgInfo.pMmsData) //free pMmsData directly. It is added to enhance performance
788 delete [] static_cast<char*>(msgInfo.pMmsData);
792 MSG_DEBUG("err [%d]", err);
801 EXPORT_API int msg_generate_sms(MSG_HANDLE_T handle, MSG_FOLDER_ID_T folder_id, unsigned int num_msg)
803 MSG_DEBUG("folder %d, num_msg %d", folder_id, num_msg);
807 MSG_DEBUG("Handle is NULL");
811 if (folder_id >= MSG_MAX_FOLDER_ID)
813 MSG_DEBUG("folderId is invalid");
820 MSG_MESSAGE_S msgInfo = {0};
821 char strMsg[20] = {0};
823 char prefix[10] ="0103001";
826 MSG_SENDINGOPT_S sendingOpt = {0};
827 sendingOpt.bSetting = false;
831 for (unsigned int i = 0; i < num_msg; i++)
833 bzero(&msgInfo, sizeof(msgInfo));
834 msgInfo.msgId = 0; // It should be set 0
835 msgInfo.folderId = folder_id;
837 msgInfo.msgType.mainType = MSG_SMS_TYPE;
838 msgInfo.msgType.subType = 0;
840 msgInfo.storageId = MSG_STORAGE_PHONE;
842 snprintf(strMsg, sizeof(strMsg), "test %d", i);
843 msgInfo.dataSize = strlen(strMsg);
844 msgInfo.pData = strMsg;
846 msgInfo.addressList[0].addressType = MSG_ADDRESS_TYPE_PLMN;
847 postfix = rand()%10000;
848 snprintf(msgInfo.addressList[0].addressVal, MAX_ADDRESS_VAL_LEN+1, "%s%04d", prefix, postfix);
849 msgInfo.addressList[0].recipientType = MSG_RECIPIENTS_TYPE_TO;
850 msgInfo.nAddressCnt = 1;
852 time(&(msgInfo.displayTime));
854 msgInfo.networkStatus = MSG_NETWORK_NOT_SEND;
855 msgInfo.bRead = false;
856 msgInfo.bProtected = false;
857 msgInfo.priority = MSG_MESSAGE_PRIORITY_NORMAL;
858 msgInfo.direction = MSG_DIRECTION_TYPE_MO;
860 err = msg_add_message(handle, (msg_message_t) &msgInfo, &sendingOpt);
864 MSG_DEBUG("err [%d]", err);
873 EXPORT_API int msg_get_quick_panel_data(MSG_HANDLE_T handle, MSG_QUICKPANEL_TYPE_T type, msg_message_t opq_msg)
875 MSG_ERROR_T err = MSG_SUCCESS;
877 if (handle == NULL || !opq_msg )
879 MSG_FATAL("handle or opq_msg is NULL");
883 MsgHandle* pHandle = (MsgHandle*)handle;
884 MSG_MESSAGE_S* pMsg = (MSG_MESSAGE_S*) opq_msg;
888 err = pHandle->getQuickPanelData(type, pMsg);
890 catch (MsgException& e)
892 MSG_FATAL("%s", e.what());
893 return MSG_ERR_STORAGE_ERROR;
900 EXPORT_API int msg_reset_database(MSG_HANDLE_T handle)
902 MSG_ERROR_T err = MSG_SUCCESS;
909 MsgHandle* pHandle = (MsgHandle*)handle;
913 err = pHandle->resetDatabase();
915 catch (MsgException& e)
917 MSG_FATAL("%s", e.what());
918 return MSG_ERR_STORAGE_ERROR;
925 EXPORT_API int msg_get_mem_size(MSG_HANDLE_T handle, unsigned int* memsize)
927 MSG_ERROR_T err = MSG_SUCCESS;
934 MsgHandle* pHandle = (MsgHandle*)handle;
938 err = pHandle->getMemSize(memsize);
940 catch (MsgException& e)
942 MSG_FATAL("%s", e.what());
943 return MSG_ERR_STORAGE_ERROR;
951 EXPORT_API int msg_thread_view_get_thread_id(msg_thread_view_t msg_thread)
953 if (msg_thread == NULL)
955 MSG_FATAL("msg_thread is NULL");
959 MSG_THREAD_VIEW_S* pMsg = (MSG_THREAD_VIEW_S*)msg_thread;
961 return pMsg->threadId;
965 EXPORT_API const char* msg_thread_view_get_address(msg_thread_view_t msg_thread)
967 if (msg_thread == NULL)
969 MSG_FATAL("msg_thread is NULL");
973 MSG_THREAD_VIEW_S* pMsg = (MSG_THREAD_VIEW_S*)msg_thread;
975 return pMsg->threadAddr;
979 EXPORT_API const char* msg_thread_view_get_name(msg_thread_view_t msg_thread)
981 if (msg_thread == NULL)
983 MSG_FATAL("msg_thread is NULL");
987 MSG_THREAD_VIEW_S* pMsg = (MSG_THREAD_VIEW_S*)msg_thread;
989 return pMsg->threadName;
993 EXPORT_API const char* msg_thread_view_get_image_path(msg_thread_view_t msg_thread)
995 if (msg_thread == NULL)
997 MSG_FATAL("msg_thread is NULL");
1001 MSG_THREAD_VIEW_S* pMsg = (MSG_THREAD_VIEW_S*)msg_thread;
1003 return pMsg->threadImagePath;
1007 EXPORT_API int msg_thread_view_get_message_type(msg_thread_view_t msg_thread)
1009 if (msg_thread == NULL)
1011 MSG_FATAL("msg_thread is NULL");
1015 MSG_THREAD_VIEW_S* pMsg = (MSG_THREAD_VIEW_S*)msg_thread;
1017 if (pMsg->threadType.mainType == MSG_SMS_TYPE)
1019 if (pMsg->threadType.subType == MSG_CB_SMS)
1020 return MSG_TYPE_SMS_CB;
1021 else if (pMsg->threadType.subType == MSG_JAVACB_SMS)
1022 return MSG_TYPE_SMS_JAVACB;
1023 else if (pMsg->threadType.subType == MSG_WAP_SI_SMS || pMsg->threadType.subType == MSG_WAP_SL_SMS)
1024 return MSG_TYPE_SMS_WAPPUSH;
1025 else if (pMsg->threadType.subType == MSG_MWI_VOICE_SMS || pMsg->threadType.subType == MSG_MWI_FAX_SMS
1026 || pMsg->threadType.subType == MSG_MWI_EMAIL_SMS || pMsg->threadType.subType == MSG_MWI_OTHER_SMS)
1027 return MSG_TYPE_SMS_MWI;
1028 else if (pMsg->threadType.subType == MSG_SYNCML_CP)
1029 return MSG_TYPE_SMS_SYNCML;
1030 else if (pMsg->threadType.subType == MSG_REJECT_SMS)
1031 return MSG_TYPE_SMS_REJECT;
1033 return MSG_TYPE_SMS;
1035 else if (pMsg->threadType.mainType == MSG_MMS_TYPE)
1037 if (pMsg->threadType.subType == MSG_NOTIFICATIONIND_MMS)
1038 return MSG_TYPE_MMS_NOTI;
1039 else if (pMsg->threadType.subType == MSG_SENDREQ_JAVA_MMS)
1040 return MSG_TYPE_MMS_JAVA;
1042 return MSG_TYPE_MMS;
1045 return MSG_TYPE_INVALID;
1049 EXPORT_API const char* msg_thread_view_get_data(msg_thread_view_t msg_thread)
1051 if (msg_thread == NULL)
1053 MSG_FATAL("msg_thread is NULL");
1057 MSG_THREAD_VIEW_S* pMsg = (MSG_THREAD_VIEW_S*)msg_thread;
1059 return pMsg->threadData;
1063 EXPORT_API time_t* msg_thread_view_get_time(msg_thread_view_t msg_thread)
1065 if (msg_thread == NULL)
1067 MSG_FATAL("msg_thread is NULL");
1071 MSG_THREAD_VIEW_S* pMsg = (MSG_THREAD_VIEW_S*)msg_thread;
1073 return &(pMsg->threadTime);
1077 EXPORT_API int msg_thread_view_get_direction(msg_thread_view_t msg_thread)
1079 if (msg_thread == NULL)
1081 MSG_FATAL("msg_thread is NULL");
1085 MSG_THREAD_VIEW_S* pMsg = (MSG_THREAD_VIEW_S*)msg_thread;
1087 return pMsg->direction;
1091 EXPORT_API int msg_thread_view_get_contact_id(msg_thread_view_t msg_thread)
1093 if (msg_thread == NULL)
1095 MSG_FATAL("msg_thread is NULL");
1099 MSG_THREAD_VIEW_S* pMsg = (MSG_THREAD_VIEW_S*)msg_thread;
1101 return pMsg->contactId;
1105 EXPORT_API int msg_thread_view_get_unread_cnt(msg_thread_view_t msg_thread)
1107 if (msg_thread == NULL)
1109 MSG_FATAL("msg_thread is NULL");
1113 MSG_THREAD_VIEW_S* pMsg = (MSG_THREAD_VIEW_S*)msg_thread;
1115 return pMsg->unreadCnt;
1119 EXPORT_API int msg_thread_view_get_sms_cnt(msg_thread_view_t msg_thread)
1121 if (msg_thread == NULL)
1123 MSG_FATAL("msg_thread is NULL");
1127 MSG_THREAD_VIEW_S* pMsg = (MSG_THREAD_VIEW_S*)msg_thread;
1129 return pMsg->smsCnt;
1133 EXPORT_API int msg_thread_view_get_mms_cnt(msg_thread_view_t msg_thread)
1135 if (msg_thread == NULL)
1137 MSG_FATAL("msg_thread is NULL");
1141 MSG_THREAD_VIEW_S* pMsg = (MSG_THREAD_VIEW_S*)msg_thread;
1143 return pMsg->mmsCnt;
1147 EXPORT_API int msg_search_message_for_thread_view(MSG_HANDLE_T handle, const char *search_string, MSG_THREAD_VIEW_LIST_S *msg_thread_view_list)
1149 MSG_ERROR_T err = MSG_SUCCESS;
1151 if (handle == NULL || search_string == NULL)
1156 if (strlen(search_string) <= 0 || strlen(search_string) > MAX_MSG_TEXT_LEN)
1161 MsgHandle* pHandle = (MsgHandle*)handle;
1165 err = pHandle->searchMessage(search_string, msg_thread_view_list);
1167 catch (MsgException& e)
1169 MSG_FATAL("%s", e.what());
1170 return MSG_ERR_STORAGE_ERROR;
1177 EXPORT_API int msg_search_message(MSG_HANDLE_T handle, const MSG_SEARCH_CONDITION_S *msg_search_conditions, int offset, int limit, MSG_LIST_S *msg_list)
1179 MSG_ERROR_T err = MSG_SUCCESS;
1181 if (handle == NULL || msg_search_conditions == NULL)
1186 MsgHandle* pHandle = (MsgHandle*)handle;
1190 err = pHandle->searchMessage(msg_search_conditions, offset, limit, msg_list);
1192 catch (MsgException& e)
1194 MSG_FATAL("%s", e.what());
1195 return MSG_ERR_STORAGE_ERROR;
1202 EXPORT_API int msg_release_message_list(MSG_LIST_S *msg_list)
1204 if (msg_list == NULL)
1206 MSG_FATAL("msg_list is NULL");
1207 return MSG_ERR_NULL_POINTER;
1212 if (msg_list->msgInfo!= NULL)
1214 if(msg_list->nCount > 0)
1216 for(int i=0; i<msg_list->nCount; i++)
1217 msg_release_message(&(msg_list->msgInfo[i]));
1220 delete [] msg_list->msgInfo;
1221 msg_list->msgInfo = NULL;
1224 msg_list->nCount = 0;
1230 EXPORT_API int msg_get_msgid_list(MSG_HANDLE_T handle, MSG_REFERENCE_ID_T ref_id, MSG_MSGID_LIST_S *msg_msgid_list)
1232 MSG_ERROR_T err = MSG_SUCCESS;
1239 MsgHandle* pHandle = (MsgHandle*)handle;
1243 err = pHandle->getMsgIdList(ref_id, msg_msgid_list);
1245 catch (MsgException& e)
1247 MSG_FATAL("%s", e.what());
1248 return MSG_ERR_STORAGE_ERROR;
1255 EXPORT_API void msg_release_msgid_list(MSG_MSGID_LIST_S *msg_msgid_list)
1257 if (msg_msgid_list == NULL)
1263 if(msg_msgid_list->msgIdList != NULL)
1265 //free peer info list
1266 delete [] msg_msgid_list->msgIdList;
1267 msg_msgid_list->msgIdList = NULL;
1270 msg_msgid_list->nCount = 0;
1274 EXPORT_API int msg_get_reject_msg_list(MSG_HANDLE_T handle, const char *phone_num, MSG_REJECT_MSG_LIST_S *msg_reject_msg_list)
1276 MSG_ERROR_T err = MSG_SUCCESS;
1283 MsgHandle* pHandle = (MsgHandle*)handle;
1287 err = pHandle->getRejectMsgList(phone_num, msg_reject_msg_list);
1289 catch (MsgException& e)
1291 MSG_FATAL("%s", e.what());
1292 return MSG_ERR_STORAGE_ERROR;
1299 EXPORT_API void msg_release_reject_msg_list(MSG_REJECT_MSG_LIST_S *msg_reject_msg_list)
1301 if (msg_reject_msg_list == NULL)
1307 if(msg_reject_msg_list->rejectMsgInfo != NULL)
1309 //free peer info list
1310 delete [] msg_reject_msg_list->rejectMsgInfo;
1311 msg_reject_msg_list->rejectMsgInfo = NULL;
1314 msg_reject_msg_list->nCount = 0;
1318 EXPORT_API int msg_reg_storage_change_callback(MSG_HANDLE_T handle, msg_storage_change_cb cb, void *user_param)
1320 MSG_ERROR_T err = MSG_SUCCESS;
1322 if (handle == NULL || cb == NULL)
1327 MsgHandle* pHandle = (MsgHandle*)handle;
1331 err = pHandle->regStorageChangeCallback(cb, user_param);
1333 catch (MsgException& e)
1335 MSG_FATAL("%s", e.what());
1336 return MSG_ERR_CALLBACK_ERROR;
1343 EXPORT_API int msg_get_report_status(MSG_HANDLE_T handle, MSG_MESSAGE_ID_T msg_id, MSG_REPORT_STATUS_INFO_S *report_status)
1345 MSG_ERROR_T err = MSG_SUCCESS;
1347 if (handle == NULL || msg_id < 1)
1352 MsgHandle* pHandle = (MsgHandle*)handle;
1356 err = pHandle->getReportStatus(msg_id, report_status);
1358 catch (MsgException& e)
1360 MSG_FATAL("%s", e.what());
1361 return MSG_ERR_STORAGE_ERROR;