зеркало из https://github.com/mozilla/gecko-dev.git
257 строки
7.6 KiB
C++
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 );
|
|
}
|
|
|