📄 plxuilib.c
字号:
{"image/jpeg", "jpeg"},
{"image/pipeg", "jfjf"},
{"image/tiff", "tiff"},
{"image/tiff", "tif"},
{"image/png", "png"},
{"image/vnd.wap.wbmp", "wbmp"},
{"text/plain", "txt"},
{"text/plain", "c"},
{"text/plain", "h"},
{"text/plain", "bas"},
{"text/richtext", "rtx"},
{"text/html", "htm"},
{"text/html", "html"},
{"text/html", "stm"},
{"text/xml", "xml"},
{"text/rtf", "rtf"},
{"text/rtf", "css"},
{"text/css", "css"},
{"text/x-vard", "vcf"},
{"text/x-versit", "ver"},
{"text/x-calendar", "vcs"},
{"text/calendar", "vcs"},
{"text/x-imelody", "imy"},
{"video/mpeg", "mpeg"},
{"video/mpeg", "mp2"},
{"video/mpeg", "mpa"},
{"video/mpeg", "mpe"},
{"video/mpeg", "mpg"},
{"video/mpeg", "mpv2"},
{"video/3gpp", "3gp"},
{"video/quicktime", "mov"},
{"video/quicktime", "qt"},
{"video/x-la-asf", "lsf"},
{"video/x-la-asf", "lsx"},
{"video/x-ms-asf", "asf"},
{"video/x-ms-asf", "asr"},
{"video/x-ms-asf", "asx"},
{"video/x-msvideo", "avi"},
{"video/x-pn-realaudio", "rm"},
{"video/x-sgi-movie", "movie"},
{"multipart/mixed", ""},
{NULL, NULL}
};
static char * lookUpContentTable
(const char * name, const char * ext);
static void FMoniterOnExit (void);
static unsigned char FMoniterOnDelete (void * data);
static unsigned long GetFreeFsSize(WCHAR * path);
static void FMoniterEntry (void);
static void DisplayMediaInfo (void);
static void MediaInfoEntry (void);
static void MediaOptionEntry (void);
static void PreviewMedia (void);
static void MakeMediaInfo (void);
static int CheckMediaType (char * ext);
#ifdef _SAVEDATA_TEMPFILE
static int SaveTempFile (WCHAR * dstPath, WCHAR * ext, void * data, int datalen);
static void SelectPath (void);
#endif
void PLIB_SaveDownloadData (void * data, int datalen, const char * contentType,
const WCHAR* defFileName, int preview, void (*callback)(PLIBEVENT event))
{
char * extention = NULL;
if ( gUserNotify.cbSaveData )
return;
if ( data == NULL || datalen <= 0 ) {
return;
}
// if ( contentType >= CONTYPECOUNT ) // invalid content type
// return;
gUserNotify.cbSaveData = callback;
memset ((char*)&gSaveDataPara, 0, sizeof(gSaveDataPara));
if ( defFileName ) {
int length;
char ext[(MAX_SAVEDATA_EXT+1)*2];
WCHAR * ptr = myunicodestrchr (defFileName, '.');
if ( ptr != NULL ) {
UnicodeToAnsii ((char *)ext, (char *)(ptr+1));
extention = lookUpContentTable (NULL, (const char *)ext);
if ( extention ) {
AnsiiToUnicodeString ((char *)gSaveDataPara.ext, (char*)extention);
}
else {
extention = lookUpContentTable (contentType, NULL);
if ( extention ) {
AnsiiToUnicodeString ((char *)gSaveDataPara.ext, (char*)extention);
}
else {
pfnUnicodeStrcpy ((char*)gSaveDataPara.ext, (char*)(ptr+1));
}
}
length = ptr - defFileName;
length = (length > MAX_SAVEDATA_NAME) ? MAX_SAVEDATA_NAME : length;
memcpy ((char*)gSaveDataPara.name, (char*)defFileName, length*sizeof(WCHAR));
gSaveDataPara.name[length] = 0x0000;
}
else {
extention = lookUpContentTable (contentType, NULL);
if ( extention ) {
AnsiiToUnicodeString ((char *)gSaveDataPara.ext, (char*)extention);
}
pfnUnicodeStrncpy ((char*)gSaveDataPara.name, (char*)defFileName, MAX_SAVEDATA_NAME);
}
}
else {
extention = lookUpContentTable (contentType, NULL);
if ( extention ) {
AnsiiToUnicodeString ((char *)gSaveDataPara.ext, (char*)extention);
}
gSaveDataPara.name[0] = 0x0000;
}
#ifdef _SAVEDATA_TEMPFILE
gSaveDataPara.fhandle = SaveTempFile (gSaveDataPara.tmppath, gSaveDataPara.ext, data, datalen);
if ( gSaveDataPara.fhandle <= 0 ) {
if ( callback ) {
gUserNotify.cbSaveData = NULL;
callback (PEVENT_FSFAIL);
}
return;
}
gSaveDataPara.fsize = datalen;
#else
gSaveDataPara.pdata = PlxAppMalloc (datalen);
if ( gSaveDataPara.pdata == NULL ) {
if ( callback ) {
gUserNotify.cbSaveData = NULL;
callback (PEVENT_FSFAIL);
}
return;
}
memcpy ((char*)gSaveDataPara.pdata, (char*)data, datalen);
gSaveDataPara.datalen = datalen;
#endif
EntryNewScreen (SCR_ID_PLX_UIL_FMONITOR, FMoniterOnExit, NULL, NULL);
SetDelScrnIDCallbackHandler(SCR_ID_PLX_UIL_FMONITOR, FMoniterOnDelete);
#ifdef UILIB_DEBUG
PlxTrace ("[PLXUILIB] before MediaInfoEntry preview = %d...", preview);
#endif
if ( preview ) {
MediaInfoEntry ();
}
else {
SelectPath ();
}
}
#ifdef SIMCOM_6217
static void cbInteralSelPath (void* info)
#else
static void cbInteralSelPath (void* info, int count)
#endif
{
/* user select back */
if ( info == NULL ) {
SavedataNotify (PEVENT_USERABORT);
return;
}
pfnUnicodeStrcpy ((char*)gSaveDataPara.path, (char*)info);
InputFilenameEntry ();
}
static void SelectPath (void)
{
FMGR_FILTER filter;
AnsiiToUnicodeString ((char*)gSaveDataPara.path, (char*)DEFAULTPATH);
FMGR_FILTER_INIT (&filter);
FMGR_FILTER_SET(&filter, FMGR_TYPE_FOLDER);
#ifdef PROJECT_SIMCOM_6217
mmi_fmgr_select_path_and_enter (APP_MULTIMEDIA, FMGR_SELECT_FOLDER, filter,
(char*)gSaveDataPara.path, (PsFuncPtr)cbInteralSelPath);
#else
mmi_fmgr_select_path_and_enter (APP_MULTIMEDIA, FMGR_SELECT_FOLDER, filter,
(char*)gSaveDataPara.path, (PsExtFuncPtr)cbInteralSelPath);
#endif
}
static void MediaInfoOnExit (void);
static void MediaInfoOnCancel (void);
static void MediaInfoEntry (void)
{
U8* guiBuffer=NULL;
int len;
EntryNewScreen (SCR_ID_PLX_UIL_MEDIAINFO,
MediaInfoOnExit, MediaInfoEntry, NULL);
#ifdef UILIB_DEBUG
PlxTrace ("[PLXUILIB] MediaInfoEntry...");
#endif
MakeMediaInfo ();
len = pfnUnicodeStrlen ((char *)gSaveDataPara.info) * 2;
ShowCategory74Screen(STR_ID_PLX_UIL_INFO, IMG_ID_PLX_UIL_INFO,
STR_GLOBAL_OPTIONS, IMG_GLOBAL_OPTIONS,
STR_GLOBAL_BACK, IMG_GLOBAL_BACK,
(U8*)gSaveDataPara.info, len, guiBuffer);
SetLeftSoftkeyFunction (MediaOptionEntry, KEY_EVENT_UP);
SetRightSoftkeyFunction(MediaInfoOnCancel, KEY_EVENT_UP);
}
static void MediaInfoOnExit (void)
{
}
static void MediaInfoOnCancel (void)
{
SavedataNotify (PEVENT_USERABORT);
}
static void MediaOptionOnCancel (void);
static void MediaOptionOnHilight (S32 idx);
static void MediaOptionEntry (void)
{
U16 numItems;
U16 nStrItemList[2]; /* only done and input method */
U8* guiBuffer;
EntryNewScreen(SCR_ID_PLX_UIL_MEDIAOPTION, NULL, MediaOptionEntry, NULL);
guiBuffer = GetCurrGuiBuffer (SCR_ID_PLX_UIL_MEDIAOPTION);
SetParentHandler (MENU_ID_PLX_UIL_MEDIAOPTION);
numItems = GetNumOfChild (MENU_ID_PLX_UIL_MEDIAOPTION);
GetSequenceStringIds(MENU_ID_PLX_UIL_MEDIAOPTION, nStrItemList);
RegisterHighlightHandler (MediaOptionOnHilight);
ShowCategory52Screen (STR_GLOBAL_OPTIONS, 0,
STR_GLOBAL_OK, IMG_GLOBAL_OK,
STR_GLOBAL_BACK, IMG_GLOBAL_BACK,
numItems, nStrItemList, (U16*)gIndexIconsImageList,
NULL, 0, 0, guiBuffer );
SetRightSoftkeyFunction (MediaOptionOnCancel, KEY_EVENT_UP);
SetKeyHandler (MediaOptionOnCancel, KEY_LEFT_ARROW, KEY_EVENT_DOWN);
}
static void MediaOptionOnCancel (void)
{
GoBackHistory ();
}
static void MediaOptionOnHilight (S32 idx)
{
if ( idx == 0 ) {
SetLeftSoftkeyFunction (PreviewMedia, KEY_EVENT_UP);
ClearKeyHandler (KEY_RIGHT_ARROW, KEY_EVENT_DOWN);
}
else {
SetLeftSoftkeyFunction (SelectPath, KEY_EVENT_UP);
SetKeyHandler (SelectPath, KEY_RIGHT_ARROW, KEY_EVENT_DOWN);
}
}
static void PreviewImage (void);
static void PreviewAudio (void);
static void PreviewVideo (void);
static void PreviewMedia (void)
{
char ext[12];
int type;
UnicodeToAnsii ((char *)ext, (char *)gSaveDataPara.ext);
type = CheckMediaType (ext);
switch (type) {
case MEDIA_IMAGE :
PreviewImage ();
break;
case MEDIA_AUDIO :
PreviewAudio ();
break;
case MEDIA_VIDEO :
PreviewVideo ();
break;
default:
DisplayPopup ((U8*)GetString(STR_ID_PLX_UIL_NOTSUPPORT), IMG_GLOBAL_ERROR, 1,
UI_POPUP_NOTIFYDURATION_TIME, ERROR_TONE);
break;
}
}
#include "gdi_include.h"
#include "wgui_categories_multimedia.h"
static void PreviewImage (void)
{
EntryNewScreen(SCR_ID_PLX_UIL_PREVIEW, NULL,
PreviewImage, NULL);
ShowCategory222Screen( STR_ID_PLX_UIL_PREVIEW,
IMG_ID_PLX_UIL_PREVIEW,
0, 0,
STR_GLOBAL_BACK, IMG_GLOBAL_BACK,
GDI_COLOR_WHITE,
NULL,
(char *)gSaveDataPara.tmppath,
0,
NULL);
ClearAllKeyHandler();
SetRightSoftkeyFunction(GoBackHistory, KEY_EVENT_UP);
}
#ifdef __MMI_AUDIO_PLAYER__
#include "mdi_datatype.h"
#include "AudioPlayerDef.h"
#include "AudioPlayerPlayList.h"
#include "AudioPlayerProt.h"
#endif
static void PreviewAudio (void)
{
#ifndef __MMI_AUDIO_PLAYER__
DisplayPopup (STR_ID_PLX_UIL_NOTSUPPORT, IMG_GLOBAL_ERROR, 1,
UI_POPUP_NOTIFYDURATION_TIME, ERROR_TONE);
#else
mmi_audply_single_play((PU16)gSaveDataPara.tmppath, NULL);
#endif
}
#ifdef __MMI_VIDEO__
#include "VdoPlyGProt.h"
#endif
static void PreviewVideo (void)
{
#ifndef __MMI_VIDEO__
DisplayPopup ((U8 *)GetString(STR_ID_PLX_UIL_NOTSUPPORT), IMG_GLOBAL_ERROR, 1,
UI_POPUP_NOTIFYDURATION_TIME, ERROR_TONE);
#else
mmi_vdoply_entry_player_screen_from_file((char *)gSaveDataPara.tmppath, 0);
#endif
}
static void MakeMediaSize (char * out, int size);
static void MakeMediaInfo (void)
{
char t[32];
pfnUnicodeStrcpy (gSaveDataPara.info,
GetString(STR_ID_PLX_UIL_TYPE));
AnsiiToUnicodeString(t, "\r\n");
pfnUnicodeStrcat (gSaveDataPara.info, t);
if ( pfnUnicodeStrlen ((char*)gSaveDataPara.ext) > 0 )
pfnUnicodeStrcat (gSaveDataPara.info, (char*)gSaveDataPara.ext);
else
pfnUnicodeStrcat (gSaveDataPara.info, GetString(STR_ID_PLX_UIL_UNKNOWN));
AnsiiToUnicodeString(t, "\r\n");
pfnUnicodeStrcat (gSaveDataPara.info, t);
pfnUnicodeStrcat (gSaveDataPara.info,
GetString(STR_ID_PLX_UIL_SIZE));
AnsiiToUnicodeString(t, "\r\n");
pfnUnicodeStrcat (gSaveDataPara.info, t);
MakeMediaSize (t, gSaveDataPara.fsize);
pfnUnicodeStrcat (gSaveDataPara.info, t);
}
static void MakeMediaSize (char * out, int size)
{
int num, num1, num2;
char t[32];
num = (size * 10 + 1023) / 1024;
num1 = num / 10;
num2 = num % 10;
if ( num1 == 0 ) {
sprintf (t, "%dB", size);
}
else if ( num2 == 0 ) {
sprintf (t, "%dK", num1);
}
else {
sprintf (t, "%d.%dK", num1, num2);
}
AnsiiToUnicodeString(out, t);
}
static void FMoniterEntry (void)
{
}
static void FMoniterOnExit (void)
{
history ScrDA; /* Variable to hold the history data*/
ScrDA.scrnID = SCR_ID_PLX_UIL_FMONITOR;
ScrDA.entryFuncPtr = FMoniterEntry;
AddHistory(ScrDA);
}
static unsigned char FMoniterOnDelete (void * inhis)
{
/* unexpected exit */
if ( !gSaveDataPara.isback ) {
SAVEDATACALLBACK callback = gUserNotify.cbSaveData;
#ifdef _SAVEDATA_TEMPFILE
if ( gSaveDataPara.fhandle > 0 ) {
FS_Delete (gSaveDataPara.tmppath);
}
#else
if ( gSaveDataPara.pdata )
PlxAppFree (gSaveDataPara.pdata);
#endif
if ( callback ) {
gUserNotify.cbSaveData = NULL;
callback (PEVENT_BACKIDLE);
}
}
return 0;
}
static void InputFilenameEntry (void)
{
unsigned char* guiBuffer;
EntryNewScreen (SCR_ID_PLX_UIL_INPUT, NULL, InputFilenameEntry, NULL);
guiBuffer = GetCurrGuiBuffer (SCR_ID_PLX_UIL_INPUT);
ShowCategory5Screen ( STR_ID_PLX_UIL_FILENAME, 0,
STR_GLOBAL_OPTIONS, IMG_GLOBAL_OPTIONS,
STR_GLOBAL_BACK, IMG_GLOBAL_BACK,
INPUT_TYPE_ALPHANUMERIC_SENTENCECASE,
(unsigned char*) gSaveDataPara.name,
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -