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

📄 plxbrowpush.c

📁 mtk wap和mms代码。。适应mtk 25。26平台
💻 C
📖 第 1 页 / 共 5 页
字号:
/***************************************************************************
*
*                      Pollex Mobile Platform
*
*  Copyright (c) 2004 by Pollex Mobile Software Co., Ltd.
*                       All Rights Reserved
*
*  Module  :    
*
*  Purpose :
*  
\**************************************************************************/
#include "PlxConfig.h"
#if defined(PROJECT_BRANCH_06A)
#define __NEWSIMULATOR
#include "FileSystemDef.h"
#undef __NEWSIMULATOR
#endif // defined(PROJECT_BRANCH_06A)

#include "MMI_features.h"
#include "gui.h"
#include "fs_type.h"
#include "fs_func.h"
#include "fs_errcode.h"
#include "settingprot.h"
#include "settingprofile.h"
#include "wgui_status_icons.h"
#include "globalconstants.h"

#include "plxbrowPort.h"
#include "plxBrowDefs.h"
#include "../main/plxDefs.h"
#include "CommonScreens.h"
#include "../Public/PlxPublic.h"
#include "../public/plxPubDefs.h"
#include "plxBrowPublic.h"
#include "plxBrow.h"
#include "PlxBrowPush.h"
#include "plxbrowSetting.h"

#define PUSHITEM_MAIN_NAME_LEN			14  //such as 20051211090807 -year month day hour minute second
#define PUSHITEM_SUB_NAME_LEN			(3 + 3) // 3 is reserved
#define	PUSHITEM_EXT_MANE_LEN			 3
#define PUSHITEM_FULL_NAME_LEN			(PUSHITEM_MAIN_NAME_LEN + PUSHITEM_SUB_NAME_LEN + PUSHITEM_EXT_MANE_LEN + 1)
#define	PUSHITEM_FILENAME_MAX_LEN		(PUSHITEM_FULL_NAME_LEN * 2 + 2) 
#define	PLXBROW_PUSH_FILENAME_MAX_LEN   100 //PUSHITEM_FILENAME_MAX_LEN * 2  //100


typedef struct tag_Push_File_Item_Info{
 	PUSHCLASS class;
	unsigned long lItemSize;
}FILEUNIT, *PFILEUNIT;

typedef struct tag_SI_File_Item{
	unsigned int nRead;		//0: unread,1: read
	char szCreateTime[DATETIEMLEN];
	char szExTime[DATETIEMLEN];
	unsigned short nActionType;
	unsigned int szTitle;
	unsigned int szUrl;
	unsigned int szID;
}SIFILEITEM, *PSIFILEITEM;

typedef struct tag_Txt_File_Item{
	unsigned int bRead;	//0: unread,1: read
}TXTFILEITEM, *PTXTFILEITEM;


typedef struct tag_Push {
	S8 fileName[PUSHITEM_FILENAME_MAX_LEN]; 
	FILEUNIT fileUnit;
	void *pData;
	struct tag_Push * pNext;
}PUSH, *PPUSH;

static PPUSH pPushChain = 0;
static int curPushItems = 0;



#if 0 
PPUSH pCurPush;
int bakItemsNum = 0;
PU8 *listItems = 0;
U16 *listIcons=0;
#endif 
static S32 curSelItem = 0;
static HDMENU wbPushMenu = NULL;
static U8 *pContent = NULL;
static BOOL bIsPushLoad = FALSE;
static unsigned long nPushHistoryFlag = 0;
//add by jhzhao
//FuncPtr ExternEndKeyDownFuncPtr=NULL;

#define  PUSH_NO_IN_HISTORY  0x0000
#define  PUSH_BEFORE_BROWSER 0x0001
#define  PUSH_AFTER_BROWSER 0x0002
#define  PUSH_NEW_PUSH    0x0004 
//static BOOL bIsNewPushAdded = FALSE;

