mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-11-01 06:35:42 +00:00
1214 lines
33 KiB
C++
1214 lines
33 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 "cmdparse.h"
|
|
#ifdef MOZ_MAIL_NEWS
|
|
#include "wfemsg.h"
|
|
#include "msgcom.h"
|
|
#include "addrfrm.h"
|
|
#endif /* MOZ_MAIL_NEWS */
|
|
#include "template.h"
|
|
#include "mainfrm.h"
|
|
#include "woohoo.h"
|
|
#ifdef JAVA
|
|
#include "java.h"
|
|
#endif
|
|
|
|
|
|
//
|
|
// Parse the command line for component launch arguments
|
|
// Set bRemove to TRUE if you want to remove the switch from pszCommandLine
|
|
BOOL CNetscapeApp::ParseComponentArguments(char * pszCommandLine,BOOL bRemove)
|
|
{ //simply look for the switch and set to true if it exists. We use it later on.
|
|
|
|
|
|
if (IsRuntimeSwitch("-BROWSER", pszCommandLine, bRemove)){
|
|
m_bCreateBrowser = TRUE;
|
|
|
|
#ifdef MOZ_MAIL_NEWS
|
|
}else if (IsRuntimeSwitch("-FOLDERS", pszCommandLine, bRemove)){
|
|
m_bCreateFolders = TRUE;
|
|
|
|
}else if (IsRuntimeSwitch("-NEWS", pszCommandLine, bRemove)){
|
|
m_bCreateNews = TRUE;
|
|
|
|
}else if (IsRuntimeSwitch("-NETPROFILE", pszCommandLine, bRemove)){
|
|
m_bNetworkProfile = TRUE;
|
|
|
|
}else if (IsRuntimeSwitch("-COMPOSE", pszCommandLine, bRemove)){
|
|
m_bCreateCompose = TRUE;
|
|
#endif /* MOZ_MAIL_NEWS */
|
|
|
|
#ifdef EDITOR
|
|
}else if (IsRuntimeSwitch("-EDIT", pszCommandLine, bRemove)){
|
|
m_bCreateEdit = TRUE;
|
|
#endif // EDITOR
|
|
|
|
#ifdef MOZ_MAIL_NEWS
|
|
}else if (IsRuntimeSwitch("-INBOX", pszCommandLine, bRemove)){
|
|
m_bCreateInbox = TRUE;
|
|
|
|
// rhp - for MAPI startup
|
|
}else if (IsRuntimeSwitch("-MAPICLIENT", pszCommandLine, bRemove)){
|
|
m_bCreateInboxMAPI = TRUE;
|
|
// rhp - for MAPI startup
|
|
|
|
}else if (IsRuntimeSwitch("-ADDRESS", pszCommandLine, bRemove)){
|
|
m_bCreateAddress = TRUE;
|
|
#endif /* MOZ_MAIL_NEWS */
|
|
}else if (IsRuntimeSwitch("-IMPORT", pszCommandLine, bRemove)){
|
|
m_bCreateLDIF_IMPORT = TRUE;
|
|
|
|
}else if (IsRuntimeSwitch("-EXPORT", pszCommandLine, bRemove)){
|
|
m_bCreateLDIF_EXPORT = TRUE;
|
|
|
|
}else return FALSE; //nothing to do here!!
|
|
|
|
if (strlen(pszCommandLine) > 1)
|
|
{
|
|
m_bHasArguments = TRUE;
|
|
}
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
// METHOD: ImportExportLDIF - Imports or exports the specified ldif or html
|
|
// address book file.
|
|
// PARAMETERS: pBook - A pointer to the the address book.
|
|
// pszFileName - A fully qualified path including file name.
|
|
// action - STARTUP_IMPORT or STARTUP_EXPORT defined in
|
|
// netscape.h
|
|
// CALLERS: Initinstance(), LaunchComponentWindow()
|
|
///////////////////////////////////////////////////////////////////////////////
|
|
BOOL CNetscapeApp::ImportExportLDIF(ABook *pBook, char *pszFileName, int action)
|
|
{
|
|
#ifdef MOZ_MAIL_NEWS
|
|
if (action == STARTUP_IMPORT)
|
|
{
|
|
AB_ImportFromFileNamed(pBook, pszFileName);
|
|
}
|
|
else if (action == STARTUP_EXPORT)
|
|
{
|
|
AB_ExportToFileNamed(pBook, pszFileName);
|
|
}
|
|
#endif /* MOZ_MAIL_NEWS */
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
//Used in OnDDECommand to check the DDE string.
|
|
//Takes a command line string and searches for the specified arguements
|
|
//Similar to ParseComponentArguments except it doesn't have option to remove argument
|
|
BOOL CNetscapeApp::ExistComponentArguments(char * pszCommandLine)
|
|
{ //simply look for the switch and set to true if it exists. We use it later on.
|
|
|
|
// This is not an #ifdef, just here to make the braces match for all combinations
|
|
// of ifdefs below.
|
|
if (0) {
|
|
|
|
#ifdef MOZ_MAIL_NEWS
|
|
} else if (strcasestr(pszCommandLine, "-INBOX" )){
|
|
m_bCreateInbox = TRUE;
|
|
|
|
// rhp - for MAPI startup
|
|
} else if (strcasestr(pszCommandLine, "-MAPICLIENT" )){
|
|
m_bCreateInboxMAPI = TRUE;
|
|
// rhp - for MAPI startup
|
|
|
|
} else if (strcasestr(pszCommandLine, "-FOLDERS" )){
|
|
m_bCreateFolders = TRUE;
|
|
|
|
} else if (strcasestr(pszCommandLine, "-FOLDER" )){
|
|
m_bCreateFolder = TRUE;
|
|
|
|
} else if (strcasestr(pszCommandLine, "-NEWS" )){
|
|
m_bCreateNews = TRUE;
|
|
|
|
} else if (strcasestr(pszCommandLine, "-MAIL" )){
|
|
m_bCreateMail = TRUE;
|
|
|
|
#endif /* MOZ_MAIL_NEWS */
|
|
} else if (strcasestr(pszCommandLine, "-NETCASTER" )){
|
|
m_bCreateNetcaster = TRUE;
|
|
|
|
#ifdef MOZ_MAIL_NEWS
|
|
} else if (strcasestr(pszCommandLine, "-COMPOSE" )){
|
|
m_bCreateCompose = TRUE;
|
|
#endif // MOZ_MAIL_NEWS
|
|
|
|
#ifdef EDITOR
|
|
} else if (strcasestr(pszCommandLine,"-EDIT" )){
|
|
m_bCreateEdit = TRUE;
|
|
#endif // EDITOR
|
|
|
|
#ifdef MOZ_MAIL_NEWS
|
|
} else if (strcasestr(pszCommandLine,"-ADDRESS" )){
|
|
m_bCreateAddress = TRUE;
|
|
#endif // MOZ_MAIL_NEWS
|
|
|
|
} else if (strcasestr(pszCommandLine,"-IMPORT" )){
|
|
m_bCreateLDIF_IMPORT = TRUE;
|
|
|
|
} else if (strcasestr(pszCommandLine,"-EXPORT" )){
|
|
m_bCreateLDIF_EXPORT = TRUE;
|
|
|
|
// This *&#! stupid !@#$% has to go here! (above -browser)
|
|
} else if (strcasestr(pszCommandLine,"-NEW_ACCOUNT" )){
|
|
// Any second instance trying to go to Account Setup
|
|
// is likely to have problems. Setting m_bAccountSetup
|
|
// will cause an error below.
|
|
m_bAccountSetup = TRUE;
|
|
m_bAlwaysDockTaskBar= TRUE;
|
|
m_bAccountSetupStartupJava = TRUE;
|
|
|
|
} else if (strcasestr(pszCommandLine,"-START_JAVA" )) {
|
|
m_bAccountSetupStartupJava = TRUE;
|
|
|
|
|
|
} else if (strcasestr(pszCommandLine,"-BROWSER" )){
|
|
m_bCreateBrowser = TRUE;
|
|
|
|
} else if (strcasestr(pszCommandLine,"-NEW_PROFILE" )){
|
|
m_bCreateNewProfile = TRUE;
|
|
|
|
} else if (strcasestr(pszCommandLine,"-PROFILE_MANAGER" )){
|
|
m_bProfileManager = TRUE;
|
|
|
|
#ifdef JAVA
|
|
} else if (strcasestr(pszCommandLine,"-javadebug" )){
|
|
m_bCreateJavaDebugAgent = TRUE;
|
|
#endif
|
|
|
|
} else {
|
|
return FALSE; //nothing to do here!!
|
|
}
|
|
|
|
if (strlen(pszCommandLine) > 1) {
|
|
m_bHasArguments = TRUE;
|
|
}
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
/**************************************************************************************
|
|
CNetscapeApp::BuildCmdLineList Introduce by AJ 1/9/97
|
|
|
|
Purpose: Build a token list from a given token string after first removing a
|
|
specified flag which is not to be included in the token list.
|
|
|
|
Parameters:
|
|
const char* pszRemoveString: Flag to be stripped from the string
|
|
CStringList &rlstrList: List to hold tokens pulled from the string
|
|
char* pszCmdLine: Command line to pull tokens from.
|
|
|
|
Called by: Called from OnDDECommand to parse out command line arguments.
|
|
|
|
Returns: Fills rlstrList with any tokens found on the command line with the exception
|
|
of the pszRemoveString parameter. If pszRemoveString is NULL, then the
|
|
string will be trunkated to the first starting '"' in the string.
|
|
|
|
Expecting: pszCmdLine is expected to be passed a string in the form of
|
|
[cmdline("-FLAG message.txt @attach.txt")] for example.
|
|
***************************************************************************************/
|
|
|
|
BOOL CNetscapeApp::BuildCmdLineList(const char* pszRemoveString, CCmdParse &cmdParse, CStringList &rlstrList, char* pszCmdLine)
|
|
{
|
|
char *pszTemp = NULL;
|
|
char *pFirst = NULL;
|
|
char *pEnd = NULL;
|
|
char *pszRemove = NULL;
|
|
char *pFind = NULL;
|
|
BOOL bError = FALSE;
|
|
|
|
|
|
StrAllocCopy(pszRemove,pszRemoveString);
|
|
//make sure we are playing the same game
|
|
pszCmdLine = _strupr(pszCmdLine);
|
|
pszRemove = _strupr(pszRemove);
|
|
|
|
pFind = strstr(pszCmdLine, "CMDLINE");
|
|
|
|
pFirst = strstr(pszCmdLine, pszRemove);
|
|
|
|
if (!pFirst)
|
|
{ //just in case no switch was given
|
|
pFirst = strchr(pszCmdLine,'"');
|
|
}
|
|
else
|
|
{ //jump over the flag since we don't want it on the list
|
|
pFirst += XP_STRLEN(pszRemove);
|
|
}
|
|
|
|
if (pFirst && (pEnd = strrchr(pFirst,'"')) && pFind)
|
|
{ //parse out the arguments and put them on the list
|
|
*pEnd = NULL;
|
|
cmdParse.Init(pFirst,rlstrList);
|
|
if(!(bError = cmdParse.ProcessCmdLine()))
|
|
{
|
|
AfxMessageBox(IDS_CMDLINE_ERROR3);
|
|
}
|
|
}
|
|
else if (pFirst && !pFind)
|
|
{//The DDE command stuff was already parsed out
|
|
cmdParse.Init(pFirst,rlstrList);
|
|
if(!(bError = cmdParse.ProcessCmdLine()))
|
|
{
|
|
AfxMessageBox(IDS_CMDLINE_ERROR3);
|
|
}
|
|
}
|
|
|
|
//free the string we allocated to play the same game
|
|
XP_FREE(pszRemove);
|
|
return bError;
|
|
}
|
|
|
|
/***************************************************************************
|
|
* CNetscapeApp::LaunchComponentWindow
|
|
*
|
|
* PARAMETERS: iStartupMode. Tells us which component is to be launch.
|
|
* It is initialized by SetStartupMode(..).
|
|
*
|
|
* RETURNS:
|
|
* void
|
|
*
|
|
* DESCRIPTION:
|
|
* This function launches the specified component window. Called from
|
|
* only from OnDDECommand(..). Assumption is that we are the first
|
|
* instance of navigator and a second instance has requested us to do
|
|
* something.
|
|
*
|
|
****************************************************************************/
|
|
|
|
void CNetscapeApp::LaunchComponentWindow(int iStartupMode, char *pszCmdLine)
|
|
{
|
|
void WFE_AddNewFrameToFrameList(CGenericFrame * pFrame);
|
|
void OpenDraftExit (URL_Struct *url_struct, int/*status*/,MWContext *pContext);
|
|
|
|
CStringList lstrArgumentList;
|
|
CCmdParse cmdParse;
|
|
switch(iStartupMode)
|
|
{
|
|
#ifdef MOZ_MAIL_NEWS
|
|
case STARTUP_INBOX:
|
|
WFE_MSGOpenInbox();
|
|
break;
|
|
|
|
// rhp - for MAPI startup
|
|
case STARTUP_CLIENT_MAPI:
|
|
{
|
|
CGenericDoc *pDoc = (CGenericDoc *)theApp.m_ViewTmplate->OpenDocumentFile(NULL, FALSE);
|
|
if (pDoc)
|
|
{
|
|
CFrameGlue *pFrame = (pDoc->GetContext())->GetFrame();
|
|
if(pFrame)
|
|
{
|
|
CFrameWnd *pFrameWnd = pFrame->GetFrameWnd();
|
|
if (pFrameWnd)
|
|
{
|
|
extern void StoreMAPIFrameWnd(CFrameWnd *pFrameWnd);
|
|
|
|
pFrameWnd->ShowWindow(SW_SHOWMINIMIZED);
|
|
StoreMAPIFrameWnd(pFrameWnd);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
// rhp - for MAPI startup
|
|
|
|
case STARTUP_FOLDER:
|
|
WFE_MSGOpenInbox(); // Will eventually open a specific folder
|
|
break;
|
|
|
|
case STARTUP_MAIL:
|
|
// CFolderFrame::Open(); //opens the collections window
|
|
// Per John's request we are opening the inbox for a -mail flag.
|
|
WFE_MSGOpenInbox();
|
|
|
|
break;
|
|
|
|
case STARTUP_FOLDERS:
|
|
WFE_MSGOpenFolders(); //opens the collections window
|
|
break;
|
|
|
|
|
|
case STARTUP_COMPOSE:
|
|
|
|
if (!BuildCmdLineList("-COMPOSE",cmdParse, lstrArgumentList,pszCmdLine) )
|
|
return; //error occured!!
|
|
|
|
if(!lstrArgumentList.GetCount())
|
|
MSG_Mail(m_pBmContext); // starts the mail composition window.
|
|
else
|
|
{ //handle any extra arguments for this flag here.
|
|
char *pTemp;
|
|
URL_Struct* pURL;
|
|
CString strUrl;
|
|
|
|
int nArgCount = lstrArgumentList.GetCount();
|
|
if (nArgCount == 1)
|
|
{//either a message or an attachment. If it's an attachment it will be prefixed with an "@" symbol
|
|
pTemp = (char*) (const char*)lstrArgumentList.GetHead();
|
|
if(*pTemp != '@' && *pTemp!='-') //decide whether it's a message or an attachment
|
|
{//it's a message
|
|
CFileStatus rStatus;
|
|
if(CFile::GetStatus(pTemp,rStatus))
|
|
{
|
|
WFE_ConvertFile2Url(strUrl, pTemp);
|
|
pURL = NET_CreateURLStruct(strUrl, NET_DONT_RELOAD);
|
|
StrAllocCopy(pURL->content_type,"message/rfc822");
|
|
NET_GetURL (pURL, FO_OPEN_DRAFT, m_pBmContext,
|
|
OpenDraftExit);
|
|
//Load it into the compose window
|
|
}
|
|
else
|
|
{
|
|
AfxMessageBox(IDS_CMDLINE_ERROR1);
|
|
MSG_Mail(m_pBmContext);
|
|
//were just going to act as if we couldn't read what they gave us and continue
|
|
}
|
|
}
|
|
else
|
|
{//it's an attachment
|
|
pTemp += 1;
|
|
CFileStatus rStatus;
|
|
if(CFile::GetStatus(pTemp,rStatus))
|
|
{
|
|
if (!LaunchComposeAndAttach(lstrArgumentList))
|
|
{
|
|
AfxMessageBox(IDS_CMDLINE_ERROR3);
|
|
MSG_Mail(m_pBmContext);
|
|
}
|
|
//Load it into the compose window
|
|
}
|
|
else
|
|
{
|
|
AfxMessageBox(IDS_CMDLINE_ERROR1);
|
|
MSG_Mail(m_pBmContext);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (nArgCount == 2)
|
|
{
|
|
//it's a message and has an attachment(s)
|
|
if (!LaunchComposeAndAttach(lstrArgumentList))
|
|
{
|
|
AfxMessageBox(IDS_CMDLINE_ERROR3);
|
|
MSG_Mail(m_pBmContext);
|
|
}
|
|
}
|
|
else
|
|
{//command line is not in a recognizable format for this flag
|
|
AfxMessageBox(IDS_CMDLINE_ERROR3);
|
|
MSG_Mail(m_pBmContext);
|
|
//ERROR!!!
|
|
}
|
|
}
|
|
}
|
|
break;
|
|
|
|
case STARTUP_ADDRESS:
|
|
CAddrFrame::Open();
|
|
break;
|
|
|
|
case STARTUP_IMPORT:
|
|
if (!BuildCmdLineList("-IMPORT",cmdParse, lstrArgumentList,pszCmdLine) )
|
|
return; //error occured!!
|
|
|
|
if(!lstrArgumentList.GetCount())
|
|
return; //nothing on the list
|
|
else
|
|
{
|
|
char *pTemp = (char*) (const char*)lstrArgumentList.GetHead();
|
|
ImportExportLDIF(m_pABook, pTemp, iStartupMode);
|
|
}
|
|
return; //we don't want to fall through on this case
|
|
|
|
case STARTUP_EXPORT:
|
|
if (!BuildCmdLineList("-EXPORT",cmdParse, lstrArgumentList,pszCmdLine) )
|
|
return; //error occured!!
|
|
|
|
if(!lstrArgumentList.GetCount())
|
|
return; //nothing on the list
|
|
else
|
|
{
|
|
char *pTemp = (char*) (const char*)lstrArgumentList.GetHead();
|
|
ImportExportLDIF(m_pABook, pTemp, iStartupMode);
|
|
}
|
|
return;//we don't want to fall through on this case
|
|
|
|
case STARTUP_NEWS:
|
|
//starts the news and opens the default news server and group in split pain.
|
|
WFE_MSGOpenNews();
|
|
break;
|
|
#endif // MOZ_MAIL_NEWS
|
|
|
|
#ifdef EDITOR
|
|
case STARTUP_EDITOR:
|
|
RemoveDDESyntaxAndSwitch("-edit",pszCmdLine);
|
|
//we do this outside the switch
|
|
break;
|
|
#endif /* EDITOR */
|
|
|
|
// Outside MOZ_MAIL_NEWS and EDITOR flags in case lite and retail ever happen together...
|
|
case STARTUP_ACCOUNT_SETUP:
|
|
// Account Setup can't DDE
|
|
AfxMessageBox(IDS_CMDLINE_ERROR7);
|
|
return;
|
|
|
|
case STARTUP_BROWSER:
|
|
RemoveDDESyntaxAndSwitch("-browser",pszCmdLine);
|
|
|
|
//we do this outside the switch
|
|
break;
|
|
|
|
#ifdef JAVA
|
|
case STARTUP_NETCASTER:
|
|
FEU_OpenNetcaster() ;
|
|
break;
|
|
|
|
case STARTUP_JAVA_DEBUG_AGENT:
|
|
LJ_StartDebugger(LJDebugPort_SharedMemory);
|
|
break;
|
|
|
|
case STARTUP_JAVA:
|
|
//we decided to ignore the -start_java flag on second instance
|
|
//and just simply continue to start navigator
|
|
break;
|
|
#endif
|
|
|
|
case 0:
|
|
{
|
|
AfxMessageBox(IDS_CMDLINE_ERROR4);
|
|
}
|
|
return;
|
|
|
|
|
|
default:
|
|
break;
|
|
}
|
|
|
|
|
|
// rhp - added STARTUP_CLIENT_MAPI for starting MAPI
|
|
if ((iStartupMode & STARTUP_BROWSER || iStartupMode & STARTUP_EDITOR || // if startup browser or editor
|
|
!(iStartupMode & (STARTUP_JAVA_DEBUG_AGENT|STARTUP_BROWSER|STARTUP_NEWS|STARTUP_MAIL|STARTUP_ADDRESS
|
|
|STARTUP_INBOX|STARTUP_CLIENT_MAPI|STARTUP_COMPOSE|STARTUP_FOLDER|STARTUP_FOLDERS)) || // or invalid data
|
|
m_bKioskMode )) { // or kiosk mode - start browser
|
|
|
|
#ifdef EDITOR
|
|
// The Editor is started INSTEAD of the Browser,
|
|
if ( bIsGold && (iStartupMode & STARTUP_EDITOR) )
|
|
{
|
|
FE_LoadUrl(pszCmdLine, LOAD_URL_COMPOSER);
|
|
return;
|
|
}
|
|
else
|
|
#endif /* EDITOR */
|
|
{
|
|
CFrameWnd *pFrameWnd = FEU_GetLastActiveFrame(MWContextBrowser);
|
|
if (!theApp.m_ViewTmplate)
|
|
{
|
|
AfxMessageBox(IDS_NO_RUN_WHILE_PROFILING);
|
|
return;
|
|
}
|
|
else if ( pszCmdLine != NULL && strlen(pszCmdLine) > 0)
|
|
{
|
|
CString strUrl;
|
|
WFE_ConvertFile2Url(strUrl, pszCmdLine);
|
|
|
|
// Open it in a new window.
|
|
// Use the first window as the provider of the context.
|
|
URL_Struct *pUrl = NET_CreateURLStruct(strUrl, NET_DONT_RELOAD);
|
|
if(m_pFrameList && m_pFrameList->GetMainContext())
|
|
{
|
|
MWContext *pContext = m_pFrameList->GetMainContext()->GetContext();
|
|
CFE_CreateNewDocWindow(pContext, pUrl);
|
|
}
|
|
else
|
|
{
|
|
CFE_CreateNewDocWindow(NULL, pUrl);
|
|
}
|
|
return;
|
|
}
|
|
else
|
|
theApp.m_ViewTmplate->OpenDocumentFile(NULL);
|
|
}
|
|
|
|
|
|
CMainFrame *pFrame;
|
|
CGenericFrame *pGenFrame;
|
|
if (!theApp.m_pFrameList)
|
|
return;
|
|
for(pGenFrame = theApp.m_pFrameList; pGenFrame->m_pNext; pGenFrame = pGenFrame->m_pNext) {
|
|
/* No Body */;
|
|
}
|
|
|
|
pFrame = (CMainFrame *) pGenFrame;
|
|
|
|
// The new frame will be the last one in the application's frame list.
|
|
|
|
pFrame->OnLoadHomePage();
|
|
|
|
// possibly clear URL bar focus here. - JRE
|
|
}
|
|
|
|
}
|
|
|
|
CString CNetscapeApp::BuildDDEFile()
|
|
{
|
|
char szbuffer[256];
|
|
char szName[256];
|
|
CString strPrefix;
|
|
|
|
strPrefix.LoadString(IDS_STUB_PREFIX);
|
|
|
|
|
|
#ifdef XP_WIN32
|
|
int nSize = GetTempPath(511, szbuffer);
|
|
if (nSize == 0)
|
|
{
|
|
AfxMessageBox(IDS_NO_TEMP_DIRECTORY);
|
|
return (CString)" ";
|
|
}
|
|
szbuffer[nSize+1] = '\0'; //terminate the string
|
|
GetTempFileName(szbuffer,strPrefix, 0,szName);
|
|
#else
|
|
GetTempFileName(0,strPrefix, 0,szName);
|
|
#endif
|
|
return (CString)szName;
|
|
|
|
}
|
|
|
|
|
|
void CNetscapeApp::BuildStubFile()
|
|
{
|
|
char szbuffer[256];
|
|
char szName[256];
|
|
CString strPrefix;
|
|
|
|
strPrefix.LoadString(IDS_STUB_PREFIX);
|
|
|
|
if (!m_strStubFile.IsEmpty())
|
|
return;
|
|
|
|
#ifdef XP_WIN32
|
|
int nSize = GetTempPath(511, szbuffer);
|
|
if (nSize == 0)
|
|
{
|
|
AfxMessageBox(IDS_NO_TEMP_DIRECTORY);
|
|
return;
|
|
}
|
|
szbuffer[nSize+1] = '\0'; //terminate the string
|
|
GetTempFileName(szbuffer,strPrefix, 0,szName);
|
|
#else
|
|
GetTempFileName(0,strPrefix, 0,szName);
|
|
#endif
|
|
m_strStubFile = szName;
|
|
|
|
}
|
|
|
|
#ifdef MOZ_MAIL_NEWS
|
|
BOOL CNetscapeApp::LaunchComposeAndAttach(CStringList &rlstrArgumentList)
|
|
{
|
|
|
|
void OpenDraftExit (URL_Struct *url_struct, int/*status*/,MWContext *pContext);
|
|
|
|
CFileStatus rStatus;
|
|
MSG_AttachmentData *pAttachList = NULL;
|
|
POSITION rPos = rlstrArgumentList.GetHeadPosition();
|
|
char *pszMessage = NULL;
|
|
char *pszAttachments = NULL;
|
|
|
|
BuildStubFile();
|
|
|
|
if (rlstrArgumentList.GetCount() > 1)
|
|
{
|
|
|
|
pszMessage = (char*)(const char*)rlstrArgumentList.GetNext(rPos);
|
|
pszAttachments = (char*)(const char*)rlstrArgumentList.GetNext(rPos);
|
|
|
|
if ( (*pszMessage == '@') || (*pszMessage == '-') )
|
|
return FALSE;
|
|
|
|
//Make sure the files exist.
|
|
if(!CFile::GetStatus(pszMessage,rStatus))
|
|
return FALSE;
|
|
|
|
if(!CFile::GetStatus(pszAttachments+1,rStatus))
|
|
return FALSE;
|
|
}
|
|
else
|
|
{ //there was no message file given so we have to fake one to get compose to start
|
|
CStdioFile file;
|
|
if(!CFile::GetStatus(m_strStubFile,rStatus))
|
|
{
|
|
if (!file.Open(m_strStubFile, CFile::modeCreate | CFile::modeWrite))
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (!file.Open(m_strStubFile, CFile::modeWrite))
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
pszAttachments = (char*)(const char*)rlstrArgumentList.GetNext(rPos);
|
|
}
|
|
|
|
pAttachList = BuildAttachmentListFromFile(pszAttachments);
|
|
|
|
|
|
if (pAttachList)
|
|
{
|
|
CString strUrl;
|
|
if (pszMessage)
|
|
WFE_ConvertFile2Url(strUrl, pszMessage);
|
|
else
|
|
WFE_ConvertFile2Url(strUrl, m_strStubFile);
|
|
|
|
URL_Struct *pURL = NET_CreateURLStruct(strUrl, NET_DONT_RELOAD);
|
|
StrAllocCopy(pURL->content_type,"message/rfc822");
|
|
pURL->fe_data = (void*)pAttachList;
|
|
NET_GetURL (pURL, FO_CMDLINE_ATTACHMENTS, m_pBmContext,
|
|
OpenDraftExit);
|
|
|
|
return TRUE;
|
|
}
|
|
else
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
MSG_AttachmentData * CNetscapeApp::BuildAttachmentListFromFile(char *pszAttachFile)
|
|
{
|
|
//handle a single attachment here
|
|
if (*pszAttachFile == '-')
|
|
{
|
|
pszAttachFile += 1;
|
|
CFileStatus rStatus;
|
|
if (CFile::GetStatus(pszAttachFile, rStatus))
|
|
{
|
|
MSG_AttachmentData * pAttach =
|
|
(MSG_AttachmentData *)XP_CALLOC(2,sizeof(MSG_AttachmentData));
|
|
XP_MEMSET (pAttach, 0, (2) * sizeof (MSG_AttachmentData));
|
|
CString cs;
|
|
WFE_ConvertFile2Url(cs,(const char *)pszAttachFile);
|
|
pAttach->url = XP_STRDUP(cs);
|
|
ASSERT(pAttach->url);
|
|
return pAttach;
|
|
}
|
|
}//handle multiple attachments contained in a list file
|
|
else if(*pszAttachFile == '@')
|
|
{
|
|
//we have to read from the file of attachments
|
|
CStdioFile file;
|
|
MSG_AttachmentData * pAttachList = NULL;
|
|
MSG_AttachmentData *pAttach = NULL;
|
|
pszAttachFile += 1;
|
|
|
|
if (!file.Open(pszAttachFile,CFile::modeRead | CFile::typeText))
|
|
return NULL; //The list file did not exist!!!!
|
|
|
|
CString strAttach;
|
|
CFileStatus rStatus;
|
|
CStringList rlstrFileList;
|
|
|
|
#ifdef XP_WIN16
|
|
char buf[256];
|
|
while(file.ReadString(buf,255))
|
|
{
|
|
if(CFile::GetStatus(buf,rStatus))
|
|
rlstrFileList.AddTail((CString)buf);
|
|
else
|
|
if ( IDNO == AfxMessageBox(IDS_CMDLINE_ERROR6, MB_YESNO |MB_ICONEXCLAMATION))
|
|
return NULL;
|
|
memset(buf,'\0',256);
|
|
}//build an intermediate list which will be used to create a MSG_AttachmentData list
|
|
#else
|
|
while(file.ReadString(strAttach))
|
|
{
|
|
if(CFile::GetStatus(strAttach,rStatus))
|
|
rlstrFileList.AddTail(strAttach);
|
|
else
|
|
if ( IDNO == AfxMessageBox(IDS_CMDLINE_ERROR6, MB_YESNO |MB_ICONEXCLAMATION))
|
|
return NULL;
|
|
}//build an intermediate list which will be used to create a MSG_AttachmentData list
|
|
#endif
|
|
int nNumFiles = rlstrFileList.GetCount();
|
|
|
|
if (nNumFiles > 0)
|
|
{
|
|
//make sure the attachment is a real file.
|
|
CString cs;
|
|
int count = 0;
|
|
pAttachList = (MSG_AttachmentData *)XP_CALLOC(nNumFiles +1,sizeof(MSG_AttachmentData));
|
|
XP_MEMSET (pAttachList, 0, (nNumFiles +1) * sizeof (MSG_AttachmentData));
|
|
|
|
if (!pAttachList)
|
|
return NULL;
|
|
|
|
POSITION pos1, pos2;
|
|
for( pos1 = rlstrFileList.GetHeadPosition(); ( pos2 = pos1 ) != NULL; )
|
|
{
|
|
strAttach = rlstrFileList.GetNext( pos1 );
|
|
|
|
WFE_ConvertFile2Url(cs,(const char *)strAttach);
|
|
pAttachList[count++].url = XP_STRDUP(cs);
|
|
}
|
|
return pAttachList;
|
|
}
|
|
}
|
|
return NULL;
|
|
|
|
}
|
|
#endif /* MOZ_MAIL_NEWS */
|
|
|
|
////////////////////////////////////////////////////////////////////////////
|
|
//Function: CNetscapeApp::SetStartupMode
|
|
//
|
|
//Parameters: iStartupMode.
|
|
//
|
|
//Purpose: Initialize iStartupMode with the appropriate component launch
|
|
// value.
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
void CNetscapeApp::SetStartupMode(int *iStartupMode)
|
|
{
|
|
// set launch type and clear global flag.
|
|
if (m_bAccountSetup) { // MUST be first to ensure only in browser
|
|
*iStartupMode= STARTUP_ACCOUNT_SETUP;
|
|
m_bAccountSetup= FALSE;
|
|
|
|
#ifdef EDITOR
|
|
}else if ( m_bCmdEdit || m_bCreateEdit) {
|
|
*iStartupMode = STARTUP_EDITOR;
|
|
m_bCmdEdit=m_bCreateEdit = 0;
|
|
#endif /* EDITOR */
|
|
|
|
#ifdef MOZ_MAIL_NEWS
|
|
}else if (m_bCreateInbox) {
|
|
*iStartupMode= STARTUP_INBOX;
|
|
m_bCreateInbox= 0;
|
|
|
|
// rhp - for MAPI startup
|
|
}else if (m_bCreateInboxMAPI) {
|
|
*iStartupMode= STARTUP_CLIENT_MAPI;
|
|
m_bCreateInboxMAPI= 0;
|
|
// rhp - for MAPI startup
|
|
|
|
}else if (m_bCreateFolder) {
|
|
*iStartupMode= STARTUP_FOLDER;
|
|
m_bCreateFolder= 0;
|
|
|
|
}else if (m_bCreateFolders) {
|
|
*iStartupMode= STARTUP_FOLDERS;
|
|
m_bCreateFolders= 0;
|
|
|
|
}else if (m_bCreateCompose) {
|
|
*iStartupMode= STARTUP_COMPOSE;
|
|
m_bCreateCompose= 0;
|
|
|
|
}else if (m_bCreateAddress) {
|
|
*iStartupMode= STARTUP_ADDRESS;
|
|
m_bCreateAddress= 0;
|
|
|
|
#endif /* MOZ_MAIL_NEWS */
|
|
}else if (m_bCreateLDIF_IMPORT) {
|
|
*iStartupMode= STARTUP_IMPORT;
|
|
m_bCreateLDIF_IMPORT= 0;
|
|
|
|
}else if (m_bCreateLDIF_EXPORT) {
|
|
*iStartupMode= STARTUP_EXPORT;
|
|
m_bCreateLDIF_EXPORT= 0;
|
|
|
|
#ifdef MOZ_MAIL_NEWS
|
|
} else if (m_bCreateMail) { //same as folder
|
|
*iStartupMode= STARTUP_MAIL;
|
|
m_bCreateMail= 0;
|
|
|
|
#endif /* MOZ_MAIL_NEWS */
|
|
} else if (m_bCreateNetcaster) {
|
|
*iStartupMode= STARTUP_NETCASTER;
|
|
m_bCreateNetcaster= 0;
|
|
|
|
#ifdef MOZ_MAIL_NEWS
|
|
} else if (m_bCreateNews) {
|
|
*iStartupMode= STARTUP_NEWS;
|
|
m_bCreateNews= 0;
|
|
|
|
//over ride prefference settings for this mode
|
|
#endif /* MOZ_MAIL_NEWS */
|
|
} else if (m_bCreateBrowser) {
|
|
*iStartupMode= STARTUP_BROWSER;
|
|
m_bCreateBrowser= 0;
|
|
|
|
//we don't want to handle preferences in the first instance
|
|
//if requested to do so by a second instance
|
|
}else if (m_bCreateNewProfile) {
|
|
*iStartupMode= (*iStartupMode == 0 ? 0: *iStartupMode);
|
|
m_bCreateNewProfile= 0;
|
|
|
|
}else if (m_bProfileManager) {
|
|
*iStartupMode= (*iStartupMode == 0 ? 0: *iStartupMode);
|
|
m_bProfileManager= 0;
|
|
|
|
}else if (m_bCreateJavaDebugAgent) {
|
|
*iStartupMode= STARTUP_JAVA_DEBUG_AGENT;
|
|
m_bCreateJavaDebugAgent = 0;
|
|
|
|
}else if (m_bAccountSetupStartupJava) {
|
|
m_bAccountSetupStartupJava = FALSE;
|
|
*iStartupMode= STARTUP_JAVA;
|
|
}
|
|
else {
|
|
// Implied component checking here.
|
|
if(m_CmdLineLoadURL) {
|
|
switch(NET_URL_Type(m_CmdLineLoadURL)) {
|
|
case NETHELP_TYPE_URL: {
|
|
*iStartupMode = STARTUP_NETHELP;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|
|
BOOL CNetscapeApp::ProcessCommandLineDDE(char *pszDDECommand)
|
|
{
|
|
//DDE says we have something to chew on.
|
|
//so let's see what we have!
|
|
char *pszCommand = pszDDECommand;
|
|
char *pszFreeMe = NULL;
|
|
BOOL bDdeException = FALSE;
|
|
|
|
if (strcasestr(pszDDECommand,"-DDEEXCEPTION"))
|
|
{
|
|
char *pDelete = XP_STRDUP(pszDDECommand);
|
|
char *pOpen = pDelete;
|
|
|
|
if (strnicmp(pOpen, "[cmdline(\"-DDEEXCEPTION", 25) != 0)
|
|
{
|
|
pOpen += 23;
|
|
}
|
|
else
|
|
{
|
|
XP_FREE(pDelete); //Added by CLM - memory leak
|
|
return FALSE; //bad DDE command syntax
|
|
}
|
|
char *pEnd = strchr(pOpen, '"');
|
|
|
|
if (pEnd == NULL)
|
|
{
|
|
XP_FREE(pDelete); //Added by CLM - memory leak
|
|
return FALSE;
|
|
}
|
|
// trim the string, and open the file
|
|
*pEnd = '\0';
|
|
|
|
CFile fin;
|
|
if( !fin.Open( pOpen, CFile::modeRead ) )
|
|
{
|
|
XP_FREE(pDelete);
|
|
remove(pOpen);
|
|
return FALSE;
|
|
}
|
|
|
|
char *pszDDEstring = new char[fin.GetLength()+1];
|
|
memset(pszDDEstring,'\0', fin.GetLength()+1);
|
|
bDdeException = TRUE;
|
|
int nBytesRead = 0;
|
|
|
|
if (pszDDEstring)
|
|
{
|
|
int nLength = fin.GetLength();
|
|
nBytesRead = fin.Read(pszDDEstring,nLength);
|
|
pszDDEstring[nBytesRead] = NULL;
|
|
}
|
|
fin.Close();
|
|
remove(pOpen);
|
|
XP_FREEIF(pDelete);
|
|
pszFreeMe = pszDDEstring;
|
|
pszCommand = pszDDEstring;
|
|
}
|
|
|
|
|
|
|
|
if (ExistComponentArguments(pszCommand))
|
|
{
|
|
int iStartupMode = 0;
|
|
SetStartupMode(&iStartupMode);
|
|
LaunchComponentWindow(iStartupMode,pszCommand);
|
|
}
|
|
else
|
|
{ //We've got something other than an expected switch.
|
|
//It's probably a URL. Let's check it out and do the right thing.
|
|
CString strUrl;
|
|
BOOL bTranslate = TRUE;
|
|
char *pDelete = NULL;
|
|
if (!bDdeException)
|
|
{
|
|
// Copy the string to mess with.
|
|
char *pDelete = XP_STRDUP(pszCommand);
|
|
char *pOpen = pDelete;
|
|
|
|
// cmdline format is "[cmdline("%s")]" - no whitespace allowed, one per line
|
|
if (strnicmp(pOpen, "[cmdline(\"", 11) != 0)
|
|
{
|
|
pOpen += 10;
|
|
}
|
|
else
|
|
{
|
|
XP_FREE(pDelete); //Added by CLM - memory leak
|
|
return FALSE; //bad DDE command syntax
|
|
}
|
|
|
|
BOOL bJumpQuote = FALSE;
|
|
if (*pOpen == '"') {
|
|
pOpen += 1; //jump over additional quote if it is there.
|
|
bJumpQuote = TRUE;
|
|
}
|
|
|
|
// Search backwards for the end, with some smarts.
|
|
char *pEnd = strrchr(pOpen, ']');
|
|
if(pEnd) {
|
|
*pEnd = '\0';
|
|
pEnd = strrchr(pOpen, ')');
|
|
if(pEnd) {
|
|
*pEnd = '\0';
|
|
pEnd = strrchr(pOpen, '\"');
|
|
if(pEnd && bJumpQuote) {
|
|
*pEnd = '\0';
|
|
pEnd = strrchr(pOpen, '\"');
|
|
}
|
|
}
|
|
}
|
|
|
|
if (pEnd == NULL)
|
|
{
|
|
XP_FREE(pDelete); //Added by CLM - memory leak
|
|
return FALSE;
|
|
}
|
|
|
|
// trim the string, and open the file
|
|
*pEnd = '\0';
|
|
strUrl = pOpen;
|
|
}
|
|
else
|
|
{
|
|
WFE_ConvertFile2Url(strUrl, pszCommand);
|
|
}
|
|
|
|
// Handle other weird cases, like print here.
|
|
// Other code is not smart enough.
|
|
if(0 == strnicmp(strUrl, "/print", 6)) {
|
|
theApp.OnDDECommand((char *)(const char *)strUrl);
|
|
}
|
|
else {
|
|
// some URLs get handled differently.
|
|
switch(NET_URL_Type(strUrl)) {
|
|
case NETHELP_TYPE_URL: {
|
|
if(theApp.m_pSlaveCX) {
|
|
theApp.m_pSlaveCX->NormalGetUrl(strUrl);
|
|
}
|
|
break;
|
|
}
|
|
default: {
|
|
// Open it in a new window.
|
|
// Use the first window as the provider of the context.
|
|
URL_Struct *pUrl = NET_CreateURLStruct(strUrl, NET_DONT_RELOAD);
|
|
if(m_pFrameList && m_pFrameList->GetMainContext())
|
|
{
|
|
if (bTranslate)
|
|
{
|
|
MWContext *pContext = m_pFrameList->GetMainContext()->GetContext();
|
|
CFE_CreateNewDocWindow(pContext, pUrl);
|
|
}
|
|
else
|
|
{
|
|
CFrameGlue * pFrame =
|
|
CFrameGlue::GetLastActiveFrame(MWContextBrowser);
|
|
if (pFrame != NULL && pFrame->GetMainContext() &&
|
|
pFrame->GetMainContext()->GetContext() &&
|
|
!pFrame->GetMainContext()->GetContext()->restricted_target)
|
|
{
|
|
CAbstractCX * pCX = pFrame->GetMainContext();
|
|
if (pCX != NULL)
|
|
{
|
|
pCX->NormalGetUrl(strUrl);
|
|
} /* end if */
|
|
} /* end if */
|
|
else
|
|
{
|
|
CFE_CreateNewDocWindow(NULL, pUrl);
|
|
} /* end else */
|
|
} /* end else */
|
|
}
|
|
else
|
|
{
|
|
CFE_CreateNewDocWindow(NULL, pUrl);
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
if (!bDdeException)
|
|
XP_FREEIF(pDelete);
|
|
}
|
|
//handled!!
|
|
if (bDdeException)
|
|
delete pszFreeMe;
|
|
|
|
return TRUE;
|
|
}
|
|
|
|
// CLM:
|
|
// System to find previous instance of program by ourselves
|
|
// or from other applications.
|
|
// Return value from OnNetscapeGoldIsActive() in previous instance
|
|
// is hwnd of CGenericFrame-derived frame
|
|
//
|
|
BOOL CALLBACK FindNavigator( HWND hwnd, LPARAM lParam )
|
|
{
|
|
if ( hwnd == (HWND)(::SendMessage( hwnd, WM_NG_IS_ACTIVE, 0, 0 )) )
|
|
{
|
|
// Return window found and quit enumerating
|
|
*((HWND*)lParam) = hwnd;
|
|
return FALSE;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
BOOL CMapStringToObNoCase::Lookup(LPCTSTR key, CObject*& rValue) const
|
|
{
|
|
CString csKey = key;
|
|
csKey.MakeLower();
|
|
|
|
return CMapStringToOb::Lookup(csKey, rValue);
|
|
}
|
|
|
|
BOOL CMapStringToObNoCase::LookupKey(LPCTSTR key, LPCTSTR& rKey) const
|
|
{
|
|
ASSERT(0);
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
CObject*& CMapStringToObNoCase::operator[](LPCTSTR key)
|
|
{
|
|
CString csKey = key;
|
|
csKey.MakeLower();
|
|
|
|
return CMapStringToOb::operator[](csKey);
|
|
}
|
|
|
|
void CMapStringToObNoCase::SetAt(LPCTSTR key, CObject* newValue)
|
|
{
|
|
CString csKey = key;
|
|
csKey.MakeLower();
|
|
|
|
CMapStringToOb::SetAt(csKey, newValue);
|
|
}
|
|
|
|
BOOL CMapStringToObNoCase::RemoveKey(LPCTSTR key)
|
|
{
|
|
CString csKey = key;
|
|
csKey.MakeLower();
|
|
|
|
return CMapStringToOb::RemoveKey(csKey);
|
|
}
|
|
|
|
inline UINT CMapStringToObNoCase::HashKey(LPCTSTR key) const
|
|
{
|
|
CString csKey = key;
|
|
csKey.MakeLower();
|
|
return CMapStringToOb::HashKey(csKey);
|
|
}
|
|
|
|
void WFE_LJ_StartupJava(void)
|
|
{
|
|
#ifdef JAVA
|
|
LJ_StartupJava();
|
|
#endif
|
|
}
|
|
|
|
void WFE_LJ_StartDebugger(void)
|
|
{
|
|
#ifdef JAVA
|
|
LJ_StartDebugger(LJDebugPort_SharedMemory);
|
|
#endif
|
|
}
|
|
|
|
|
|
void CNetscapeApp::RemoveDDESyntaxAndSwitch(CString strSwitch, char *pszCmdLine)
|
|
{
|
|
char *pSavPosition = pszCmdLine;
|
|
|
|
if (strstr(pszCmdLine, "cmdline") )
|
|
{
|
|
char *pszFirst = strchr(pszCmdLine, '"');
|
|
if (pszFirst && *pszFirst == '"')
|
|
++pszFirst;
|
|
else
|
|
{ //we might have already ripped off the "cmdline" stuff
|
|
pszFirst = strcasestr(pszCmdLine,strSwitch);
|
|
}
|
|
|
|
char *pszNext = NULL;
|
|
if (pszFirst)
|
|
{
|
|
pszNext = strrchr(pszFirst,'"');
|
|
if (pszNext)
|
|
{
|
|
*pszNext = NULL;
|
|
pszCmdLine = pszFirst;
|
|
}
|
|
if (IsRuntimeSwitch(strSwitch,pszCmdLine,TRUE))
|
|
{
|
|
while (isspace(*pszCmdLine))
|
|
++pszCmdLine;
|
|
if (*pszCmdLine == '"')
|
|
pszCmdLine++;
|
|
if (pszCmdLine[strlen(pszCmdLine)-1] == '"')
|
|
pszCmdLine[strlen(pszCmdLine) -1] = '\0';
|
|
|
|
strcpy(pSavPosition,pszCmdLine);
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (IsRuntimeSwitch(strSwitch,pszCmdLine,TRUE))
|
|
{
|
|
while (isspace(*pszCmdLine))
|
|
++pszCmdLine;
|
|
}
|
|
}
|
|
|
|
}
|