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

📄 jmmsstorehandling.c

📁 MTK_MMI的部分源代码,从code中大致了解到MMI的执行流程
💻 C
📖 第 1 页 / 共 4 页
字号:
 *****************************************************************************/
JC_RETCODE mmi_jmms_get_total_number_of_messages(U8 *total_num_messages)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    U32 i = 0;
    U8 msgs = 0;
    S8 *folder_list[MMI_JMMS_NO_OF_SYSTEM_FOLDERS] = {MMI_JMMS_INBOX,
        MMI_JMMS_OUTBOX,
        MMI_JMMS_SENT,
        MMI_JMMS_DRAFTS,
        MMI_JMMS_TEMPLATES
    };
    JC_RETCODE eRet = JC_OK;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    *total_num_messages = 0;
    for (i = 0; i < MMI_JMMS_NO_OF_SYSTEM_FOLDERS; i++)
    {
        msgs = 0;
        eRet = mmi_mms_get_number_of_messages(folder_list[i], &msgs);
        if (eRet != JC_OK)
        {
            return eRet;
        }
        *total_num_messages += msgs;
    }

    return eRet;
}

/* PMT VIKAS START 20060325 */

/*****************************************************************************
 * FUNCTION
 *  mmi_jmms_get_free_size_for_mms
 * DESCRIPTION
 *  This function is to get the total free space for mms
 * PARAMETERS
 *  disk_free_space     [?]     [?]
 * RETURNS
 *  void
 *****************************************************************************/
void mmi_jmms_get_free_size_for_mms(U64 *disk_free_space)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    S8 buf[6];
    FS_HANDLE file_handle;
    FS_DiskInfo disk_info;
    S32 fs_RetDrv = FS_GetDrive(FS_DRIVE_I_SYSTEM, 1, FS_NO_ALT_DRIVE);

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    *disk_free_space = 0;

#ifdef MMS_IN_LARGE_STORAGE
    /* Order: 1. Invisible NAND 2. Visible NAND 3. visible NOR 4. Invisible NOR */
    fs_RetDrv = FS_GetDrive(FS_DRIVE_V_NORMAL, 2, FS_DRIVE_V_NORMAL | FS_DRIVE_I_SYSTEM);
#endif /* MMS_IN_LARGE_STORAGE */ 
    sprintf(buf, "%c:\\", (U8) fs_RetDrv);
    memset(subMenuData, 0, (FMGR_MAX_PATH_LEN + FMGR_MAX_FILE_LEN) * ENCODING_LENGTH);
    AnsiiToUnicodeString((S8*) subMenuData, (S8*) buf);
    file_handle = FS_Open((kal_uint16*) subMenuData, FS_OPEN_DIR | FS_READ_ONLY);
    if(file_handle)
    {
        FS_GetDiskInfo((PU16) subMenuData, &disk_info, FS_DI_BASIC_INFO | FS_DI_FREE_SPACE);
        *disk_free_space = disk_info.FreeClusters * disk_info.SectorsPerCluster * disk_info.BytesPerSector;
        FS_Close(file_handle);
    }
}

/* PMT VIKAS END 20060325 */

/*****************************************************************************
 * FUNCTION
 *  mmi_jmms_sys_folders_exist
 * DESCRIPTION
 *  This function is check whether MMS Sys folders have been created or not
 * PARAMETERS
 *  void
 * RETURNS
 *  void
 *****************************************************************************/