static int SetPushDir(void );
//static unsigned long PwbGetTickCount(void);
static void GeneratePushMainName(char* szBuffer, int nBuffLen);
static long NewAndOpenFile(char *RetFileName);
static void  AddNewPushComfirmCB(PLIBEVENT event);
void ExitWbPush(void);
static void EnterWBPushScreen(void);
//void EnterWBPushMenu(void);
void DestroyPushChain(void);
int BuildPushItemChain(void);
static void InsertNewItemToSpePushChain(PPUSH pNewPush, PPUSH pStatItem, PPUSH pEndItem, int nNumOfPush);
static void InsertNewItemToPushChain(PPUSH pNewPush);
static void DumpPushChain(void);
static void DumpPush(PPUSH pPush);

//void WBPushParseSIItem(void *pSiData, PSIINFO pSiInfo);
static int WBPushSetReadState(PPUSH pPush, unsigned int bRead);
void WBPushMarkCurSel(S32 selItem);
//static void GetWBPushItemInfo(void);
static U8 PushCBHhandler(void* param);
static pBOOL GetNextPushItem( S32 item_index, UI_string_type str_buff, UI_image_type* img_buff_p, U8 str_img_mask );
static S32 GetNextPushItemHint ( S32 item_index, UI_string_type *hint_array );

//void hilight_pushmenu_read(void);
//void hilight_pushmenu_del(void);
//void hilight_pushmenu_delall(void);

void ConfirmJump (void);
void RejectJump (void);
static void JumpToPushSiUrlConfirmCB(PLIBEVENT event);
static void EntryJumpToPushSIUrlScreen(void);
void WBPushUserRead(void);
static void DelAllPushItemsConfirmCB(PLIBEVENT event);
static void DelSelPushItemConfirmCB(PLIBEVENT event);
void WBPushDelItem(void);
void WBPushDelAllItems(void);
void GoBackToPushList(void);
void WBPushDoDelItem(void);
void WBPushDoDelAllItems(void);
static PPUSH WBPushGetCurSelItem(S32 index);
void WBPushReadTextContent(PPUSH pPush);
void WBPushExitReadText(void);
//key end handler
static BOOL IsAllPushReaded(void);
static void SetIdleScreenWapStatusIcon(BOOL bShow, BOOL bPlayTone);
void PlxBrowSetWapStatusIcon(void);
void WBPushKeyEndHandler(void);
static void PushKeyEndExitLskFunc(void);
//static void PushKeyEndExitConfirmCB(PLIBEVENT event);
int AddPushItem(U16 *fileName);
static int GetNewPushNum(void);
//pushbox menu screen
static void EntryWBPushMenu(void);
static int  CreateWBPushMenu(void);
static void ModifyWBPushMenu(void);
static int  WBPushMenuNty(HDMENU hMenu, unsigned long id, unsigned long event);
static void EntryNewPushArrivedScreen(void);

extern void ShowCategory164Screen(U16 left_softkey,U16 left_softkey_icon,U16 right_softkey,U16 right_softkey_icon,U16 message,U16 message_icon,U8* history_buffer);
extern void IdleSetStatusIcon(S16 index);
extern void IdleResetStatusIcon(S16 index);
extern void TurnOnBacklight(U8 TimerFlag);
extern void PlayMessageArrivalTone(void);
extern U8   IsKeyPadLockState(void);

extern U8 jumpToBuffer[];

#ifdef __PLXBROW_DEBUG_
extern void PlxTrace(const char * fmt,...);
extern void WAP_DataOut(const unsigned char * pData, unsigned short Length, const unsigned char * pName);
#endif




#ifdef  __PLXBROW_PUSH_TEST_
/****************************************************************************
* Function	TestPushSave
* Purpose	test push
* Params	
* Return	
* Remarks	
\****************************************************************************/
extern  int rand(void);
void   TestPushSave(int pushClass)
{
	char		pszUrl[] = "http://wap.163.com";
	char		pszTitle[100];
	SIINFO		SiInfo;
	static int 	i = 0;

	sprintf(pszTitle,"%d-%d push item", i,rand());
	i ++;	
	if(PUSH_SI == pushClass)
	{	
		SiInfo.pszTitle = pszTitle;
		SiInfo.pszUri = pszUrl;
		SiInfo.pszId = "100";
		SiInfo.nActionType = 200;
		SiInfo.nRead = 0;
		memset(SiInfo.szCreateTime,'a',DATETIEMLEN);
		SiInfo.szCreateTime[DATETIEMLEN-1] = '\0';
		memset(SiInfo.szExTime, 'b',DATETIEMLEN);
		SiInfo.szExTime[DATETIEMLEN-1] = '\0';
		WBPushSaveNew(PUSH_SI, (void *)&SiInfo, 0, 0);
	}
	else
	{
		WBPushSaveNew(PUSH_TEXT,(void*)pszUrl, strlen(pszUrl),0);
	}
}

void TestSIPush(void)
{
	TestPushSave(PUSH_SI);
}

void TestTextPush(void)
{
	TestPushSave(PUSH_TEXT);
}
#endif //__PLXBROW_PUSH_TEST_
/****************************************************************************
* Function	WBPushSaveNew
* Purpose	save a new push item to file
* Params	
* Return	
* Remarks	
\****************************************************************************/
int WBPushSaveNew(PUSHCLASS classPush, void *pData, unsigned int lenData, unsigned short bRead){
	FILEUNIT fileUnit;
	SIFILEITEM siItem;
	TXTFILEITEM txtItem;
	PSIINFO pSiInfo;
	S32 fileHandle;
	UINT written=0;
	char   szFileName[PLXBROW_PUSH_FILENAME_MAX_LEN];//unicode
	
#ifdef 	__PLXBROW_DEBUG_
	PlxTrace("[%d]  WBPushSaveNew -----> New Push arrived! type= %s", __LINE__, classPush == PUSH_SI ? "PUSH_SI" : "PUSH_TEXT");
#endif
	fileUnit.class = classPush;
	switch(classPush) {
	case PUSH_SI:
		if(NULL == pData )
			return -1;
		pSiInfo = (PSIINFO)pData;
		siItem.nRead = bRead;  //  pSiInfo->nRead means: 1 : read ; 0 : unread;
		siItem.nActionType = pSiInfo->nActionType;
		PlxAppMemcpy(siItem.szCreateTime, pSiInfo->szCreateTime, DATETIEMLEN);
		PlxAppMemcpy(siItem.szExTime, pSiInfo->szExTime, DATETIEMLEN);
		if(NULL != pSiInfo->pszTitle)
			siItem.szTitle = strlen(pSiInfo->pszTitle) + 1;
		else
			siItem.szTitle = 0;
		if(NULL != pSiInfo->pszUri)
			siItem.szUrl = strlen(pSiInfo->pszUri) + 1;
		else
			siItem.szUrl = 0;
		siItem.szID = 0;
		fileUnit.lItemSize = sizeof(SIFILEITEM) + siItem.szTitle + siItem.szUrl + siItem.szID + sizeof(FILEUNIT);

		if(FALSE == PlxBrowIsFlashAvailabe((unsigned long)fileUnit.lItemSize, (const char *) GetPBUIPushBoxDirectory()))
		{
			PLIB_MessageBox(PMBTYPE_ERROR, NULL, (const WCHAR * )get_string(STR_ID_PLX_BROW_SAVEPAGE_ERR_NOFLASHSPACE),UI_POPUP_NOTIFYDURATION_TIME);
			return -3;
		}
		fileHandle = NewAndOpenFile(szFileName);
		if (0 > fileHandle) {
#ifdef 	__PLXBROW_DEBUG_
			PlxTrace("[%d]  WBPushSaveNew ----->PUSH_SI : NewAndOpenFile return failed!", __LINE__);
#endif
			return -2;
		}
		FS_Seek(fileHandle, 0, SEEK_SET);
		FS_Write(fileHandle, &fileUnit, sizeof(FILEUNIT), &written);
		FS_Write(fileHandle, &siItem, sizeof(SIFILEITEM), &written);
		FS_Write(fileHandle, pSiInfo->pszTitle, siItem.szTitle, &written);
		FS_Write(fileHandle, pSiInfo->pszUri, siItem.szUrl, &written);
		FS_Close(fileHandle);
#ifdef 	__PLXBROW_DEBUG_
		WAP_DataOut((const unsigned char *)szFileName, (unsigned short)PLXBROW_PUSH_FILENAME_MAX_LEN, (const unsigned char *)"WBPushSaveNew ----->szFileName") ;
		PlxTrace("[%d]  WBPushSaveNew -----> PUSH_SI: write new push to  %s",__LINE__, szFileName);
		PlxTrace("write fileUnit %d bytes", written);
		PlxTrace("fileUnit.class =%d ,fileUnit.lItemSize=%d", fileUnit.class,fileUnit.lItemSize);
		PlxTrace("write siItem %d bytes",  written);
		PlxTrace("siItem.nRead= %d,  siItem.nActionType =%d ",siItem.nRead,siItem.nActionType);
		PlxTrace("siItem.szTitle= %d :%s, siItem.szUrl =%d : %s ",siItem.szTitle,pSiInfo->pszTitle ,siItem.szUrl, pSiInfo->pszUri);
		PlxTrace("siItem.CreateTime= %s,  siItem.ExTime =%s ",siItem.szCreateTime,siItem.szExTime);
		PlxTrace("write pSiInfo->pszTitle %d bytes",  written);
		PlxTrace("write pSiInfo->pszUri %d bytes", written);
#endif
		break;

		
	case PUSH_TEXT:
		if(NULL == pData || 0 >= lenData)
			return -1;
		txtItem.bRead = bRead;
		fileUnit.lItemSize = sizeof(FILEUNIT) + sizeof(TXTFILEITEM /*SIFILEITEM*/) + lenData + 1;
		if(FALSE == PlxBrowIsFlashAvailabe((unsigned long)fileUnit.lItemSize, (const char *) GetPBUIPushBoxDirectory()))
		{
			PLIB_MessageBox(PMBTYPE_ERROR, NULL, (const WCHAR * )get_string(STR_ID_PLX_BROW_SAVEPAGE_ERR_NOFLASHSPACE),UI_POPUP_NOTIFYDURATION_TIME);
			return -3;
		}

		fileHandle = NewAndOpenFile(szFileName);
		if (0 > fileHandle) {
#ifdef 	__PLXBROW_DEBUG_
			PlxTrace("[%d]  WBPushSaveNew -----> PUSH_TEXT : NewAndOpenFile return failed!", __LINE__);
#endif
			return -2;
		}
		FS_Seek(fileHandle, 0, SEEK_SET);
		FS_Write(fileHandle, &fileUnit, sizeof(FILEUNIT), &written);
		FS_Write(fileHandle, &txtItem, sizeof(TXTFILEITEM), &written);
		FS_Write(fileHandle, pData, lenData + 1, &written);
		FS_Close(fileHandle);
#ifdef 	__PLXBROW_DEBUG_
		PlxTrace("[%d]  WBPushSaveNew -----> PUSH_SI: Write new push to %s", __LINE__,szFileName);
		PlxTrace("write fileUnit %d bytes", written);
		PlxTrace("write txtItem %d bytes", written);
		PlxTrace("write pData %d bytes", written);
		PlxTrace("pData[%d] : %s   ",lenData, pData);
#endif
		break;
	default:
#ifdef 	__PLXBROW_DEBUG_
		PlxTrace("[%d]  WBPushSaveNew -----> unknown push type = %d", __LINE__, classPush);
#endif
		return -1;
	}

	if(TRUE == bIsPushLoad)
	{
		if(0 == AddPushItem((U16 *)szFileName))
			curSelItem ++;
	}
	
	//enter the new push arrived screen.
	EntryNewPushArrivedScreen();
	
	return 0;
}


/****************************************************************************
* Function	EntryNewPushArrivedScreen
* Purpose	
* Params	
* Return	
* Remarks	
\****************************************************************************/
static void EntryNewPushArrivedScreen(void)
{
	int      nToneId = 0;
	int	  	 nImageId = IMG_ID_PLX_BROW_NEW_PUSH_ARRIVED;

	SetIdleScreenWapStatusIcon(TRUE, TRUE);
	if ( IsKeyPadLockState ()/* && IsMMIInIdleState()*/) 
	{
		PLIB_MessageBox(PMBTYPE_PUSHARRIVE, NULL, (const WCHAR *)get_string(STR_ID_PLX_BROW_PUSHBOX_NEWPUSHARRIVED), 5000);
	}
	else
	{
//		if ( GetKeyHandler(KEY_END, KEY_EVENT_DOWN) != WBPushKeyEndHandler )
//			ExternEndKeyDownFuncPtr = GetKeyHandler(KEY_END, KEY_EVENT_DOWN);
		if(0 == ValidateExEndKeyHandler())
			RegisterExEndKeyHandler(GetKeyHandler(KEY_END,KEY_EVENT_DOWN));
		PLIB_ConfirmBox(NULL, (const WCHAR *)get_string(STR_ID_PLX_BROW_PUSHBOX_NEWPUSHARRIVED),
		         NULL, NULL, (void*)&nImageId, 0, (void *)&nToneId, 0,AddNewPushComfirmCB);
		SetKeyHandler(WBPushKeyEndHandler, KEY_END,KEY_EVENT_DOWN);
	}
}


/****************************************************************************
* Function	WBPushGetHeader
* Purpose	get push item's header
* Params	
* Return	
* Remarks	
\****************************************************************************/
int WBPushGetHeader(U16 *fileName, PFILEUNIT pFileUnit){
	S32 fileHandle;
	UINT nRead;


	fileHandle = FS_Open(fileName, FS_READ_ONLY);
	if (fileHandle < 0) {
#ifdef 	__PLXBROW_DEBUG_
		char utf8[128];
		PlxWideCharToUTF8((char *)fileName, pixtel_UI_strlen((unsigned short*)fileName), utf8, sizeof(utf8));
		PlxTrace ("[%d]  WBPushGetHeader -----> FS_Open[%s][%d]", __LINE__, utf8, fileHandle);
#endif 
		return -1;
	}
	FS_Seek(fileHandle, 0, SEEK_SET);
	FS_Read(fileHandle, pFileUnit, sizeof(FILEUNIT), &nRead);
	if(nRead != sizeof(FILEUNIT))
	{
		FS_Close(fileHandle);
#ifdef 	__PLXBROW_DEBUG_
		PlxTrace ("[%d]  WBPushGetHeader -----> sizeof(FILEUNIT) != nRead!", __LINE__);
#endif 
		return  -2;
	}
#ifdef 	__PLXBROW_DEBUG_
		PlxTrace ("[%d]  WBPushGetHeader -----> pFileUnit->class =%d  pFileUnit->lItemSize=%d!", __LINE__,pFileUnit->class, pFileUnit->lItemSize);
#endif 
	
	if(pFileUnit->class != PUSH_TEXT && pFileUnit->class != PUSH_SI)
	{
		FS_Close(fileHandle);
#ifdef 	__PLXBROW_DEBUG_
		PlxTrace ("[%d]  WBPushGetHeader ----->  pFileUnit->class is error!",  __LINE__);
#endif 
		return  -3;
	}
	if((pFileUnit->class == PUSH_SI &&  pFileUnit->lItemSize < sizeof(FILEUNIT) + sizeof(SIFILEITEM)) ||

⌨️ 快捷键说明

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