📄 jmmsjsrhandler.c
字号:
RETRIEVE_FILTERS StoreRetFilter = {0, };
/* for new phone suite */
U32 index = 1;
CONTENT_DATA Content = {0, };
JC_RETCODE eRet = JC_OK;
S8 *name_p = NULL;
S8 temp[40];
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
memset(fname, 0, 100);
mmi_jmms_get_folder_name_from_folderId(folderId, fname);
StoreRetFilter.uiStartIndex = 1;
StoreRetFilter.uiNumMessage = 0;
StoreRetFilter.eRetrieve = E_RETRIEVE_BY_INDEX;
mmi_jmms_get_messages_list((S8*) fname, &pMessageList, &StoreRetFilter);
pTempMessageList = pMessageList;
while (pTempMessageList)
{
memset((S8*) & Content, 0, sizeof(CONTENT_DATA));
#ifdef __MMI_UNIFIED_MESSAGE__
list[i].msgId = pTempMessageList->uiExtraBytes & 0x00FFFFFF;
#else
list[i].msgId = pTempMessageList->uiExtraBytes;
#endif
//list[i].offset = 9; /* fixed 9 bytes */
list[i].offset = 0; /* fixed 0 bytes */
list[i].size = pTempMessageList->uiBufferLen;
msgType = pTempMessageList->pMessageHeaders->eMsgType;
/* for new phone suite */
Content.bIsStream = E_TRUE;
eRet = mmi_jmms_jdi_get_msg(g_jmms_context->hStoreHandle, index++, &Content);
memset(temp, 0, 40);
UnicodeToAnsii((S8*) temp, (S8*) Content.pFileName);
name_p = strrchr(temp, '\\');
name_p++;
strcpy((S8*) list[i].filename, (S8*) name_p);
switch (msgType)
{
case E_MSG_TYPE_SEND:
{
MESSAGE_SEND *pHeader = (MESSAGE_SEND*) pTempMessageList->pMessageHeaders->pHeaders;
list[i].date = pHeader->uiDate;
/* discussed with Manish for Templates. */
if (0 == strcmp((S8*) fname, (S8*) MMI_JMMS_TEMPLATES))
{
/* list[i].fileType = JSR_SUFFIX_TEMPLATE; */
}
else
{
/* list[i].fileType = JSR_SUFFIX_SEND_REQ; */
}
if (pHeader->pFrom != NULL)
{
len = (mmi_charset_ucs2_to_utf8_length_in_bytes((U8*) (pHeader->pFrom)) + 1);
address = jdd_MemAlloc(len, sizeof(U8));
mmi_chset_ucs2_to_utf8_string((U8*) address, len, (U8*) pHeader->pFrom);
}
if (pHeader->pSubject != NULL)
{
len = (mmi_charset_ucs2_to_utf8_length_in_bytes((U8*) (pHeader->pSubject)) + 1);
subject = jdd_MemAlloc(len, sizeof(U8));
mmi_chset_ucs2_to_utf8_string((U8*) subject, len, (U8*) pHeader->pSubject);
}
mmi_jmms_at_get_address_and_subject(list, i, (S8*) address, (S8*) subject);
}
break;
case E_MSG_TYPE_NOTIFICATION:
{
MESSAGE_NOTIFICATION *pHeader = (MESSAGE_NOTIFICATION*) pTempMessageList->pMessageHeaders->pHeaders;
list[i].date = 0; /* date is not available in notification. */
if (pHeader->pFrom != NULL)
{
len = (mmi_charset_ucs2_to_utf8_length_in_bytes((U8*) (pHeader->pFrom)) + 1);
address = jdd_MemAlloc(len, sizeof(U8));
mmi_chset_ucs2_to_utf8_string((U8*) address, len, (U8*) pHeader->pFrom);
}
if (pHeader->pSubject != NULL)
{
len = (mmi_charset_ucs2_to_utf8_length_in_bytes((U8*) (pHeader->pSubject)) + 1);
subject = jdd_MemAlloc(len, sizeof(U8));
mmi_chset_ucs2_to_utf8_string((U8*) subject, len, (U8*) pHeader->pSubject);
}
mmi_jmms_at_get_address_and_subject(list, i, (S8*) address, (S8*) subject);
}
break;
case E_MSG_TYPE_DELIVERY_REPORT:
{
DELIVERY_REPORT *pHeader = (DELIVERY_REPORT*) pTempMessageList->pMessageHeaders->pHeaders;
list[i].date = pHeader->uiDate;
/* delivery report doesn't have address and subject. */
mmi_jmms_at_get_address_and_subject(list, i, NULL, NULL);
}
break;
case E_MSG_TYPE_READ_REPORT:
{
READ_REPORT *pHeader = (READ_REPORT*) pTempMessageList->pMessageHeaders->pHeaders;
list[i].date = pHeader->uiDate;
if (pHeader->pFrom != NULL)
{
len = (mmi_charset_ucs2_to_utf8_length_in_bytes((U8*) (pHeader->pFrom)) + 1);
address = jdd_MemAlloc(len, sizeof(U8));
mmi_chset_ucs2_to_utf8_string((U8*) address, len, (U8*) pHeader->pFrom);
}
/* read report doesn't have subject. */
mmi_jmms_at_get_address_and_subject(list, i, (S8*) address, NULL);
}
break;
case E_MSG_TYPE_RECEIVE:
{
MESSAGE_RETRIEVAL *pHeader = (MESSAGE_RETRIEVAL*) pTempMessageList->pMessageHeaders->pHeaders;
list[i].date = pHeader->uiDate;
if (pHeader->pFrom != NULL)
{
len = (mmi_charset_ucs2_to_utf8_length_in_bytes((U8*) (pHeader->pFrom)) + 1);
address = jdd_MemAlloc(len, sizeof(U8));
mmi_chset_ucs2_to_utf8_string((U8*) address, len, (U8*) pHeader->pFrom);
}
if (pHeader->pSubject != NULL)
{
len = (mmi_charset_ucs2_to_utf8_length_in_bytes((U8*) (pHeader->pSubject)) + 1);
subject = jdd_MemAlloc(len, sizeof(U8));
mmi_chset_ucs2_to_utf8_string((U8*) subject, len, (U8*) pHeader->pSubject);
}
mmi_jmms_at_get_address_and_subject(list, i, (S8*) address, (S8*) subject);
}
break;
default:
break;
}
i++;
if (address != NULL)
{
jdd_MemFree(address);
address = NULL;
}
if (subject != NULL)
{
jdd_MemFree(subject);
subject = NULL;
}
if(Content.pFileName != NULL)
{
jdd_MemFree(Content.pFileName);
Content.pFileName = NULL;
}
pTempMessageList = pTempMessageList->pNext;
}
}
/*****************************************************************************
* FUNCTION
* mmi_jmms_at_save_mms
* DESCRIPTION
*
* PARAMETERS
* fname [?] [?]
* msgId [?] [?]
* RETURNS
*
*****************************************************************************/
JsrResult mmi_jmms_at_save_mms(char *fname, U32 *msgId)
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
U32 filename_length = 0;
MSG_HANDLE hMsgHandle = NULL;
CONTENT_DATA EncapsulatedContent = {0, };
MESSAGE_HEADERS *MsgHeaders = NULL;
JC_RETCODE eRet = JC_OK;
JC_UINT32 msgIndex;
S8 folder_name[100];
JC_UINT32 uiFileLength = 0;
JDD_FILE hFile = NULL;
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
memset(folder_name, 0, 100);
mmi_jmms_get_folder_name_from_folderId(JSR_DRAFTS, folder_name);
/* fname is in ASCII */
filename_length = (strlen(fname) + 1) * ENCODING_LENGTH;
EncapsulatedContent.bIsStream = E_TRUE;
EncapsulatedContent.cbWriteCallback = NULL;
EncapsulatedContent.cbReadCallback = mmi_jmms_read_callback;
EncapsulatedContent.pStream = jdd_MemAlloc(sizeof(S8), filename_length);
AnsiiToUnicodeString(EncapsulatedContent.pStream, fname);
EncapsulatedContent.pFileName = EncapsulatedContent.pStream;
if (g_jmms_context->jmms_fs_handle == NULL)
{
if (jdd_FSInitialize(&g_jmms_context->jmms_fs_handle) != JC_OK)
{
eRet = JC_ERR_FILE_OPEN;
goto END;
}
}
hFile = jdd_FSOpen(g_jmms_context->jmms_fs_handle, (JC_CHAR*) EncapsulatedContent.pStream, E_OPEN_READ_MODE);
if (hFile == NULL)
{
eRet = JC_ERR_FILE_OPEN;
goto END;
}
eRet = jdd_FSGetSize(hFile, &uiFileLength);
if (JC_OK != eRet)
{
eRet = JC_ERR_FILE_OPEN;
goto END;
}
EncapsulatedContent.uiTotalSize = uiFileLength;
if (hFile != NULL)
{
jdd_FSClose(hFile);
hFile = NULL;
}
if (g_jmms_context->jmms_fs_handle != NULL)
{
jdd_FSDeinitialize(g_jmms_context->jmms_fs_handle);
g_jmms_context->jmms_fs_handle = NULL;
}
eRet = mmi_jmms_jdi_parse_msg_buffer(&hMsgHandle, &EncapsulatedContent, E_TYPE_MMS, E_FALSE);
/* Async changes start */
while (eRet == JC_ERR_MMS_PARSE_PENDING)
{
eRet = mmi_jmms_jdi_msg_parse_continue(hMsgHandle);
};
/* Async changes end */
if (JC_OK != eRet)
{
*msgId = 0;
if (hMsgHandle != NULL)
{
mmi_jmms_jdi_msg_deinit(hMsgHandle);
hMsgHandle = NULL;
}
goto END;
}
eRet = mmi_jmms_jdi_get_msg_headers(hMsgHandle, &MsgHeaders);
if (JC_OK != eRet)
{
*msgId = 0;
mmi_jmms_jdi_msg_deinit(hMsgHandle);
hMsgHandle = NULL;
goto END;
}
/* TO DO to be discussed. */
eRet = mmi_jmms_save_message_buffer_in_Store((S8*) folder_name, &msgIndex, MsgHeaders, &EncapsulatedContent, msgId);
if (JC_OK != eRet)
{
if (EncapsulatedContent.pStream != NULL)
{
if (g_jmms_context->jmms_fs_handle == NULL)
{
if (jdd_FSInitialize(&g_jmms_context->jmms_fs_handle) != JC_OK)
{
eRet = JC_ERR_FILE_OPEN;
goto END;
}
}
jdd_FSDelete(g_jmms_context->jmms_fs_handle, EncapsulatedContent.pStream);
if (g_jmms_context->jmms_fs_handle != NULL)
{
jdd_FSDeinitialize(g_jmms_context->jmms_fs_handle);
g_jmms_context->jmms_fs_handle = NULL;
}
}
}
END:
if (EncapsulatedContent.pStream != NULL)
{
jdd_MemFree(EncapsulatedContent.pStream);
EncapsulatedContent.pStream = NULL;
}
if (hMsgHandle != NULL)
{
mmi_jmms_jdi_msg_deinit(hMsgHandle);
hMsgHandle = NULL;
}
return mmi_jmms_java_mms_error(eRet);
}
/*****************************************************************************
* FUNCTION
* mmi_jmms_at_delete_mms
* DESCRIPTION
*
* PARAMETERS
* folderId [IN]
* msgId [IN]
* jmms_delete_callback [IN]
* RETURNS
* void
*****************************************************************************/
void mmi_jmms_at_delete_mms(U8 folderId, U32 msgId, void (*jmms_delete_callback) (JsrResult result))
{
/*----------------------------------------------------------------*/
/* Local Variables */
/*----------------------------------------------------------------*/
U32 msgIndex = 0;
S8 fname[100];
JC_RETCODE eRet = JC_OK;
RETRIEVE_FILTERS StoreRetFilter = {0, };
/*----------------------------------------------------------------*/
/* Code Body */
/*----------------------------------------------------------------*/
/* check if the MMS is open on phone. */
if (folderId == 0)
{
FOLDER_INFO *pFolderInfo = NULL;
FOLDER_LIST *pFolderList = NULL;
MESSAGE_LIST *pMessageList = NULL;
MESSAGE_LIST *pTempMessageList = NULL;
MMI_BOOL is_message_deleted = MMI_FALSE;
MMI_BOOL done = MMI_FALSE;
/* /manish ading here */
MMI_BOOL is_open = MMI_FALSE;
eRet = mmi_jmms_get_folder_list(&pFolderInfo);
if (eRet != JC_OK)
{
jmms_delete_callback(mmi_jmms_java_mms_error(eRet));
return;
}
pFolderList = pFolderInfo->pFolderList;
while (pFolderList)
{
memset(fname, 0, 100);
msgIndex = 0;
UnicodeToAnsii((S8*) fname, (S8*) pFolderList->pFolderName);
/* /manish chnging here 0n 2 Feb */
StoreRetFilter.uiStartIndex = 1;
StoreRetFilter.uiNumMessage = 0;
StoreRetFilter.eRetrieve = E_RETRIEVE_BY_INDEX;
mmi_jmms_get_messages_list((S8*) fname, &pMessageList, &StoreRetFilter);
pTempMessageList = pMessageList;
while (pTempMessageList)
{
msgIndex++;
#ifdef __MMI_UNIFIED_MESSAGE__
if ((pTempMessageList->uiExtraBytes & 0x00FFFFFF) == msgId) /* msgId is stored in the extra bytes of message list. */
#else
if (pTempMessageList->uiExtraBytes == msgId) /* msgId is stored in the extra bytes of message list. */
#endif
{
is_message_deleted = MMI_TRUE;
done = MMI_TRUE;
is_open = mmi_jmms_is_msg_open((S8*) fname, msgId, msgIndex);
if (is_open == MMI_FALSE)
{
eRet = mmi_jmms_delete_message(fname, msgIndex);
if (eRet != JC_OK)
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -