📄 plxmmsmessage.c
字号:
void* msg = NULL;
#ifdef MMS_DEBUG
PlxTrace("EditReplyAll\r\n");
#endif
MMSE_SelectFolder(mmse, mmsmsg->folder);
msg = MMSE_CreateMessage(mmse, id);
if(msg)
{
//get from and to fields
from = (char*)MMSE_GetHeaderField(mmse,
msg, "From");
to = (char*)MMSE_GetHeaderField(mmse,
msg, "To");
cc = (char*)MMSE_GetHeaderField(mmse,
msg, "Cc");
if(from)
from_len = MMS_Strlen(from);
if(to)
to_len = MMS_Strlen(to);
if(cc)
cc_len = MMS_Strlen(cc);
//len += 2;
//mmsmsg->to[0] = 0;
MMS_Memset((void*)mmsmsg->to, 0, MAX_TO_LEN);
MMS_Memset((void*)mmsmsg->cc, 0, MAX_TO_LEN);
//to
if(to)
{
if(to_len >= MAX_TO_LEN-1)
{
MMS_Strncat(mmsmsg->to, to, MAX_TO_LEN-2);
len -= MAX_TO_LEN-2;
}
else
{
MMS_Strcat(mmsmsg->to, to);
len -= to_len;
}
}
if(from && !MMS_Strstr(mmsmsg->to, from))
{
if(from_len < len-1)
{
MMS_Strcat(mmsmsg->to, ";");
len -= 1;
if(from_len < len)
{
MMS_Strcat(mmsmsg->to, from);
}
}
}
//cc
if(cc)
{
if(cc_len >= MAX_TO_LEN-1)
{
MMS_Strncat(mmsmsg->cc, cc, MAX_TO_LEN-2);
}
else
{
MMS_Strcat(mmsmsg->cc, cc);
}
}
//sub
//mmsmsg->sub[0] = 0;
mmsmsg->sub = NULL;
mmsmsg->sub_len = 0;
to = (char*)MMSE_GetHeaderField(mmse, msg, "Subject");
if(to)
{
#ifdef MMS_DEBUG
PlxTrace("sub=%s\r\n", to);
#endif
mmsmsg->sub_len = MMS_Strlen(to) + 5;
mmsmsg->sub = (char*)MMS_Malloc(mmsmsg->sub_len);
if(!mmsmsg->sub)
{
mmsmsg->sub_len = 0;
MMSE_CloseMessage(mmse, msg);
return 0;
}
MMS_Strcpy(mmsmsg->sub, "RE:");
#ifdef MMS_DEBUG
PlxTrace("sub=%s\r\n", mmsmsg->sub);
#endif
MMS_Strcat(mmsmsg->sub, to);
/*
MMS_Memcpy((void*)(mmsmsg->sub+3),
(void*)to, MAX_SUB_LEN-3);
mmsmsg->sub[MAX_SUB_LEN-1] = 0;
*/
#ifdef MMS_DEBUG
PlxTrace("sub=%s\r\n", mmsmsg->sub);
#endif
}
else
{
mmsmsg->sub_len = MMS_Strlen("RE:") + 1;
mmsmsg->sub = (char*)MMS_Malloc(mmsmsg->sub_len);
if(mmsmsg->sub)
MMS_Strcpy(mmsmsg->sub, "RE:");
}
//close the original message
MMSE_CloseMessage(mmse, msg);
}
}
return 0;
}
/***************************************************************************
* Function mmsmsg_AddContent
* Purpose
* Params
* Return
* Remarks
\**************************************************************************/
BOOL mmsmsg_AddContent(MmsMessage* msg, char* name, int nType, const char* type,
long length, void MMS_HUGE* data, void* param,
int left, int top, int width, int height, BOOL bAtt)
{
int mmse_err;
MMSECONTENTINFO content_info;
if(!msg || !msg->mmse || !msg->msg)// || !name)
{
mmsmsg_SetLastError(msg, MMS_MSG_ERR_FAILURE);
return FALSE;
}
MMS_Memset((void*)&content_info, 0, sizeof(MMSECONTENTINFO));
content_info.left = left;
content_info.top = top;
content_info.width = width;
content_info.height = height;
content_info.type = nType;
//content_info.flag = 0;
//content_info.bengin = content_info.end = 0;
content_info.alt = name;
content_info.content.name = name;
content_info.content.type = (char*)type;
content_info.content.length = length;
content_info.content.pData = data;
content_info.content.bAttachment = bAtt;
if(!data)
{
content_info.content.read = MmsParamRead;
content_info.content.param = param;
if(!al_AddNode(&(msg->add_list), param))
{
mmsmsg_SetLastError(msg, MMS_MSG_ERR_FAILURE);
return FALSE;
}
}
if(bAtt)
{
if((mmse_err = MMSE_AddContent(msg->mmse, msg->msg, &(content_info.content))) < 0)
{
switch(mmse_err)
{
case MMSE_FAILURE:
mmsmsg_SetLastError(msg, MMS_MSG_ERR_FAILURE);
break;
case MMSE_MM_SIZE_ERROR:
mmsmsg_SetLastError(msg, MMS_MSG_ERR_INS_OBJTOOBIG);
break;
case MMSE_SUCCESS:
mmsmsg_SetLastError(msg, MMS_MSG_ERR_SUCCESS);
break;
}
if(!data)
{
al_DelNode(&(msg->add_list), param);
}
return FALSE;
}
}
else
{
if((mmse_err = MMSE_AddSlideContent(msg->mmse, msg->msg, &content_info)) < 0)
{
switch(mmse_err)
{
case MMSE_FAILURE:
mmsmsg_SetLastError(msg, MMS_MSG_ERR_FAILURE);
break;
case MMSE_MM_SIZE_ERROR:
mmsmsg_SetLastError(msg, MMS_MSG_ERR_INS_OBJTOOBIG);
break;
case MMSE_SUCCESS:
mmsmsg_SetLastError(msg, MMS_MSG_ERR_SUCCESS);
break;
}
if(!data)
{
al_DelNode(&(msg->add_list), param);
}
return FALSE;
}
}
if(!bAtt)
{
switch(nType)
{
case MMS_TEXT:
msg->text_modified = TRUE;
break;
case MMS_IMAGE:
msg->image_modified = TRUE;
break;
case MMS_AUDIO:
msg->sound_modified = TRUE;
break;
default:;
}
}
#ifdef MMS_FLUSHOBJ
MMSE_Flush(msg->mmse, msg->msg);
#endif
msg->message_modified = TRUE;
mmsmsg_SetLastError(msg, MMS_MSG_ERR_SUCCESS);
return TRUE;
}
/***************************************************************************
* Function mmsmsg_GetAttCount
* Purpose
* Params
* Return
* Remarks
\**************************************************************************/
int mmsmsg_GetAttCount(MmsMessage* msg)
{
int i;
int count;
PMMSECONTENT content;
if(!msg || !msg->mmse || !msg->msg)
return 0;
count = 0;
i = 1;
content = MMSE_GetContent(msg->mmse, msg->msg, i);
while(content)
{
if(content->bAttachment)
count++;
i++;
content = MMSE_GetContent(msg->mmse, msg->msg, i);
}
return count;
}
/***************************************************************************
* Function mmsmsg_ReleaseContent
* Purpose
* Params
* Return
* Remarks
\**************************************************************************/
PMMSECONTENT mmsmsg_ReleaseContent(MmsMessage* msg, PMMSECONTENT content)
{
return NULL;
}
/***************************************************************************
* Function mmsmsg_DelText
* Purpose
* Params
* Return
* Remarks
\**************************************************************************/
BOOL mmsmsg_DelText(MmsMessage* msg)
{
MMSESLIDEINFO info;
if(!msg || !msg->mmse || !msg->msg)
return FALSE;
//no slide
if(MMSE_GetSlideCount(msg->mmse, msg->msg) == 0)
return FALSE;
//get slide info
if(MMSE_GetSlideInfo(msg->mmse, msg->msg, &info) < 0)
return FALSE;
if(!info.pTextContent)
return TRUE;
//delete add list node
if(info.pTextContent->param)
{
al_DelNode(&(msg->add_list), info.pTextContent->param);
}
//delete content
MMSE_DeleteSlideContent(msg->mmse, msg->msg, MMS_TEXT);
msg->text_modified = TRUE;
msg->message_modified = TRUE;
return TRUE;
}
/***************************************************************************
* Function mmsmsg_DelImage
* Purpose
* Params
* Return
* Remarks
\**************************************************************************/
BOOL mmsmsg_DelImage(MmsMessage* msg)
{
MMSESLIDEINFO info;
if(!msg || !msg->mmse || !msg->msg)
return FALSE;
if(MMSE_GetSlideCount(msg->mmse, msg->msg) == 0)
return FALSE;
//get slide info
if(MMSE_GetSlideInfo(msg->mmse, msg->msg, &info) < 0)
return FALSE;
if(!info.pImageContent)
return TRUE;
//delete add list node
if(info.pImageContent->param)
{
al_DelNode(&(msg->add_list), info.pImageContent->param);
}
MMSE_DeleteSlideContent(msg->mmse, msg->msg, MMS_IMAGE);
msg->image_modified = TRUE;
msg->message_modified = TRUE;
return TRUE;
}
/***************************************************************************
* Function mmsmsg_DelSound
* Purpose
* Params
* Return
* Remarks
\**************************************************************************/
BOOL mmsmsg_DelSound(MmsMessage* msg)
{
MMSESLIDEINFO info;
if(!msg || !msg->mmse || !msg->msg)
return FALSE;
if(MMSE_GetSlideCount(msg->mmse, msg->msg) == 0)
return FALSE;
//get slide info
if(MMSE_GetSlideInfo(msg->mmse, msg->msg, &info) < 0)
return FALSE;
if(!info.pAudioContent)
return TRUE;
//delete add list node
if(info.pAudioContent->param)
{
al_DelNode(&(msg->add_list), info.pAudioContent->param);
}
MMSE_DeleteSlideContent(msg->mmse, msg->msg, MMS_AUDIO);
msg->sound_modified = TRUE;
msg->message_modified = TRUE;
return TRUE;
}
/***************************************************************************
* Function mmsmsg_GetContentData
* Purpose
* Params
* Return
* Remarks
\**************************************************************************/
unsigned char MMS_HUGE* mmsmsg_GetContentData(MmsMessage* msg,
int type, long* data_len)
{
long i = 0;
long len = 0;
unsigned char* data = NULL;
READPROC func_read;
MMSESLIDEINFO info;
PMMSECONTENT content = NULL;
if(!msg || !msg->mmse || !msg->msg || !data_len)
return NULL;
if(MMSE_GetSlideInfo(msg->mmse, msg->msg, &info) < 0)
return NULL;
switch(type)
{
case MMS_TEXT:
content = info.pTextContent;
break;
case MMS_IMAGE:
content = info.pImageContent;
break;
case MMS_AUDIO:
content = info.pAudioContent;
break;
default:
return NULL;
}
if(!content)
return NULL;
len = content->length;
*data_len = len;
if(len <= 0)
return NULL;
if(type != MMS_IMAGE)
data = (unsigned char*)MMS_MALLOC(sizeof(unsigned char) * len+1);
else
data = (unsigned char*)MMS_MALLOC(sizeof(unsigned char) * (len+8+1));
if(!data)
return NULL;
if(content->pData) //get data from content
{
MMS_Memcpy((void*)data, (void*)content->pData, len);
}
else //from callback
{
func_read = content->read;
len = content->length;
i = 0;
//get content data
while((i = func_read(content->param,
(void MMS_HUGE*)(data+i), len)) > 0)
{
len -= i;
}
}
return data;
}
/***************************************************************************
* Function mmsmsg_GetContentLength
* Purpose
* Params
* Return
* Remarks
\**************************************************************************/
long mmsmsg_GetContentLength(MmsMessage* msg, int type)
{
MMSESLIDEINFO info;
PMMSECONTENT content;
if(!msg || !msg->mmse || !msg->msg)
return 0;
if(MMSE_GetSlideInfo(msg->mmse, msg->msg, &info) < 0)
return 0;
switch(type)
{
case MMS_TEXT:
content = info.pTextContent;
break;
case MMS_IMAGE:
content = info.pImageContent;
break;
case MMS_AUDIO:
content = info.pAudioContent;
break;
default:
return 0;
}
if(content)
return content->length;
return 0;
}
/***************************************************************************
* Function mmsmsg_GetGivenContentData
* Purpose
* Params
* Return
* Remarks
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -