gecko-dev/cmd/winfe/compmapi.cpp

257 строки
7.6 KiB
C++

/* -*- Mode: C++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 2 -*-
*
* The contents of this file are subject to the Netscape Public License
* Version 1.0 (the "NPL"); you may not use this file except in
* compliance with the NPL. You may obtain a copy of the NPL at
* http://www.mozilla.org/NPL/
*
* Software distributed under the NPL is distributed on an "AS IS" basis,
* WITHOUT WARRANTY OF ANY KIND, either express or implied. See the NPL
* for the specific language governing rights and limitations under the
* NPL.
*
* The Initial Developer of this code under the NPL is Netscape
* Communications Corporation. Portions created by Netscape are
* Copyright (C) 1998 Netscape Communications Corporation. All Rights
* Reserved.
*/
#include "stdafx.h"
#include "allxpstr.h"
#include "xpgetstr.h"
typedef struct {
char * pszTo;
char * pszSubject;
char * pszOrganization;
} MAPI_HEADER_INFO;
static MAPI_HEADER_INFO _temp;
#ifdef XP_WIN32
extern "C" int FE_LoadExchangeInfo(
MWContext * context,
char * pszTo, char * pszCc, char * pszBcc,
char * pszOrganization,
char * pszNewsgroups,
char * pszSubject);
#endif
#define MAX_MAIL_SIZE 300000
extern "C" void FE_DoneMailTo(PrintSetup * print)
{
ASSERT(print);
MWContext * context = (MWContext *) print->carg;
CGenericFrame * pFrame = wfe_FrameFromXPContext(context);
ASSERT(pFrame);
fclose(print->out);
char * buffer;
buffer = (char *) malloc(MAX_MAIL_SIZE + 5);
FILE * fp = fopen(print->filename, "r");
int len = fread(buffer, 1, MAX_MAIL_SIZE + 5, fp);
buffer[len] = '\0';
fclose(fp);
if(theApp.m_hPostalLib) {
if(theApp.m_bInitMapi) {
if(theApp.m_fnOpenMailSession) {
POSTCODE status = (*theApp.m_fnOpenMailSession) (NULL, NULL);
if(status == POST_OK) {
theApp.m_bInitMapi = FALSE;
}
}
}
// create mail window with no quoting
if(theApp.m_fnComposeMailMessage)
(*theApp.m_fnComposeMailMessage) ((const char *) _temp.pszTo,
(const char *) "", /* no refs field. BAD! BUG! */
(const char *) _temp.pszOrganization,
(const char *) "", /* no URL */
(const char *) _temp.pszSubject,
buffer,
(const char *) "",
(const char *) "");
if (strlen(_temp.pszTo))
free(_temp.pszTo);
if (strlen(_temp.pszSubject))
free(_temp.pszSubject);
if (strlen(_temp.pszOrganization))
free(_temp.pszOrganization);
// get rid of the file and free the memory
remove(print->filename);
// XP_FREE(print->filename);
// print->filename = NULL;
XP_FREE(buffer);
return;
}
}
extern "C" int FE_LoadExchangeInfo(
MWContext * context,
char * pszTo, char * pszCc, char * pszBcc,
char * pszOrganization,
char * pszNewsgroups,
char * pszSubject)
{
#ifdef MOZ_NGLAYOUT
XP_ASSERT(0);
#else
_temp.pszTo = _temp.pszSubject = _temp.pszOrganization = "";
if(!context)
return(FALSE);
if(!theApp.m_hPostalLib)
return(FALSE);
History_entry * hist_ent = NULL;
if(context)
hist_ent = SHIST_GetCurrent(&(context->hist));
CString csURL;
if(hist_ent)
csURL = hist_ent->address;
else
csURL = "";
if (!pszSubject || !strlen(pszSubject))
pszSubject = (char *)(const char *)csURL;
//Set hist_ent to NULL if context->title is "Message Composition"
//This is a nasty way of determining if we're in here in response
//to "Mail Doc" or "New Mail Message".
//Also, if there's To: field info present(pBar->m_pszTo) then
//we know that it's a Mailto: and set hist_ent to NULL
//Without this differentiation the code always sends the contents
//of the previously mailed document even when someone chooses
//"New Mail Message" or "Mailto:"
if(!strcmp(XP_GetString(MK_MSG_MSG_COMPOSITION), context->title) || strlen(pszTo) )
hist_ent = NULL;
// make sure there was a document loaded
if(!hist_ent) {
if(theApp.m_bInitMapi) {
if(theApp.m_fnOpenMailSession) {
POSTCODE status = (*theApp.m_fnOpenMailSession) (NULL, NULL);
if(status == POST_OK) {
theApp.m_bInitMapi = FALSE;
}
else {
return(FALSE);
}
}
}
// create mail window with no quoting
if(theApp.m_fnComposeMailMessage)
(*theApp.m_fnComposeMailMessage) (
(const char *)pszTo,
(const char *) "", /* no refs field. BAD! BUG! */
(const char *)pszOrganization,
(const char *) "", /* no URL */
(const char *)pszSubject,
"",
(const char *)pszCc,
(const char *)pszBcc);
return(TRUE);
}
URL_Struct * URL_s = SHIST_CreateURLStructFromHistoryEntry(context, hist_ent);
// Zero out the saved data
memset(&URL_s->savedData, 0, sizeof(URL_s->savedData));
PrintSetup print;
XL_InitializeTextSetup(&print);
print.width = 68;
print.prefix = "";
print.eol = "\r\n";
char * name = WH_TempName(xpTemporary, NULL);
if(!name) {
return(FALSE);
}
print.out = fopen(name, "w");
print.completion = (XL_CompletionRoutine) FE_DoneMailTo;
print.carg = context;
print.filename = name;
print.url = URL_s;
if (pszSubject && strlen(pszSubject))
_temp.pszSubject = strdup(pszSubject);
if (pszTo && strlen(pszTo))
_temp.pszTo = strdup(pszTo);
if (pszOrganization && strlen(pszOrganization))
_temp.pszOrganization = strdup(pszOrganization);
// leave pCompose window alive until completion routine
XL_TranslateText(context, URL_s, &print);
#endif /* MOZ_NGLAYOUT */
return(TRUE);
}
void InitializeMapi(void)
{
}
extern "C" void DoAltMailComposition(MWContext *pContext)
{
if ( pContext )
{
FE_LoadExchangeInfo(
pContext,
"",
"",
"",
(char *)FE_UsersOrganization(),
"",
"");
}
}
extern "C" void FE_AlternateCompose(
char * from, char * reply_to, char * to, char * cc, char * bcc,
char * fcc, char * newsgroups, char * followup_to,
char * organization, char * subject, char * references,
char * other_random_headers, char * priority,
char * attachment, char * newspost_url, char * body)
{
if(theApp.m_bInitMapi) {
if(theApp.m_fnOpenMailSession) {
POSTCODE status = (*theApp.m_fnOpenMailSession) (NULL, NULL);
if(status == POST_OK) {
theApp.m_bInitMapi = FALSE;
}
else
return;
}
}
// create mail window with no quoting
if(theApp.m_fnComposeMailMessage)
(*theApp.m_fnComposeMailMessage) (
(const char *)to,
(const char *)references,
(const char *)(organization ? organization : FE_UsersOrganization()),
(const char *)"",
(const char *)subject,
(const char *)body,
(const char *)cc,
(const char *)bcc );
}