⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jmmsjsrhandler.c

📁 MTK手机平台的MMI部分的源代码
💻 C
📖 第 1 页 / 共 5 页
字号:
    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 + -