S32 mmi_jmms_sys_folders_exist(void)
{
	JDD_FSHANDLE	fs_handle = NULL;
    JC_INT32 drive_letter = FS_GetDrive(FS_DRIVE_I_SYSTEM, 1, FS_NO_ALT_DRIVE);
    JC_INT8 mms_folder_path_ascii[FMGR_MAX_PATH_LEN + 1];
    JC_CHAR mms_folder_path_ucs2[(FMGR_MAX_PATH_LEN + 1) * ENCODING_LENGTH];
    JC_CHAR *mms_sys_filepath_ucs2 = NULL;
    JC_RETCODE eRet = JC_OK;
    #ifdef MMS_IN_LARGE_STORAGE
    /* Order: 1. Invisible NAND 2. Visible NAND 3. visible NOR 4. Invisible NOR */
    drive_letter = FS_GetDrive(FS_DRIVE_I_SYSTEM, 2, FS_DRIVE_V_NORMAL | FS_DRIVE_I_SYSTEM);
    #endif /* MMS_IN_LARGE_STORAGE */ 
    if (fs_handle == NULL)
    {
        if (jdd_FSInitialize(&fs_handle) != JC_OK)
        {
            return -1;
        }
    }
    jdi_UtilsCharToTchar(&mms_sys_filepath_ucs2, JDD_FS_MMS_SYS_FOLDER);
    if (jdd_FSIsDirExist(fs_handle, mms_sys_filepath_ucs2) == E_FALSE)
    {
        eRet=-1;
        goto error;
    }
    sprintf(mms_folder_path_ascii, "%c:\\@mms", drive_letter);
    app_ansii_to_unicodestring((kal_int8*) mms_folder_path_ucs2, (kal_int8*) mms_folder_path_ascii);
    if (jdd_FSIsDirExist(fs_handle, mms_folder_path_ucs2) == E_FALSE)
    {
        eRet=-1;
        goto error;
    }
error:
    jdd_MemFree(mms_sys_filepath_ucs2);
    if (fs_handle != NULL)
    {
        jdd_FSDeinitialize(fs_handle);
        fs_handle = NULL;
    }
    return eRet;
}

/*****************************************************************************
 * FUNCTION
 *  mmi_jmms_init_store
 * DESCRIPTION
 *  This function is to initialize the store.
 * PARAMETERS
 *  void
 * RETURNS
 *  void
 *****************************************************************************/
void mmi_jmms_init_store(void)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    JC_RETCODE eRet = JC_OK;

    /* FOLDER_INFO          *folder_info=NULL; */
    JC_CHAR *folder_name = NULL;
    U32 len = 0;
    U32 i = 0;
    S8 *folder_list[MMI_JMMS_NO_OF_SYSTEM_FOLDERS] = {MMI_JMMS_INBOX,
        MMI_JMMS_OUTBOX,
        MMI_JMMS_SENT,
        MMI_JMMS_DRAFTS,
        MMI_JMMS_TEMPLATES
    };

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    eRet = mmi_jmms_jdi_store_init(&g_jmms_context->hStoreHandle);
    if(mmi_jmms_sys_folders_exist()!=JC_OK)
    {
        g_jmms_context->init_done = JMMS_NOT_INITIALIZED;
        PRINT_INFORMATION_2((MMI_TRACE_INFO, "mmi_jmms_init_store: %d",g_jmms_context->init_done ));
		return;
    }
    if (JC_OK != eRet)
    {
        if (JC_ERR_STORE_FILE_CORRUPTED == eRet)
        {
            eRet = mmi_jmms_restore_folder_info();

            if (eRet != JC_OK)
            {
                ASSERT(0);
            }
        }
        else
        {
            ASSERT(0);
        }
    }

    for (i = 0; i < MMI_JMMS_NO_OF_SYSTEM_FOLDERS; i++)
    {
        len = (strlen((S8*) folder_list[i]) + 1) * ENCODING_LENGTH;
        folder_name = (JC_CHAR*) jdd_MemAlloc(sizeof(S8), len);
        if (NULL == folder_name)
        {
            ASSERT(0);
        }
        AnsiiToUnicodeString((PS8) folder_name, (PS8) folder_list[i]);
        eRet = mmi_jmms_jdi_create_folder(g_jmms_context->hStoreHandle, (JC_CHAR*) folder_name, NULL);
        /* don't free memory on success. It will be used in Store. */
        if (eRet != JC_OK)
        {
            jdd_MemFree(folder_name);
			if(eRet!=JC_ERR_STORE_FOLDER_ALREADY_EXIST)
			{
				g_jmms_context->init_done = JMMS_NOT_INITIALIZED;
                PRINT_INFORMATION_2((MMI_TRACE_INFO, "mmi_jmms_init_store at bottom: %d",g_jmms_context->init_done ));
				return;
			}
        }
    }

}

/*****************************************************************************
 * FUNCTION
 *  mmi_jmms_create_templates_in_store
 * DESCRIPTION
 *  This function is to initialize the templates. Should always be called after Initializing ans syncing store
 * PARAMETERS
 *  void
 * RETURNS
 *  void
 *****************************************************************************/
void mmi_jmms_create_templates_in_store(void)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    JC_RETCODE eRet = JC_OK;
    U8 num_mms = 0;

    eRet = mmi_mms_get_number_of_messages("Templates", &num_mms);
    PRINT_INFORMATION_2((MMI_TRACE_INFO, "mmi_mms_get_number_of_messages returns eRet = %d, No MMS =%d", eRet,num_mms ));
    if (eRet != JC_OK)
    {
        mmi_jmms_update_status_icon_indicator();
        g_jmms_context->init_done = JMMS_TEMPLATES_INITIALIZED;/*we won't be creating templates so let's READY JMMS anyway*/
        PRINT_INFORMATION_2((MMI_TRACE_INFO, "mmi_jmms_create_templates_in_store: %d",g_jmms_context->init_done ));
        return;
    }
    if (num_mms < __MMI_MMS_TEMPLATES_NUM__)
    {
        eRet = mmi_jmms_delete_all_message("Templates");
        ASSERT(!(eRet != JC_OK && num_mms > 0));
        mmi_jmms_create_template_messages();
        PRINT_INFORMATION_2((MMI_TRACE_INFO, "mmi_jmms_create_templates_in_store returns from second: %d ",num_mms));
    }
    else
    {
        g_jmms_context->init_done = JMMS_TEMPLATES_INITIALIZED;
        PRINT_INFORMATION_2((MMI_TRACE_INFO, "mmi_jmms_create_templates_in_store at bottom: %d",g_jmms_context->init_done ));
    }
    mmi_jmms_update_status_icon_indicator();
    return;
}


/*****************************************************************************
 * FUNCTION
 *  mmi_jmms_de_init_store
 * DESCRIPTION
 *  This function is to deinitialize the store.
 * PARAMETERS
 *  void
 * RETURNS
 *  void
 *****************************************************************************/
void mmi_jmms_de_init_store(void)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    JC_RETCODE eRet = JC_OK;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    if (g_jmms_context != NULL)
    {
        eRet = mmi_jmms_jdi_store_dinit(g_jmms_context->hStoreHandle);
        if (eRet == JC_OK)
        {
            g_jmms_context->hStoreHandle = NULL;
        }
    }
}


/*****************************************************************************
 * FUNCTION
 *  mmi_jmms_restore_folder_info
 * DESCRIPTION
 *  
 * PARAMETERS
 *  void
 * RETURNS
 *  
 *****************************************************************************/
