📄 plxmms_info.c
字号:
/***************************************************************************
*
* Pollex Mobile Platform
*
* Copyright (c) 2004 by Pollex Mobile Software Co., Ltd.
* All Rights Reserved
*
* Module :
*
* Purpose :
*
\**************************************************************************/
#include "PlxMms_Info.h"
#include "PlxMms_Util.h"
//#include "..\public\PlxDyncMenu.h"
#include "..\public\PlxPublic.h"
//macro
#define MMS_INFO_STR_TO STR_ID_PLX_MMS_INFO_TO//(U8*)(L"To")
#define MMS_INFO_STR_FROM STR_ID_PLX_MMS_INFO_FROM//(U8*)(L"From")
#define MMS_INFO_STR_CC STR_ID_PLX_MMS_INFO_CC//(U8*)(L"CC")
#define MMS_INFO_STR_BCC STR_ID_PLX_MMS_INFO_BCC//(U8*)(L"BCC")
#define MMS_INFO_STR_SUB STR_ID_PLX_MMS_INFO_SUB//(U8*)(L"Subject")
#define MMS_INFO_STR_TIME STR_ID_PLX_MMS_INFO_TIME//(U8*)(L"Time")
#define MMS_INFO_STR_DATE STR_ID_PLX_MMS_INFO_DATE//(U8*)(L"Date")
#define MMS_INFO_STR_SIZE STR_ID_PLX_MMS_INFO_SIZE//(U8*)(L"Size")
#define MMS_INFO_MAX_ITEM 68
#define MMS_INFO_ITEM_LEN 61
//struct
typedef struct tagMmsInfoData
{
long id;
void* mmse;
char* folder;
int info_len;
U16 back_screen;
//U8 info[MMS_INFO_MAX_ITEM*MMS_INFO_ITEM_LEN*2];
U8* info;
}MmsInfoData;
//global
static MmsInfoData g_info_data;
//private functions
static BOOL GetMsgInfo(void);
static void EnterMmsInfo(void);
static void InfoGoBack(void);
//public functions
/***************************************************************************
* Function MmsInfoGoBackToIdle
* Purpose
* Params
* Return
* Remarks
\**************************************************************************/
void MmsInfoGoBackToIdle(void)
{
if(g_info_data.info)
MMS_Free((void*)g_info_data.info);
MMS_Memset((void*)&g_info_data, 0, sizeof(g_info_data));
}
/***************************************************************************
* Function CreateMmsInfo
* Purpose
* Params
* Return
* Remarks
\**************************************************************************/
BOOL CreateMmsInfo(void* mmse, long id, const char* folder, U16 back_screen)
{
if(id < 0 || !mmse)
return FALSE;
MMS_Memset((void*)&g_info_data, 0, sizeof(MmsInfoData));
g_info_data.id = id;
g_info_data.mmse = mmse;
g_info_data.folder = (char*)folder;
g_info_data.back_screen = back_screen;
if(!GetMsgInfo())
{
MMS_Memset((void*)&g_info_data, 0, sizeof(MmsInfoData));
return FALSE;
}
//show
EnterMmsInfo();
return TRUE;
}
//private functions
/***************************************************************************
* Function GetMsgInfo
* Purpose
* Params
* Return
* Remarks
\**************************************************************************/
BOOL GetMsgInfo(void)
{
PMMSEMSGINFO info;
int i;
int count;
int len;
int size;
int size_k = 0;
int size_dec = 0;
int pos;
U8 temp[MMS_INFO_ITEM_LEN*2];
U8 time_temp[MMS_INFO_ITEM_LEN];
U8 newline[4];
char* sub_charset = NULL;
char sub_temp = 0;
char* p;
char* last;
PMMSETIME time;
WCHAR* wSub = NULL;
int wSubLen = 0;
void* message = NULL;
#ifdef MMS_DEBUG
PlxTrace("GetMsgInfo\r\n");
#endif
//select folder
if(!g_info_data.folder)
MMSE_SelectFolder(g_info_data.mmse, MMSE_FOLDER_DRAFT);
else
MMSE_SelectFolder(g_info_data.mmse, (char*)g_info_data.folder);
#ifdef MMS_DEBUG
PlxTrace("will get info\r\n");
#endif
//get msg info
/* info = (PMMSEMSGINFO)
MMS_Malloc( sizeof(char) * (sizeof(MMSEMSGINFO) + 512) );
if(!info)
return FALSE;
*/
info = (PMMSEMSGINFO)g_msg_info_buf;
MMS_Memset((void*)info, 0, MSG_INFO_BUF_LEN);
if(MMSE_GetMessageInfo(g_info_data.mmse, g_info_data.id, info,
MSG_INFO_BUF_LEN) < 0)
{
// MMS_Free((void*)info);
return FALSE;
}
len = 0;
if(info->pSubject)
len = MMS_Strlen(info->pSubject)+1;
g_info_data.info =
(U8*)MMS_Malloc(MMS_INFO_MAX_ITEM*MMS_INFO_ITEM_LEN*2 + len*2 + 1);
if(!g_info_data.info)
{
return FALSE;
}
#ifdef MMS_DEBUG
if(info->pSubject)
PlxTrace("sub=%s\r\n", info->pSubject);
#endif
AnsiiToUnicodeString((S8*)newline, (S8*)"\n");
//start make info
i = 0;
g_info_data.info[0] = g_info_data.info[1] = 0;
if(info->pSender && MMS_Strlen(info->pSender) > 0)
{
switch(info->status)
{
case MMT_UNRECEIVE:
case MMT_RECEIVING:
case MMT_AUTORECEIVING:
case MMT_RECEIVEDELAY:
case MMT_UNREAD:
case MMT_READED:
pfnUnicodeStrcpy((S8*)g_info_data.info,
(S8*)GetString(MMS_INFO_STR_FROM));
break;
case MMT_DRAFT:
case MMT_UNSEND:
case MMT_SENDING:
case MMT_SENT:
case MMT_DELIVERYREPORT:
case MMT_UNREADDELIVERYREPORT:
pfnUnicodeStrcpy((S8*)g_info_data.info,
(S8*)GetString(MMS_INFO_STR_TO));
break;
}
pfnUnicodeStrcat((S8*)g_info_data.info, (S8*)newline);
i++;
count = 0;
p = info->pSender;
last = p;
while(p)
{
if(*p == ';' || *p == 0)
{
len = p - last + 1;
if(len <= 1)
{
if(*p == 0)
break;
last = p + 1;
p++;
continue;
}
else if(len >= MMS_INFO_ITEM_LEN)
{
AnsiiNToUnicodeString((S8*)temp,
(S8*)last, MMS_INFO_ITEM_LEN-1);
temp[(MMS_INFO_ITEM_LEN-1)*2] = 0;
temp[(MMS_INFO_ITEM_LEN-1)*2+1] = 0;
}
else
{
AnsiiNToUnicodeString((S8*)temp,
(S8*)last, len);
temp[len*2] = 0;
temp[len*2+1] = 0;
}
pfnUnicodeStrcat((S8*)g_info_data.info, (S8*)temp);
pfnUnicodeStrcat((S8*)g_info_data.info, (S8*)newline);
i++;
count++;
if(count == 20 || *p== 0)
break;
last = p + 1;
}
p++;
}
if(count == 0) //no receivers
{
g_info_data.info[0] = g_info_data.info[1] = 0;
}
}
// pfnUnicodeStrcat((S8*)g_info_data.info, (S8*)newline);
if(info->pCc && MMS_Strlen(info->pCc) > 0)
{
pos = pfnUnicodeStrlen((S8*)g_info_data.info);
pfnUnicodeStrcat((S8*)g_info_data.info, (S8*)GetString(MMS_INFO_STR_CC));
pfnUnicodeStrcat((S8*)g_info_data.info, (S8*)newline);
i++;
count = 0;
p = info->pCc;
last = p;
while(p)
{
if(*p == ';' || *p == 0)
{
len = p - last + 1;
if(len <= 1)
{
if(*p == 0)
break;
last = p + 1;
p++;
continue;
}
else if(len >= MMS_INFO_ITEM_LEN)
{
AnsiiNToUnicodeString((S8*)temp,
(S8*)last, MMS_INFO_ITEM_LEN-1);
temp[(MMS_INFO_ITEM_LEN-1)*2] = 0;
temp[(MMS_INFO_ITEM_LEN-1)*2+1] = 0;
}
else
{
AnsiiNToUnicodeString((S8*)temp,
(S8*)last, len);
temp[len*2] = 0;
temp[len*2+1] = 0;
}
pfnUnicodeStrcat((S8*)g_info_data.info, (S8*)temp);
pfnUnicodeStrcat((S8*)g_info_data.info, (S8*)newline);
i++;
count++;
if(count == 20 || *p== 0)
break;
last = p + 1;
}
p++;
}
if(count == 0)
{
g_info_data.info[pos*2] = 0;
g_info_data.info[pos*2+1] = 0;
}
}
if(info->pBcc &&
MMS_Strlen(info->pBcc) > 0 &&
g_info_data.folder != MMSE_FOLDER_INBOX)
{
pos = pfnUnicodeStrlen((S8*)g_info_data.info);
pfnUnicodeStrcat((S8*)g_info_data.info, (S8*)GetString(MMS_INFO_STR_BCC));
pfnUnicodeStrcat((S8*)g_info_data.info, (S8*)newline);
i++;
count = 0;
p = info->pBcc;
last = p;
while(p)
{
if(*p == ';' || *p == 0)
{
len = p - last + 1;
if(len <= 1)
{
if(*p == 0)
break;
last = p + 1;
p++;
continue;
}
else if(len >= MMS_INFO_ITEM_LEN)
{
AnsiiNToUnicodeString((S8*)temp,
(S8*)last, MMS_INFO_ITEM_LEN-1);
temp[(MMS_INFO_ITEM_LEN-1)*2] = 0;
temp[(MMS_INFO_ITEM_LEN-1)*2+1] = 0;
}
else
{
AnsiiNToUnicodeString((S8*)temp,
(S8*)last, len);
temp[len*2] = 0;
temp[len*2+1] = 0;
}
pfnUnicodeStrcat((S8*)g_info_data.info, (S8*)temp);
pfnUnicodeStrcat((S8*)g_info_data.info, (S8*)newline);
i++;
count++;
if(count == 20 || *p== 0)
break;
last = p + 1;
}
p++;
}
if(count == 0)
{
g_info_data.info[pos*2] = 0;
g_info_data.info[pos*2+1] = 0;
}
}
//sub
if(info->pSubject && MMS_Strlen(info->pSubject))
{
#ifdef MMS_DEBUG
PlxTrace("sub=%s\r\n", info->pSubject);
#endif
pfnUnicodeStrcat((S8*)g_info_data.info, (S8*)GetString(MMS_INFO_STR_SUB));
pfnUnicodeStrcat((S8*)g_info_data.info, (S8*)newline);
i++;
sub_charset = MMS_Strstr(info->pSubject, ";Charset");
if(sub_charset)
{
sub_temp = *sub_charset;
*sub_charset = 0;
}
#ifdef MMS_DEBUG
PlxTrace("sub=%s\r\n", info->pSubject);
#endif
/*
len = PlxMmsUTF8ToWideChar((const char*)info->pSubject, MMS_Strlen(info->pSubject),
(char*)temp, MMS_INFO_ITEM_LEN-1);
temp[len] = 0;
temp[len+1] = 0;
*/
wSub = MMS_UTF8ToUnicode((unsigned char*)info->pSubject,
MMS_Strlen(info->pSubject), &wSubLen);
if(!wSub || wSub[0] == 0x0000)
{
pfnUnicodeStrcat((S8*)g_info_data.info, (S8*)L"");
}
else
{
pfnUnicodeStrcat((S8*)g_info_data.info, (S8*)wSub);
}
if(wSub)
{
MMS_Free((void*)wSub);
wSub = NULL;
}
// pfnUnicodeStrcat((S8*)g_info_data.info, (S8*)temp);
pfnUnicodeStrcat((S8*)g_info_data.info, (S8*)newline);
i++;
if(sub_charset && sub_temp)
*sub_charset = sub_temp;
}
// pfnUnicodeStrcat((S8*)g_info_data.info, (S8*)newline);
//date
time = &info->time;
pfnUnicodeStrcat((S8*)g_info_data.info, (S8*)GetString(MMS_INFO_STR_DATE));
pfnUnicodeStrcat((S8*)g_info_data.info, (S8*)newline);
i++;
sprintf((char*)time_temp, "%02d-%02d-%02d", time->year, time->month, time->day);
AnsiiToUnicodeString((S8*)temp, (S8*)time_temp);
pfnUnicodeStrcat((S8*)g_info_data.info, (S8*)temp);
pfnUnicodeStrcat((S8*)g_info_data.info, (S8*)newline);
i++;
//times
pfnUnicodeStrcat((S8*)g_info_data.info, (S8*)GetString(MMS_INFO_STR_TIME));
pfnUnicodeStrcat((S8*)g_info_data.info, (S8*)newline);
i++;
sprintf((char*)time_temp, "%02d:%02d:%02d", time->hour, time->minute, time->second);
AnsiiToUnicodeString((S8*)temp, (S8*)time_temp);
pfnUnicodeStrcat((S8*)g_info_data.info, (S8*)temp);
pfnUnicodeStrcat((S8*)g_info_data.info, (S8*)newline);
i++;
//size
pfnUnicodeStrcat((S8*)g_info_data.info, (S8*)GetString(MMS_INFO_STR_SIZE));
pfnUnicodeStrcat((S8*)g_info_data.info, (S8*)newline);
i++;
message = MMSE_CreateMessage(g_info_data.mmse,
g_info_data.id); //MMSE_OpenMessage(g_info_data.mmse, g_info_data.id);
if(message)
{
MMSE_GetInfo(g_info_data.mmse, message, info);
MMSE_CloseMessage(g_info_data.mmse, message);
size = info->length;
}
else
{
size = info->length;
}
GetShowSize(size, &size_k, &size_dec);
if(size_dec > 0)
sprintf((char*)time_temp, "%d.%dK", size_k, size_dec);
else
sprintf((char*)time_temp, "%dK", size_k);
AnsiiToUnicodeString((S8*)temp, (S8*)time_temp);
pfnUnicodeStrcat((S8*)g_info_data.info, (S8*)temp);
pfnUnicodeStrcat((S8*)g_info_data.info, (S8*)newline);
i++;
g_info_data.info_len = pfnUnicodeStrlen((S8*)g_info_data.info);
//end make info
return TRUE;
}
/***************************************************************************
* Function EnterMmsInfo
* Purpose
* Params
* Return
* Remarks
\**************************************************************************/
void EnterMmsInfo(void)
{
U8* guiBuffer=NULL;
EntryNewScreen(SCR_ID_PLX_MMS_INFO, NULL,
EnterMmsInfo, NULL);
guiBuffer = GetCurrGuiBuffer(SCR_ID_PLX_MMS_INFO);
ShowCategory74Screen(STR_ID_PLX_MMS_BOX_INFO, IMG_ID_PLX_MMS,
0, 0,
STR_GLOBAL_BACK, IMG_GLOBAL_BACK,
(U8*)g_info_data.info, g_info_data.info_len, guiBuffer);
SetRightSoftkeyFunction(InfoGoBack, KEY_EVENT_UP);
SetKeyHandler(InfoGoBack, KEY_LEFT_ARROW, KEY_EVENT_DOWN);
SetKeyHandler(PlxMmsGoBackToIdle, KEY_END, KEY_EVENT_DOWN);
}
/***************************************************************************
* Function InfoGoBack
* Purpose
* Params
* Return
* Remarks
\**************************************************************************/
void InfoGoBack(void)
{
GoBackToHistory(g_info_data.back_screen);
if(g_info_data.info)
MMS_Free((void*)g_info_data.info);
MMS_Memset((void*)&g_info_data, 0, sizeof(g_info_data));
// GoBackToHistory(SCR_ID_PLX_MMS_BOXLIST);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -