📄 jmmsstorehandling.c
字号:
*****************************************************************************/
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 + -