JC_RETCODE mmi_jmms_restore_folder_info(void)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    JC_RETCODE eRet = JC_OK;
    JC_CHAR *folder_name = NULL;
    U32 len = 0;
    U32 i = 0;
    S8 *folder_list[MMI_JMMS_NO_OF_SYSTEM_FOLDERS] = {MMI_JMMS_INBOX,
        MMI_JMMS_OUTBOX,
        MMI_JMMS_SENT,
        MMI_JMMS_DRAFTS,
        MMI_JMMS_TEMPLATES
    };

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    eRet = mmi_jmms_jdi_store_restore(g_jmms_context->hStoreHandle);
    if (eRet != JC_OK)
    {
        ASSERT(0);
    }
    eRet = mmi_jmms_jdi_store_dinit(g_jmms_context->hStoreHandle);
    if (eRet != JC_OK)
    {
        ASSERT(0);
    }

    g_jmms_context->hStoreHandle = NULL;

    eRet = mmi_jmms_jdi_store_init(&g_jmms_context->hStoreHandle);
    if (eRet != JC_OK)
    {
        ASSERT(0);
    }

    for (i = 0; i < MMI_JMMS_NO_OF_SYSTEM_FOLDERS; i++)
    {
        JC_RETCODE eRet_temp = JC_OK;
        len = (strlen((S8*) folder_list[i]) + 1) * ENCODING_LENGTH;
        folder_name = (JC_CHAR*) jdd_MemAlloc(sizeof(S8), len);
        if (NULL == folder_name)
        {
            ASSERT(0);
        }
        AnsiiToUnicodeString((PS8) folder_name, (PS8) folder_list[i]);
        eRet_temp = mmi_jmms_jdi_create_folder(g_jmms_context->hStoreHandle, (JC_CHAR*) folder_name, NULL);
        /* don't free memory on success. It will be used in Store. */
        if (eRet_temp != JC_OK)
        {
            jdd_MemFree(folder_name);
        }
    }
    return eRet;
}

/*****************************************************************************
 * FUNCTION
 *  mmi_jmms_delete_message_as_per_id
 * DESCRIPTION
 *  This function is to delete the message from the store.
 * PARAMETERS
 *  msgId			[IN]         Message Id
 * RETURNS
 *  JC_RETCODE
 *****************************************************************************/
void mmi_jmms_delete_message_as_per_id(U32 msgId)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    MESSAGE_LIST *pMessageList = NULL;
    MESSAGE_LIST *pTempMessageList = NULL;
    S8 fname[100];
    U32 msgIndex = 0;
    JC_RETCODE eRet = JC_OK;

    RETRIEVE_FILTERS StoreRetFilter = {0, };

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    memset(fname, 0, 100);
    mmi_jmms_get_folder_name_from_folderId(JSR_INBOX, fname);

    /* /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 
        {
            eRet = mmi_jmms_delete_message(fname, msgIndex);
			if(eRet == JC_OK)
				mmi_jmms_delete_msg_status(msgIndex);
            break;
        }
        pTempMessageList = pTempMessageList->pNext;
    }
}

/*****************************************************************************
 * FUNCTION
 *  mmi_jmms_delete_message
 * DESCRIPTION
 *  This function is to delete the message from the store.
 * PARAMETERS
 *  pFolderName     [?]         [?]
 *  uiMsgIndex      [IN]        - index of the message
 *  folder_name   - name of folder from where the message to be deleted(?)(?)
 * RETURNS
 *  JC_RETCODE
 *****************************************************************************/
JC_RETCODE mmi_jmms_delete_message(S8 *pFolderName, JC_UINT32 uiMsgIndex)
{
    /*----------------------------------------------------------------*/
    /* Local Variables                                                */
    /*----------------------------------------------------------------*/
    MESSAGE_LIST *pMessageList = NULL;
    JC_RETCODE eRet = JC_OK;
    RETRIEVE_FILTERS StoreRetFilter = {0, };
    U8 number_mms = 0;

    /*----------------------------------------------------------------*/
    /* Code Body                                                      */
    /*----------------------------------------------------------------*/
    eRet = mmi_jmms_set_active_folder(pFolderName);
    if (JC_OK != eRet)
    {
        return eRet;
    }
    StoreRetFilter.uiStartIndex = uiMsgIndex;
    StoreRetFilter.uiNumMessage = 1;
    StoreRetFilter.eRetrieve = E_RETRIEVE_BY_INDEX;
    eRet = mmi_jmms_jdi_get_msg_list(g_jmms_context->hStoreHandle, &pMessageList, &StoreRetFilter);
    if (JC_ERR_STORE_FILE_CORRUPTED == eRet)
    {
        eRet = mmi_jmms_restore_folder_info();

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -