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

📄 plxmms_info.c

📁 mtk wap和mms代码。。适应mtk 25。26平台
💻 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 + -