mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-10-31 22:25:30 +00:00
1810 lines
45 KiB
C++
1810 lines
45 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 "rosetta.h"
|
|
#include "prefapi.h"
|
|
#include "dialog.h"
|
|
#include "msgcom.h"
|
|
#include "nethelp.h"
|
|
#include "xp_help.h"
|
|
#include "mailpriv.h"
|
|
#include "mnprefs.h"
|
|
#ifdef XP_WIN16
|
|
#include "mninterf.h"
|
|
#else
|
|
#include "winprefs/mninterf.h"
|
|
#endif
|
|
#include "subnews.h"
|
|
#include "wfemsg.h"
|
|
|
|
#include "ldap.h"
|
|
|
|
extern "C" {
|
|
#include "xpgetstr.h"
|
|
#ifdef MOZ_MAIL_NEWS
|
|
extern int MK_MSG_LOCAL_MAIL;
|
|
extern int MK_MSG_SENT_L10N_NAME; //Sent folder
|
|
extern int MK_MSG_DRAFTS_L10N_NAME;
|
|
extern int MK_MSG_TEMPLATES_L10N_NAME;
|
|
#endif
|
|
};
|
|
|
|
//also in mnpref\src\pages.h, brpref\src\advpages.cpp
|
|
#define MNPREF_PrefIsLocked(pPrefName) PREF_PrefIsLocked(pPrefName)
|
|
|
|
static void ShowMapiError(UINT nId, LPCSTR pParam, CWnd* pWnd)
|
|
{
|
|
char buffer[1024];
|
|
CString msg;
|
|
msg.LoadString(nId);
|
|
if (pParam)
|
|
sprintf(buffer, msg, pParam);
|
|
else
|
|
strcpy(buffer, msg);
|
|
if (pWnd)
|
|
{
|
|
pWnd->MessageBox(buffer, NULL, MB_OK | MB_ICONSTOP);
|
|
}
|
|
else
|
|
{
|
|
AfxMessageBox(buffer);
|
|
}
|
|
}
|
|
|
|
static void ShowError(UINT nId, CWnd* pWnd)
|
|
{
|
|
ShowMapiError(nId, NULL, pWnd);
|
|
}
|
|
|
|
|
|
#ifdef _WIN32
|
|
|
|
static const char szMapiDll[] = "Mapi32.dll";
|
|
|
|
static BOOL IsOurMapiInstalled(void)
|
|
{
|
|
// see if our MAPI support is already installed
|
|
BOOL ourDLLInstalled = FALSE;
|
|
HINSTANCE hMAPIInst = LoadLibrary(szMapiDll);
|
|
if (hMAPIInst)
|
|
{
|
|
FARPROC funcPtr = GetProcAddress(hMAPIInst, "MAPIGetNetscapeVersion");
|
|
if (funcPtr)
|
|
{
|
|
ourDLLInstalled = TRUE;
|
|
}
|
|
FreeLibrary(hMAPIInst);
|
|
}
|
|
return(ourDLLInstalled);
|
|
}
|
|
|
|
static BOOL UpdateMapiDll(BOOL prefUseMAPI, CWnd* pWnd)
|
|
{
|
|
// get the two directories to copy between
|
|
const char szMapiBackupDll[] = "Mapi32bak.dll";
|
|
const char sznscpMapiDll[] = "nsmapi32.dll";
|
|
|
|
CString nsMapiFile;
|
|
CString systemPath;
|
|
CString msMapiFile;
|
|
CString msMapiBackupFile;
|
|
CFileStatus status;
|
|
GetSystemDirectory(systemPath.GetBuffer(_MAX_PATH), _MAX_PATH);
|
|
systemPath.ReleaseBuffer();
|
|
if (systemPath.Right(1) != "\\")
|
|
{
|
|
systemPath += "\\";
|
|
}
|
|
GetModuleFileName(theApp.m_hInstance, nsMapiFile.GetBuffer(_MAX_PATH), _MAX_PATH);
|
|
nsMapiFile.ReleaseBuffer();
|
|
// strip off the netscape.exe from the end
|
|
int pos = nsMapiFile.ReverseFind('\\');
|
|
if (pos != -1)
|
|
{
|
|
nsMapiFile = nsMapiFile.Left(pos);
|
|
}
|
|
if (nsMapiFile.Right(1) != "\\")
|
|
{
|
|
nsMapiFile += "\\";
|
|
}
|
|
nsMapiFile += sznscpMapiDll;
|
|
|
|
msMapiFile = systemPath + szMapiDll;
|
|
msMapiBackupFile = systemPath + szMapiBackupDll;
|
|
|
|
BOOL ourDLLInstalled = IsOurMapiInstalled();
|
|
|
|
if (prefUseMAPI)
|
|
{
|
|
// Before the Send option will show up in other applications, you must have
|
|
// [Mail]
|
|
// MAPIX=1
|
|
// MAPI=1
|
|
WriteProfileString("Mail", "MAPIX", "1");
|
|
WriteProfileString("Mail", "MAPI", "1");
|
|
if (ourDLLInstalled)
|
|
{
|
|
// if the nsmapi32.dll that we have is a newer date than the installed one
|
|
// copy it over anyway
|
|
CFileStatus installedFile, ourFile;
|
|
if (CFile::GetStatus(msMapiFile, installedFile))
|
|
{
|
|
if (CFile::GetStatus(nsMapiFile, ourFile))
|
|
{
|
|
// if ours is newer, install it anyway
|
|
if (ourFile.m_mtime > installedFile.m_mtime)
|
|
{
|
|
// don't need to do a backup because our file is already installed
|
|
if (!CopyFile(nsMapiFile, msMapiFile, FALSE))
|
|
{
|
|
// can't install ours, tell the user
|
|
ShowMapiError(IDS_NSMAPI32_COPY_FAILED, msMapiFile, pWnd);
|
|
return(FALSE);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
// check for the existance of nsmapi32.dll
|
|
if (!CFile::GetStatus(nsMapiFile, status))
|
|
{
|
|
// nsmapi32.dll doesn't exist, tell the user
|
|
ShowMapiError(IDS_NO_NSMAPI32, nsMapiFile, pWnd);
|
|
return(FALSE);
|
|
}
|
|
// check for the existance of mapi32.dll and only make the backup if it exists
|
|
if (CFile::GetStatus(msMapiFile, status))
|
|
{
|
|
if (!CopyFile(msMapiFile, msMapiBackupFile, FALSE))
|
|
{
|
|
// can't make backup copy, refuse to install
|
|
ShowMapiError(IDS_MAPI_BACKUP_FAILED, msMapiBackupFile, pWnd);
|
|
return(FALSE);
|
|
}
|
|
}
|
|
if (!CopyFile(nsMapiFile, msMapiFile, FALSE))
|
|
{
|
|
// can't install ours, tell the user
|
|
ShowMapiError(IDS_NSMAPI32_COPY_FAILED, msMapiFile, pWnd);
|
|
return(FALSE);
|
|
}
|
|
}
|
|
}
|
|
else // don't use our MAPI
|
|
{
|
|
if (ourDLLInstalled)
|
|
{
|
|
// restore the backup DLL
|
|
if (!CFile::GetStatus(msMapiBackupFile, status))
|
|
{
|
|
// old mapi file doesn't exist, tell the user
|
|
ShowMapiError(IDS_MAPI_BACKUP_MISSING, msMapiBackupFile, pWnd);
|
|
return(FALSE);
|
|
}
|
|
if (!CopyFile(msMapiBackupFile, msMapiFile, FALSE))
|
|
{
|
|
// copy failed, tell the user
|
|
ShowMapiError(IDS_NSMAPI32_COPY_FAILED2, msMapiFile, pWnd);
|
|
return(FALSE);
|
|
}
|
|
// remove the backup file
|
|
remove(msMapiBackupFile);
|
|
}
|
|
}
|
|
return(TRUE);
|
|
}
|
|
|
|
extern "C" BOOL UpdateMapiDll(void)
|
|
{
|
|
XP_Bool prefUseMAPI = FALSE;
|
|
PREF_GetBoolPref("mail.use_mapi_server", &prefUseMAPI);
|
|
return(UpdateMapiDll(prefUseMAPI, NULL));
|
|
}
|
|
#endif
|
|
|
|
extern "C" BOOL IsNumeric(char* pStr)
|
|
{
|
|
|
|
for (char* p = pStr; p && *p; p++)
|
|
{
|
|
if (0 == isdigit(*p))
|
|
return FALSE;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
#ifdef MOZ_MAIL_NEWS
|
|
|
|
extern "C" MSG_Host *DoAddNewsServer(CWnd* pParent, int nFromWhere)
|
|
{
|
|
CNewsServerDialog addServerDialog(pParent, NULL, nFromWhere);
|
|
if (IDOK == addServerDialog.DoModal())
|
|
{
|
|
char* pName = addServerDialog.GetNewsHostName();
|
|
XP_Bool bxxx = HG28751
|
|
XP_Bool bAuthentication = addServerDialog.GetAuthentication();
|
|
int32 nPort = addServerDialog.GetNewsHostPort();
|
|
|
|
MSG_NewsHost *pNewHost = MSG_CreateNewsHost(WFE_MSGGetMaster(), pName,
|
|
bxxx, nPort);
|
|
|
|
if (pNewHost)
|
|
{
|
|
// tell the back-end to ask for name/pw without getting challenged
|
|
MSG_SetNewsHostPushAuth (pNewHost, bAuthentication);
|
|
|
|
return MSG_GetMSGHostFromNewsHost(pNewHost);
|
|
}
|
|
else
|
|
return NULL;
|
|
}
|
|
else
|
|
return NULL;
|
|
}
|
|
|
|
extern "C" MSG_Host *DoAddIMAPServer(CWnd* pParent, char* pServerName, BOOL bImap)
|
|
{
|
|
CString title;
|
|
title.LoadString(IDS_MAIL_SERVER_PROPERTY);
|
|
CMailServerPropertySheet addMailServer(pParent, title, pServerName, TYPE_IMAP, FALSE);
|
|
addMailServer.DoModal();
|
|
return NULL;
|
|
}
|
|
|
|
void UnixToDosString(char* pStr)
|
|
{
|
|
if (!pStr || !strlen(pStr))
|
|
return;
|
|
for (char * p = pStr; p && *p; p++)
|
|
{
|
|
if(*p == '/')
|
|
*p = '\\';
|
|
else if (*p == '|')
|
|
*p = ':';
|
|
}
|
|
}
|
|
|
|
void DosToUnixString(char* pStr)
|
|
{
|
|
if (!pStr || !strlen(pStr))
|
|
return;
|
|
for (char * p = pStr; p && *p; p++)
|
|
{
|
|
if(*p == '\\')
|
|
*p = '/';
|
|
else if(*p == ':')
|
|
*p = '|';
|
|
}
|
|
}
|
|
|
|
//Make sure caller function XP_FREE the return string
|
|
extern "C" char* ConvertPathToURL(char* lpPath)
|
|
{
|
|
static const char *formatString = "mailbox:/%s";
|
|
|
|
if (!lpPath || !strlen(lpPath))
|
|
return NULL;
|
|
|
|
DosToUnixString(lpPath);
|
|
char *urlString = (char*)XP_ALLOC(XP_STRLEN(formatString) + XP_STRLEN(lpPath));
|
|
if (urlString)
|
|
sprintf(urlString, formatString, lpPath);
|
|
UnixToDosString(lpPath);
|
|
return urlString;
|
|
}
|
|
|
|
MSG_FolderInfo * GetFolderInfoFromPref(char* lpPref)
|
|
{
|
|
MSG_FolderInfo *pFolderInfo = NULL;
|
|
|
|
int nLen = strlen(lpPref);
|
|
if (nLen)
|
|
{
|
|
MSG_Master *pMaster = WFE_MSGGetMaster();
|
|
int nUrlType = NET_URL_Type(lpPref);
|
|
if (0 == nUrlType || MAILBOX_TYPE_URL == nUrlType)
|
|
{
|
|
if (0 == nUrlType)
|
|
{
|
|
char* pURL = NULL;
|
|
pURL = ConvertPathToURL(lpPref);
|
|
if (pURL)
|
|
{
|
|
pFolderInfo = MSG_GetFolderInfoFromURL(pMaster, pURL, FALSE);
|
|
XP_FREE(pURL);
|
|
}
|
|
}
|
|
else
|
|
pFolderInfo = MSG_GetFolderInfoFromURL(pMaster, lpPref, FALSE);
|
|
}
|
|
else if (IMAP_TYPE_URL == nUrlType)
|
|
pFolderInfo = MSG_GetFolderInfoFromURL(pMaster, lpPref, FALSE);
|
|
}
|
|
return pFolderInfo;
|
|
}
|
|
|
|
void SetFolderComboCurSel(HWND hControl, char* lpName, int nDefaultID)
|
|
{
|
|
int nFolderIndex = 0;
|
|
int nLen = strlen(lpName);
|
|
|
|
if (nLen)
|
|
{
|
|
MSG_FolderInfo *pFolder = GetFolderInfoFromPref(lpName);
|
|
|
|
int nCount = (int)SendMessage(hControl, CB_GETCOUNT, 0, 0);
|
|
for (int i = 0; i < nCount; i++ )
|
|
{
|
|
MSG_FolderInfo *pFolderInfo = (MSG_FolderInfo*)SendMessage(hControl,
|
|
CB_GETITEMDATA, i, 0);
|
|
if (pFolderInfo == pFolder)
|
|
{
|
|
nFolderIndex = i;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
SendMessage(hControl, CB_SETCURSEL, nFolderIndex, 0);
|
|
}
|
|
|
|
BOOL SetServerComboCurSel(HWND hControl, char* lpName, int nDefaultID)
|
|
{
|
|
MSG_Master *pMaster = WFE_MSGGetMaster();
|
|
MSG_FolderInfo *pFolder = NULL;
|
|
int nLen = strlen(lpName);
|
|
int nUrlType = NET_URL_Type(lpName);
|
|
BOOL bLocalMail = FALSE;
|
|
BOOL bUseDefaultName = FALSE;
|
|
char* pLocal = NULL;
|
|
char* pDefaultName = XP_GetString(nDefaultID);
|
|
MSG_FolderLine folderLine;
|
|
|
|
if (nLen)
|
|
{
|
|
pFolder = GetFolderInfoFromPref(lpName);
|
|
if (pFolder)
|
|
{
|
|
MSG_GetFolderLineById (pMaster, pFolder, &folderLine);
|
|
// We are checking against local mail directory or imap server
|
|
// versus any other folder by checking folderline level
|
|
// we should check the folder flag instead of folderline level
|
|
if (folderLine.level == 1 || (!XP_FILENAMECMP(pDefaultName, folderLine.name)))
|
|
{
|
|
bUseDefaultName = TRUE;
|
|
}
|
|
}
|
|
else
|
|
{ //Get folder path from URL
|
|
char* pFolderPath = NET_ParseURL(lpName, GET_PATH_PART);
|
|
if (pFolderPath)
|
|
{
|
|
if (XP_STRSTR(&pFolderPath[1], pDefaultName))
|
|
{
|
|
bUseDefaultName = TRUE;
|
|
}
|
|
XP_FREE(pFolderPath);
|
|
}
|
|
}
|
|
if (0 == nUrlType || MAILBOX_TYPE_URL == nUrlType)
|
|
bLocalMail = TRUE;
|
|
}
|
|
else
|
|
{
|
|
bLocalMail = TRUE;
|
|
bUseDefaultName = TRUE;
|
|
}
|
|
|
|
int nFolderIndex = 0;
|
|
|
|
if (bLocalMail)
|
|
pLocal = XP_GetString(MK_MSG_LOCAL_MAIL);
|
|
|
|
MSG_FolderInfo* pHostFolderInfo = GetHostFolderInfo(pFolder);
|
|
char* pHost = NET_ParseURL(lpName, GET_HOST_PART);
|
|
|
|
int nCount = (int)SendMessage(hControl, CB_GETCOUNT, 0, 0);
|
|
for (int i = 0; i < nCount; i++ )
|
|
{
|
|
MSG_FolderInfo *pFolderInfo = (MSG_FolderInfo*)SendMessage(hControl,
|
|
CB_GETITEMDATA, i, 0);
|
|
if (bLocalMail)
|
|
{
|
|
MSG_GetFolderLineById (pMaster, pFolderInfo, &folderLine);
|
|
if (!XP_FILENAMECMP(pLocal, folderLine.name))
|
|
{
|
|
nFolderIndex = i;
|
|
break;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (pHostFolderInfo == pFolderInfo)
|
|
{
|
|
nFolderIndex = i;
|
|
break;
|
|
}
|
|
else if (!pHostFolderInfo && pHost)
|
|
{ //Get Host name from URL
|
|
MSG_GetFolderLineById (pMaster, pFolderInfo, &folderLine);
|
|
if (!XP_FILENAMECMP(pHost, folderLine.name))
|
|
{
|
|
nFolderIndex = i;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
SendMessage(hControl, CB_SETCURSEL, nFolderIndex, 0);
|
|
|
|
if (pHost)
|
|
XP_FREE(pHost);
|
|
|
|
if (bUseDefaultName)
|
|
return TRUE;
|
|
else
|
|
return FALSE;
|
|
}
|
|
|
|
extern "C" void GetFolderServerNames
|
|
(char* lpName, int nDefaultID, CString& folder, CString& server)
|
|
{
|
|
MSG_FolderInfo *pFolderInfo = NULL;
|
|
|
|
int nLen = strlen(lpName);
|
|
if (nLen)
|
|
pFolderInfo = GetFolderInfoFromPref(lpName);
|
|
else
|
|
{
|
|
char defaultName[256];
|
|
int nLen = 255;
|
|
|
|
char* pDefault = XP_GetString(nDefaultID);
|
|
if (PREF_NOERROR == PREF_GetCharPref("mail.directory", defaultName, &nLen))
|
|
{
|
|
defaultName[nLen] = '\0';
|
|
XP_STRCAT(defaultName, "\\");
|
|
XP_STRCAT(defaultName, pDefault);
|
|
}
|
|
pFolderInfo = GetFolderInfoFromPref(defaultName);
|
|
}
|
|
|
|
if (pFolderInfo)
|
|
{
|
|
MSG_Master* pMaster = WFE_MSGGetMaster();
|
|
MSG_FolderLine folderLine;
|
|
if (MSG_GetFolderLineById(pMaster, pFolderInfo, &folderLine))
|
|
{
|
|
// We are checking against local mail directory or imap server
|
|
// versus any other folder by checking folderline level
|
|
// we should check the folder flag instead of folderline level
|
|
if (folderLine.level == 1)
|
|
{
|
|
folder = XP_GetString(nDefaultID);
|
|
server = folderLine.name;
|
|
}
|
|
else
|
|
{
|
|
folder = folderLine.name;
|
|
|
|
MSG_FolderInfo* pHostFolderInfo = GetHostFolderInfo(pFolderInfo);
|
|
if (pHostFolderInfo)
|
|
{
|
|
if (MSG_GetFolderLineById(pMaster, pHostFolderInfo, &folderLine))
|
|
server = folderLine.name;
|
|
}
|
|
else
|
|
server = XP_GetString(MK_MSG_LOCAL_MAIL);
|
|
}
|
|
}
|
|
else
|
|
{
|
|
folder = XP_GetString(nDefaultID);
|
|
server = XP_GetString(MK_MSG_LOCAL_MAIL);
|
|
}
|
|
}
|
|
else
|
|
{ //Get Host name from URL
|
|
char* pHost = NET_ParseURL(lpName, GET_HOST_PART);
|
|
if (pHost && strlen(pHost))
|
|
{
|
|
server = pHost;
|
|
XP_FREE(pHost);
|
|
}
|
|
else
|
|
{
|
|
server = XP_GetString(MK_MSG_LOCAL_MAIL);
|
|
}
|
|
folder = XP_GetString(nDefaultID);
|
|
}
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CChooseFolderDialog
|
|
//
|
|
CChooseFolderDialog::CChooseFolderDialog(CWnd *pParent, char* pFolderPath, int nTypeID)
|
|
: CDialog(IDD, pParent)
|
|
{
|
|
m_pFolderPath = pFolderPath;
|
|
m_nTypeID = nTypeID;
|
|
|
|
if (nTypeID == TYPE_SENTMAIL || nTypeID == TYPE_SENTNEWS)
|
|
m_nDefaultID = MK_MSG_SENT_L10N_NAME;
|
|
else if (nTypeID == TYPE_DRAFT)
|
|
m_nDefaultID = MK_MSG_DRAFTS_L10N_NAME;
|
|
else if (nTypeID == TYPE_TEMPLATE)
|
|
m_nDefaultID = MK_MSG_TEMPLATES_L10N_NAME;
|
|
}
|
|
|
|
BOOL CChooseFolderDialog::OnInitDialog()
|
|
{
|
|
BOOL ret = CDialog::OnInitDialog();
|
|
|
|
if (m_nTypeID == TYPE_SENTNEWS)
|
|
SetDlgItemText(IDC_STATIC_TITLE, szLoadString(IDS_COPY_NEWS_MSG));
|
|
else if (m_nTypeID == TYPE_DRAFT)
|
|
SetDlgItemText(IDC_STATIC_TITLE, szLoadString(IDS_COPY_DRAFTS));
|
|
else if (m_nTypeID == TYPE_TEMPLATE)
|
|
SetDlgItemText(IDC_STATIC_TITLE, szLoadString(IDS_COPY_TEMPLATES));
|
|
|
|
CString formatString, defaultTitle;
|
|
formatString.LoadString(IDS_SPECIAL_FOLDER);
|
|
defaultTitle.Format(LPCTSTR(formatString), XP_GetString(m_nDefaultID));
|
|
SetDlgItemText(IDC_RADIO_SENT, LPCTSTR(defaultTitle));
|
|
|
|
if ( ret ) {
|
|
// Subclass Server combo
|
|
m_ServerCombo.SubclassDlgItem( IDC_COMBO_SERVERS, this );
|
|
m_ServerCombo.NoPrettyName();
|
|
m_ServerCombo.PopulateMailServer( WFE_MSGGetMaster() );
|
|
if (SetServerComboCurSel(m_ServerCombo.GetSafeHwnd(),
|
|
m_pFolderPath, m_nDefaultID))
|
|
CheckDlgButton(IDC_RADIO_SENT, TRUE);
|
|
else
|
|
CheckDlgButton(IDC_RADIO_OTHER, TRUE);
|
|
|
|
// Subclass folder combo
|
|
m_FolderCombo.SubclassDlgItem( IDC_COMBO_FOLDERS, this );
|
|
m_FolderCombo.PopulateMail( WFE_MSGGetMaster() );
|
|
SetFolderComboCurSel(m_FolderCombo.GetSafeHwnd(),
|
|
m_pFolderPath, m_nDefaultID);
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
void CChooseFolderDialog::OnOK()
|
|
{
|
|
MSG_FolderInfo *pFolder = NULL;
|
|
MSG_FolderLine folderLine;
|
|
MSG_Master* pMaster = WFE_MSGGetMaster();
|
|
|
|
if (IsDlgButtonChecked(IDC_RADIO_SENT))
|
|
{
|
|
pFolder = (MSG_FolderInfo*)m_ServerCombo.GetItemData(m_ServerCombo.GetCurSel());
|
|
m_szFolder = XP_GetString(m_nDefaultID);
|
|
if (MSG_GetFolderLineById(pMaster, pFolder, &folderLine))
|
|
m_szServer = folderLine.name;
|
|
URL_Struct *url = MSG_ConstructUrlForFolder(NULL, pFolder);
|
|
if (MK_MSG_SENT_L10N_NAME == m_nDefaultID &&
|
|
MAILBOX_TYPE_URL == NET_URL_Type(url->address))
|
|
{ //local mail
|
|
int nPos = strlen("mailbox:/");
|
|
m_szPrefUrl = &url->address[nPos];
|
|
LPTSTR pBuffer = m_szPrefUrl.GetBuffer(m_szPrefUrl.GetLength());
|
|
UnixToDosString(pBuffer);
|
|
m_szPrefUrl.ReleaseBuffer();
|
|
}
|
|
else
|
|
{ //imap
|
|
m_szPrefUrl = url->address;
|
|
}
|
|
}
|
|
else if (IsDlgButtonChecked(IDC_RADIO_OTHER))
|
|
{
|
|
pFolder = (MSG_FolderInfo*)m_FolderCombo.GetItemData(m_FolderCombo.GetCurSel());
|
|
|
|
if (MSG_GetFolderLineById(pMaster, pFolder, &folderLine))
|
|
{
|
|
m_szFolder = folderLine.name;
|
|
MSG_FolderInfo* pHostFolderInfo = GetHostFolderInfo(pFolder);
|
|
if (pHostFolderInfo)
|
|
{ //imap
|
|
if (MSG_GetFolderLineById(pMaster, pHostFolderInfo, &folderLine))
|
|
m_szServer = folderLine.name;
|
|
URL_Struct *url = MSG_ConstructUrlForFolder(NULL, pFolder);
|
|
m_szPrefUrl = url->address;
|
|
}
|
|
else
|
|
{ //local mail
|
|
m_szServer = XP_GetString(MK_MSG_LOCAL_MAIL);
|
|
URL_Struct *url = MSG_ConstructUrlForFolder(NULL, pFolder);
|
|
if (MK_MSG_SENT_L10N_NAME == m_nDefaultID)
|
|
{
|
|
int nPos = strlen("mailbox:/");
|
|
m_szPrefUrl = &url->address[nPos];
|
|
LPTSTR pBuffer = m_szPrefUrl.GetBuffer(m_szPrefUrl.GetLength());
|
|
UnixToDosString(pBuffer);
|
|
m_szPrefUrl.ReleaseBuffer();
|
|
}
|
|
else
|
|
m_szPrefUrl = url->address;
|
|
}
|
|
}
|
|
}
|
|
|
|
CDialog::OnOK();
|
|
}
|
|
|
|
void CChooseFolderDialog::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
}
|
|
|
|
void CChooseFolderDialog::OnNewFolder()
|
|
{
|
|
CPrefNewFolderDialog newFolderDlg( this, NULL);
|
|
if (IDOK == newFolderDlg.DoModal())
|
|
{
|
|
MSG_FolderInfo *pNewFolder = newFolderDlg.GetNewFolder();
|
|
m_FolderCombo.PopulateMail(WFE_MSGGetMaster());
|
|
|
|
for (int i = m_FolderCombo.GetCount(); i >= 0 ; i--)
|
|
{
|
|
MSG_FolderInfo *pFolderInfo = (MSG_FolderInfo*)m_FolderCombo.GetItemData(i);
|
|
if (pNewFolder == pFolderInfo)
|
|
{
|
|
m_FolderCombo.SetCurSel(i);
|
|
break;
|
|
}
|
|
}
|
|
OnSelectFolder(); //check the radio button
|
|
}
|
|
}
|
|
|
|
void CChooseFolderDialog::OnSelectServer()
|
|
{
|
|
if (!IsDlgButtonChecked(IDC_RADIO_SENT))
|
|
{
|
|
CheckDlgButton(IDC_RADIO_SENT, TRUE);
|
|
CheckDlgButton(IDC_RADIO_OTHER, FALSE);
|
|
}
|
|
}
|
|
|
|
void CChooseFolderDialog::OnSelectFolder()
|
|
{
|
|
if (!IsDlgButtonChecked(IDC_RADIO_OTHER))
|
|
{
|
|
CheckDlgButton(IDC_RADIO_OTHER, TRUE);
|
|
CheckDlgButton(IDC_RADIO_SENT, FALSE);
|
|
}
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CChooseFolderDialog, CDialog)
|
|
ON_BN_CLICKED(IDC_NEW_FOLDER, OnNewFolder)
|
|
ON_CBN_SELCHANGE(IDC_COMBO_SERVERS, OnSelectServer)
|
|
ON_CBN_SELCHANGE(IDC_COMBO_FOLDERS, OnSelectFolder)
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CNewsServerDialog
|
|
//
|
|
CNewsServerDialog::CNewsServerDialog(CWnd *pParent, const char* pName, int nFromWhere, MSG_NewsHost *pHost)
|
|
: CDialog(CNewsServerDialog::IDD, pParent)
|
|
{
|
|
m_hostName[0] = '\0';
|
|
if (pName && strlen(pName))
|
|
XP_STRCAT(m_hostName, pName);
|
|
m_bIsSecure = FALSE;
|
|
m_bAuthentication = FALSE;
|
|
m_nFromWhere = nFromWhere;
|
|
m_lPort = NEWS_PORT;
|
|
m_pEditHost = pHost;
|
|
if (pHost)
|
|
{
|
|
HG28972
|
|
m_lPort = MSG_GetNewsHostPort(pHost);
|
|
m_bAuthentication = MSG_GetNewsHostPushAuth(pHost);
|
|
}
|
|
}
|
|
|
|
BOOL CNewsServerDialog::OnInitDialog()
|
|
{
|
|
CDialog::OnInitDialog();
|
|
CString title;
|
|
char port[16];
|
|
|
|
sprintf(port, "%ld", m_lPort);
|
|
SetDlgItemText(IDC_EDIT_PORT, port);
|
|
title.LoadString(IDS_NEWS_SERVER_PROPERTY);
|
|
SetWindowText(LPCTSTR(title));
|
|
if (m_pEditHost)
|
|
{
|
|
SetDlgItemText(IDC_STATIC_HOST, MSG_GetNewsHostName(m_pEditHost));
|
|
GetDlgItem(IDC_EDIT_HOST)->ShowWindow(SW_HIDE);
|
|
|
|
if (m_bAuthentication) // Authentication
|
|
CheckDlgButton(IDC_USE_NAME, TRUE);
|
|
else
|
|
CheckDlgButton(IDC_USE_NAME, FALSE);
|
|
((CEdit*)GetDlgItem(IDC_EDIT_PORT))->SetFocus();
|
|
}
|
|
else
|
|
{
|
|
GetDlgItem(IDC_STATIC_HOST)->ShowWindow(SW_HIDE);
|
|
#ifdef _WIN32
|
|
((CEdit*)GetDlgItem(IDC_EDIT_HOST))->SetLimitText(MAX_HOSTNAME_LEN - 1);
|
|
#else
|
|
((CEdit*)GetDlgItem(IDC_EDIT_HOST))->LimitText(MAX_HOSTNAME_LEN - 1);
|
|
#endif
|
|
((CEdit*)GetDlgItem(IDC_EDIT_HOST))->SetFocus();
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
void CNewsServerDialog::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
}
|
|
|
|
void CNewsServerDialog::OnOK()
|
|
{
|
|
char port[16];
|
|
BOOL bServerExist = FALSE;
|
|
|
|
if (!m_pEditHost && 0 == GetDlgItemText(IDC_EDIT_HOST, m_hostName, MAX_HOSTNAME_LEN))
|
|
{
|
|
AfxMessageBox(IDS_EMPTY_STRING);
|
|
((CEdit*)GetDlgItem(IDC_EDIT_HOST))->SetFocus();
|
|
return;
|
|
}
|
|
if (!m_pEditHost && NewsHostExists())
|
|
{
|
|
AfxMessageBox(IDS_SERVER_EXISTS);
|
|
((CEdit*)GetDlgItem(IDC_EDIT_HOST))->SetFocus();
|
|
((CEdit*)GetDlgItem(IDC_EDIT_HOST))->SetSel((DWORD)MAKELONG(0, -1));
|
|
return;
|
|
}
|
|
if (GetDlgItemText(IDC_EDIT_PORT, port, 16))
|
|
{
|
|
int32 lPort = GetPortNumber();
|
|
if (lPort < 0 || lPort> MAX_PORT_NUMBER)
|
|
{
|
|
AfxMessageBox(IDS_PORT_RANGE);
|
|
((CEdit*)GetDlgItem(IDC_EDIT_PORT))->SetFocus();
|
|
((CEdit*)GetDlgItem(IDC_EDIT_PORT))->SetSel((DWORD)MAKELONG(0, -1));
|
|
return;
|
|
}
|
|
if (!::IsNumeric(port))
|
|
{
|
|
AfxMessageBox(IDS_NUMBERS_ONLY);
|
|
((CEdit*)GetDlgItem(IDC_EDIT_PORT))->SetFocus();
|
|
((CEdit*)GetDlgItem(IDC_EDIT_PORT))->SetSel((DWORD)MAKELONG(0, -1));
|
|
return;
|
|
}
|
|
m_lPort = lPort;
|
|
}
|
|
else
|
|
{
|
|
HG29172
|
|
m_lPort = NEWS_PORT;
|
|
}
|
|
if (IsDlgButtonChecked(IDC_USE_NAME)) // Authentication
|
|
m_bAuthentication = TRUE;
|
|
else
|
|
m_bAuthentication = FALSE;
|
|
CDialog::OnOK();
|
|
}
|
|
|
|
BOOL CNewsServerDialog::NewsHostExists()
|
|
{
|
|
if (m_nFromWhere == FROM_SUBSCRIBEUI)
|
|
{
|
|
CSubscribePropertySheet* pSheet;
|
|
CSubscribePropertyPage* pPage;
|
|
|
|
pSheet = (CSubscribePropertySheet*)GetParent();
|
|
pPage = (CSubscribePropertyPage*)pSheet->GetCurrentPage();
|
|
CComboBox* pServerCombo = pPage->GetServerCombo();
|
|
int nTotal = pServerCombo->GetCount();
|
|
for (int i = 0; i < nTotal; i++)
|
|
{
|
|
MSG_Host *pNewsHost = (MSG_Host *)pServerCombo->GetItemDataPtr(i);
|
|
if (IsSameServer(pNewsHost))
|
|
return TRUE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
else
|
|
{
|
|
MSG_Host** hNewsHost = NULL;
|
|
BOOL bSameHost = FALSE;
|
|
int32 nTotal = 0;
|
|
|
|
MSG_Master* pMaster = WFE_MSGGetMaster();
|
|
if (m_nFromWhere == FROM_FOLDERPANE)
|
|
nTotal = MSG_GetSubscribingHosts(pMaster, NULL, 0);
|
|
else
|
|
nTotal = MSG_GetNewsHosts(pMaster, NULL, 0);
|
|
if (nTotal)
|
|
{
|
|
hNewsHost = new MSG_Host* [nTotal];
|
|
ASSERT(hNewsHost != NULL);
|
|
if (m_nFromWhere == FROM_FOLDERPANE)
|
|
nTotal = MSG_GetSubscribingHosts(pMaster, hNewsHost, nTotal);
|
|
else
|
|
nTotal = MSG_GetNewsHosts(pMaster, (MSG_NewsHost**)hNewsHost, nTotal);
|
|
for (int i = 0; i < nTotal; i++)
|
|
{
|
|
if (bSameHost = IsSameServer(hNewsHost[i]))
|
|
break;
|
|
}
|
|
if (hNewsHost)
|
|
delete [] hNewsHost;
|
|
}
|
|
return bSameHost;
|
|
}
|
|
}
|
|
|
|
BOOL CNewsServerDialog::IsSameServer(MSG_Host *pHost)
|
|
{
|
|
const char* pHostName = NULL;
|
|
|
|
HG98271
|
|
int32 lEditPort = GetPortNumber();
|
|
MSG_NewsHost* pNewsHost = MSG_GetNewsHostFromMSGHost(pHost);
|
|
if (pNewsHost)
|
|
{
|
|
pHostName = MSG_GetNewsHostName(pNewsHost);
|
|
if (0 == lstrcmp(m_hostName, pHostName))
|
|
{
|
|
HG27851
|
|
int32 lPort = MSG_GetNewsHostPort(pNewsHost);
|
|
if (HG98261 lEditPort == lPort)
|
|
return TRUE;
|
|
}
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
int32 CNewsServerDialog::GetPortNumber()
|
|
{
|
|
char szPort[16];
|
|
|
|
if (GetDlgItemText(IDC_EDIT_PORT, szPort, 15) > 0)
|
|
return atol(szPort);
|
|
else
|
|
return -1;
|
|
}
|
|
|
|
void CNewsServerDialog::OnCheckSecure()
|
|
{
|
|
SetDlgItemInt(IDC_EDIT_PORT, NEWS_PORT);
|
|
HG28768
|
|
|
|
}
|
|
|
|
void CNewsServerDialog::OnHelp()
|
|
{
|
|
NetHelp(HELP_ADD_SERVER);
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CNewsServerDialog, CDialog)
|
|
ON_BN_CLICKED(IDOK, OnOK)
|
|
ON_BN_CLICKED(IDC_X, OnCheckSecure)
|
|
ON_BN_CLICKED(ID_HELP, OnHelp)
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// IMAP pref stuff
|
|
|
|
|
|
static const char *kPrefTemplate = "mail.imap.server.%s.%s";
|
|
|
|
// Make sure XP_FREE() from the caller function;
|
|
char* IMAP_GetPrefString(const char *pHostName, int nID)
|
|
{
|
|
int prefSize = XP_STRLEN(pHostName) + 60;
|
|
char *pPrefName = (char *) XP_ALLOC(prefSize);
|
|
|
|
if (!pPrefName)
|
|
return pPrefName;
|
|
|
|
switch (nID)
|
|
{
|
|
case CHAR_USERNAME:
|
|
PR_snprintf(pPrefName, prefSize, kPrefTemplate, pHostName, "userName");
|
|
break;
|
|
|
|
case BOOL_REMEMBER_PASSWORD:
|
|
PR_snprintf(pPrefName, prefSize, kPrefTemplate, pHostName, "remember_password");
|
|
break;
|
|
|
|
case BOOL_CHECK_NEW_MAIL:
|
|
PR_snprintf(pPrefName, prefSize, kPrefTemplate, pHostName, "check_new_mail");
|
|
break;
|
|
|
|
case INT_CHECK_TIME:
|
|
PR_snprintf(pPrefName, prefSize, kPrefTemplate, pHostName, "check_time");
|
|
break;
|
|
|
|
case BOOL_OFFLINE_DOWNLOAD:
|
|
PR_snprintf(pPrefName, prefSize, kPrefTemplate, pHostName, "offline_download");
|
|
break;
|
|
|
|
case INT_DELETE_MODEL:
|
|
PR_snprintf(pPrefName, prefSize, kPrefTemplate, pHostName, "delete_model");
|
|
break;
|
|
|
|
case BOOL_IS_SECURE:
|
|
PR_snprintf(pPrefName, prefSize, kPrefTemplate, pHostName, "isSecure");
|
|
break;
|
|
|
|
case CHAR_PERAONAL_DIR:
|
|
PR_snprintf(pPrefName, prefSize, kPrefTemplate, pHostName, "namespace.personal");
|
|
break;
|
|
|
|
case CHAR_PUBLIC_DIR:
|
|
PR_snprintf(pPrefName, prefSize, kPrefTemplate, pHostName, "namespace.public");
|
|
break;
|
|
|
|
case CHAR_OTHER_USER_DIR:
|
|
PR_snprintf(pPrefName, prefSize, kPrefTemplate, pHostName, "namespace.other_users");
|
|
break;
|
|
|
|
case BOOL_OVERRIDE_NAMESPACES:
|
|
PR_snprintf(pPrefName, prefSize, kPrefTemplate, pHostName, "override_namespaces");
|
|
break;
|
|
|
|
case BOOL_EMPTY_TRASH_ON_EXIT:
|
|
PR_snprintf(pPrefName, prefSize, kPrefTemplate, pHostName, "empty_trash_on_exit");
|
|
break;
|
|
|
|
case BOOL_CLEANUP_INBOX_ON_EXIT:
|
|
PR_snprintf(pPrefName, prefSize, kPrefTemplate, pHostName, "cleanup_inbox_on_exit");
|
|
break;
|
|
|
|
default:
|
|
ASSERT(0);
|
|
break;
|
|
}
|
|
|
|
return pPrefName;
|
|
}
|
|
|
|
BOOL IMAP_PrefIsLocked(const char *pHostName, int nID)
|
|
{
|
|
BOOL bResult = FALSE;
|
|
char* pPrefName = NULL;
|
|
|
|
pPrefName = IMAP_GetPrefString(pHostName, nID);
|
|
if (pPrefName)
|
|
{
|
|
bResult = PREF_PrefIsLocked(pPrefName);
|
|
XP_FREE(pPrefName);
|
|
}
|
|
return bResult;
|
|
}
|
|
|
|
void IMAP_SetCharPref(const char *pHostName, int nID, const char* pValue)
|
|
{
|
|
char* pPrefName = NULL;
|
|
|
|
pPrefName = IMAP_GetPrefString(pHostName, nID);
|
|
if (pPrefName)
|
|
{
|
|
PREF_SetCharPref(pPrefName, pValue);
|
|
XP_FREE(pPrefName);
|
|
}
|
|
}
|
|
|
|
void IMAP_SetIntPref(const char *pHostName, int nID, int32 lValue)
|
|
{
|
|
char* pPrefName = NULL;
|
|
|
|
pPrefName = IMAP_GetPrefString(pHostName, nID);
|
|
if (pPrefName)
|
|
{
|
|
PREF_SetIntPref(pPrefName, lValue);
|
|
XP_FREE(pPrefName);
|
|
}
|
|
}
|
|
|
|
void IMAP_SetBoolPref(const char *pHostName, int nID, XP_Bool bValue)
|
|
{
|
|
char* pPrefName = NULL;
|
|
|
|
pPrefName = IMAP_GetPrefString(pHostName, nID);
|
|
if (pPrefName)
|
|
{
|
|
PREF_SetBoolPref(pPrefName, bValue);
|
|
XP_FREE(pPrefName);
|
|
}
|
|
}
|
|
|
|
void IMAP_GetCharPref(const char *pHostName, int nID, char **hBuffer)
|
|
{
|
|
char* pPrefName = NULL;
|
|
|
|
pPrefName = IMAP_GetPrefString(pHostName, nID);
|
|
if (pPrefName)
|
|
{
|
|
PREF_CopyCharPref(pPrefName, hBuffer);
|
|
XP_FREE(pPrefName);
|
|
}
|
|
}
|
|
|
|
void IMAP_GetIntPref(const char *pHostName, int nID, int32 *pInt)
|
|
{
|
|
char* pPrefName = NULL;
|
|
|
|
pPrefName = IMAP_GetPrefString(pHostName, nID);
|
|
if (pPrefName)
|
|
{
|
|
PREF_GetIntPref(pPrefName, pInt);
|
|
XP_FREE(pPrefName);
|
|
}
|
|
}
|
|
|
|
void IMAP_GetBoolPref(const char *pHostName, int nID, XP_Bool *pBool)
|
|
{
|
|
char* pPrefName = NULL;
|
|
|
|
pPrefName = IMAP_GetPrefString(pHostName, nID);
|
|
if (pPrefName)
|
|
{
|
|
PREF_GetBoolPref(pPrefName, pBool);
|
|
XP_FREE(pPrefName);
|
|
}
|
|
}
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CMailServerPropertySheet
|
|
//
|
|
CMailServerPropertySheet::CMailServerPropertySheet
|
|
(CWnd *pParent, const char* pTitle, const char* pName, int nType, BOOL bEdit, BOOL bBothType)
|
|
: CPropertySheet(pTitle, pParent)
|
|
{
|
|
m_hostName[0] = '\0';
|
|
if (pName && strlen(pName))
|
|
XP_STRCAT(m_hostName, pName);
|
|
if (nType == TYPE_IMAP)
|
|
m_bWasPop = m_bPop = FALSE;
|
|
else
|
|
m_bWasPop = m_bPop = TRUE;
|
|
m_bEdit = bEdit;
|
|
m_bBothType = bBothType;
|
|
|
|
m_pGeneralPage = NULL;
|
|
m_pPopPage = NULL;
|
|
m_pIMAPPage = NULL;
|
|
m_pAdvancedPage = NULL;
|
|
|
|
if (m_bPop)
|
|
{
|
|
m_pGeneralPage = new CGeneralServerPage(this, pName);
|
|
m_pPopPage = new CPopServerPage(this);
|
|
AddPage(m_pGeneralPage);
|
|
AddPage(m_pPopPage);
|
|
}
|
|
else
|
|
{
|
|
m_pGeneralPage = new CGeneralServerPage(this, pName);
|
|
m_pIMAPPage = new CIMAPServerPage(this, pName);
|
|
m_pAdvancedPage = new CIMAPAdvancedPage(this, pName);
|
|
AddPage(m_pGeneralPage);
|
|
AddPage(m_pIMAPPage);
|
|
AddPage(m_pAdvancedPage);
|
|
}
|
|
}
|
|
|
|
CMailServerPropertySheet::~CMailServerPropertySheet()
|
|
{
|
|
if (m_pGeneralPage)
|
|
delete m_pGeneralPage;
|
|
if (m_pPopPage)
|
|
delete m_pPopPage;
|
|
if (m_pIMAPPage)
|
|
delete m_pIMAPPage;
|
|
if (m_pAdvancedPage)
|
|
delete m_pAdvancedPage;
|
|
}
|
|
|
|
void CMailServerPropertySheet::SetMailHostName(char* pName)
|
|
{
|
|
if (pName && strlen(pName))
|
|
{
|
|
m_hostName[0] = '\0';
|
|
XP_STRCAT(m_hostName, pName);
|
|
}
|
|
}
|
|
|
|
XP_Bool CMailServerPropertySheet::GetIMAPUseSSL()
|
|
{
|
|
HG21675
|
|
return FALSE;
|
|
}
|
|
|
|
void CMailServerPropertySheet::GetIMAPPersonalDir(char* pDir, int nLen)
|
|
{
|
|
if (m_pAdvancedPage && IsWindow(m_pAdvancedPage->GetSafeHwnd()))
|
|
{
|
|
m_pAdvancedPage->GetPersonalDir(pDir, nLen);
|
|
}
|
|
else
|
|
strcpy(pDir, "");
|
|
}
|
|
|
|
void CMailServerPropertySheet::GetIMAPPublicDir(char* pDir, int nLen)
|
|
{
|
|
if (m_pAdvancedPage && IsWindow(m_pAdvancedPage->GetSafeHwnd()))
|
|
{
|
|
m_pAdvancedPage->GetPublicDir(pDir, nLen);
|
|
}
|
|
else
|
|
strcpy(pDir, "");
|
|
}
|
|
|
|
void CMailServerPropertySheet::GetIMAPOthersDir(char* pDir, int nLen)
|
|
{
|
|
if (m_pAdvancedPage && IsWindow(m_pAdvancedPage->GetSafeHwnd()))
|
|
{
|
|
m_pAdvancedPage->GetOthersDir(pDir, nLen);
|
|
}
|
|
else
|
|
strcpy(pDir, "");
|
|
}
|
|
|
|
XP_Bool CMailServerPropertySheet::GetIMAPOverrideNameSpaces()
|
|
{
|
|
if (m_pAdvancedPage && IsWindow(m_pAdvancedPage->GetSafeHwnd()))
|
|
return m_pAdvancedPage->GetOverrideNameSpaces();
|
|
else
|
|
return FALSE;
|
|
}
|
|
|
|
void CMailServerPropertySheet::ShowHidePages(int nShowType)
|
|
{
|
|
if (nShowType == TYPE_POP)
|
|
{
|
|
m_bPop = TRUE;
|
|
m_pPopPage = new CPopServerPage(this);
|
|
AddPage(m_pPopPage);
|
|
if (m_pIMAPPage)
|
|
{
|
|
RemovePage(m_pIMAPPage);
|
|
m_pIMAPPage = NULL;
|
|
}
|
|
if (m_pAdvancedPage)
|
|
{
|
|
RemovePage(m_pAdvancedPage);
|
|
m_pAdvancedPage = NULL;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
m_bPop = FALSE;
|
|
m_pIMAPPage = new CIMAPServerPage(this, m_hostName);
|
|
m_pAdvancedPage = new CIMAPAdvancedPage(this, m_hostName);
|
|
AddPage(m_pIMAPPage);
|
|
AddPage(m_pAdvancedPage);
|
|
if (m_pPopPage)
|
|
{
|
|
RemovePage(m_pPopPage);
|
|
m_pPopPage = NULL;
|
|
}
|
|
}
|
|
}
|
|
|
|
#ifdef _WIN32
|
|
|
|
BOOL CMailServerPropertySheet::OnInitDialog()
|
|
{
|
|
BOOL ret = CPropertySheet::OnInitDialog();
|
|
|
|
return ret;
|
|
}
|
|
|
|
#else
|
|
|
|
int CMailServerPropertySheet::OnCreate(LPCREATESTRUCT lpCreateStruct)
|
|
{
|
|
int ret = CPropertySheet::OnCreate(lpCreateStruct);
|
|
|
|
return ret;
|
|
}
|
|
|
|
#endif
|
|
|
|
BOOL CMailServerPropertySheet::IsPageValid(CPropertyPage* pPage)
|
|
{
|
|
if (pPage && IsWindow(pPage->GetSafeHwnd()))
|
|
return TRUE;
|
|
else
|
|
return FALSE;
|
|
}
|
|
|
|
void CMailServerPropertySheet::OnOK()
|
|
{
|
|
ASSERT_VALID(this);
|
|
|
|
if (GetActivePage()->OnKillActive())
|
|
{
|
|
if (m_bPop)
|
|
{
|
|
if (IsPageValid(m_pGeneralPage))
|
|
{
|
|
if (!m_pGeneralPage->ProcessOK())
|
|
{
|
|
SetActivePage(m_pGeneralPage);
|
|
return;
|
|
}
|
|
}
|
|
if (IsPageValid(m_pPopPage))
|
|
{
|
|
if (!m_pPopPage->ProcessOK())
|
|
{
|
|
SetActivePage(m_pPopPage);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (IsPageValid(m_pGeneralPage))
|
|
{
|
|
if (!m_pGeneralPage->ProcessOK())
|
|
{
|
|
SetActivePage(m_pGeneralPage);
|
|
return;
|
|
}
|
|
}
|
|
if (IsPageValid(m_pIMAPPage))
|
|
{
|
|
if (!m_pIMAPPage->ProcessOK())
|
|
{
|
|
SetActivePage(m_pIMAPPage);
|
|
return;
|
|
}
|
|
}
|
|
if (IsPageValid(m_pAdvancedPage))
|
|
{
|
|
if (!m_pAdvancedPage->ProcessOK())
|
|
{
|
|
SetActivePage(m_pAdvancedPage);
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
EndDialog(IDOK);
|
|
}
|
|
|
|
}
|
|
|
|
void CMailServerPropertySheet::OnHelp()
|
|
{
|
|
if (GetActivePage() == m_pGeneralPage)
|
|
NetHelp(HELP_MAILSERVER_PROPERTY_GENERAL);
|
|
else if (GetActivePage() == m_pPopPage)
|
|
NetHelp(HELP_MAILSERVER_PROPERTY_POP);
|
|
else if (GetActivePage() == m_pIMAPPage)
|
|
NetHelp(HELP_MAILSERVER_PROPERTY_IMAP);
|
|
else if (GetActivePage() == m_pAdvancedPage)
|
|
NetHelp(HELP_MAILSERVER_PROPERTY_ADVANCED);
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CMailServerPropertySheet, CPropertySheet)
|
|
#ifndef _WIN32
|
|
ON_WM_CREATE()
|
|
#endif
|
|
ON_BN_CLICKED(IDOK, OnOK)
|
|
ON_BN_CLICKED(IDHELP, OnHelp)
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CGeneralServerPage
|
|
//
|
|
CGeneralServerPage::CGeneralServerPage(CWnd *pParent, const char* pName)
|
|
: CPropertyPage(IDD)
|
|
{
|
|
m_pParent = (CMailServerPropertySheet*)pParent;
|
|
m_szServerName = pName;
|
|
}
|
|
|
|
BOOL CGeneralServerPage::OnInitDialog()
|
|
{
|
|
BOOL ret = CPropertyPage::OnInitDialog();
|
|
|
|
#ifdef _WIN32
|
|
((CEdit*)GetDlgItem(IDC_EDIT_CHECK_MAIL))->SetLimitText(5);
|
|
#else
|
|
((CEdit*)GetDlgItem(IDC_EDIT_CHECK_MAIL))->LimitText(5);
|
|
#endif
|
|
|
|
if (!m_pParent->IsPopServer() && !m_szServerName.IsEmpty())
|
|
{
|
|
SetDlgItemText(IDC_STATIC_MAIL_SERVER, szLoadString(IDS_MAIL_SERVER));
|
|
SetDlgItemText(IDC_STATIC_SERVER, LPCTSTR(m_szServerName));
|
|
((CEdit*)GetDlgItem(IDC_EDIT_SERVER))->ShowWindow(SW_HIDE);
|
|
}
|
|
else
|
|
{
|
|
GetDlgItem(IDC_STATIC_SERVER)->ShowWindow(SW_HIDE);
|
|
if (!m_szServerName.IsEmpty())
|
|
SetDlgItemText(IDC_EDIT_SERVER, LPCTSTR(m_szServerName));
|
|
#ifdef _WIN32
|
|
((CEdit*)GetDlgItem(IDC_EDIT_SERVER))->SetLimitText(MAX_HOSTNAME_LEN - 1);
|
|
#else
|
|
((CEdit*)GetDlgItem(IDC_EDIT_SERVER))->LimitText(MAX_HOSTNAME_LEN - 1);
|
|
#endif
|
|
}
|
|
|
|
CComboBox* pCombo = (CComboBox*)GetDlgItem(IDC_COMBO_TYPE);
|
|
if (m_pParent->AllowBothTypes())
|
|
{
|
|
int nImap = pCombo->AddString(szLoadString(IDS_SERVER_IMAP_STATIC));
|
|
pCombo->SetItemData(nImap, TYPE_IMAP);
|
|
int nPop = pCombo->AddString(szLoadString(IDS_SERVER_POP3_STATIC));
|
|
pCombo->SetItemData(nPop, TYPE_POP);
|
|
if (m_pParent->IsPopServer())
|
|
pCombo->SetCurSel(nPop);
|
|
else
|
|
pCombo->SetCurSel(nImap);
|
|
}
|
|
else
|
|
{
|
|
int nIndex;
|
|
if (m_pParent->IsPopServer())
|
|
{
|
|
nIndex = pCombo->AddString(szLoadString(IDS_SERVER_POP3_STATIC));
|
|
pCombo->SetItemData(nIndex, TYPE_POP);
|
|
}
|
|
else
|
|
{
|
|
nIndex = pCombo->AddString(szLoadString(IDS_SERVER_IMAP_STATIC));
|
|
pCombo->SetItemData(nIndex, TYPE_IMAP);
|
|
}
|
|
pCombo->SetCurSel(nIndex);
|
|
}
|
|
char* pUserName = NULL;
|
|
int32 lCheckTime = 0;
|
|
char buffer[32];
|
|
XP_Bool bRememberPassword = FALSE;
|
|
XP_Bool bCheckMail = FALSE;
|
|
|
|
if (m_pParent->IsPopServer())
|
|
{
|
|
PREF_CopyCharPref("mail.pop_name", &pUserName);
|
|
PREF_GetBoolPref("mail.remember_password",&bRememberPassword);
|
|
PREF_GetBoolPref("mail.check_new_mail", &bCheckMail);
|
|
PREF_GetIntPref("mail.check_time", &lCheckTime);
|
|
}
|
|
else
|
|
{
|
|
if (m_pParent->EditServer())
|
|
{
|
|
IMAP_GetCharPref(LPCTSTR(m_szServerName), CHAR_USERNAME, &pUserName);
|
|
IMAP_GetBoolPref(LPCTSTR(m_szServerName), BOOL_CHECK_NEW_MAIL, &bCheckMail);
|
|
IMAP_GetIntPref(LPCTSTR(m_szServerName), INT_CHECK_TIME, &lCheckTime);
|
|
IMAP_GetBoolPref(LPCTSTR(m_szServerName), BOOL_REMEMBER_PASSWORD, &bRememberPassword);
|
|
}
|
|
}
|
|
if (pUserName)
|
|
{
|
|
SetDlgItemText(IDC_EDIT_USERNAME, pUserName);
|
|
XP_FREE(pUserName);
|
|
}
|
|
CheckDlgButton(IDC_CHECK_PASSWORD, bRememberPassword);
|
|
CheckDlgButton(IDC_CHECK_MAIL, bCheckMail);
|
|
|
|
if (lCheckTime < 0)
|
|
{
|
|
SetDlgItemText(IDC_EDIT_CHECK_MAIL, "");
|
|
}
|
|
else
|
|
{
|
|
sprintf(buffer, "%ld", lCheckTime);
|
|
SetDlgItemText(IDC_EDIT_CHECK_MAIL, buffer);
|
|
}
|
|
|
|
if (m_pParent->IsPopServer())
|
|
{
|
|
if (PREF_PrefIsLocked("mail.pop_name"))
|
|
GetDlgItem(IDC_EDIT_USERNAME)->EnableWindow(FALSE);
|
|
if (PREF_PrefIsLocked("mail.check_new_mail"))
|
|
GetDlgItem(IDC_CHECK_MAIL)->EnableWindow(FALSE);
|
|
if (PREF_PrefIsLocked("mail.check_time"))
|
|
GetDlgItem(IDC_EDIT_CHECK_MAIL)->EnableWindow(FALSE);
|
|
if (PREF_PrefIsLocked("mail.remember_password"))
|
|
GetDlgItem(IDC_CHECK_PASSWORD)->EnableWindow(FALSE);
|
|
}
|
|
else
|
|
{
|
|
if (IMAP_PrefIsLocked(LPCTSTR(m_szServerName), CHAR_USERNAME))
|
|
GetDlgItem(IDC_EDIT_USERNAME)->EnableWindow(FALSE);
|
|
if (IMAP_PrefIsLocked(LPCTSTR(m_szServerName), BOOL_CHECK_NEW_MAIL) ||
|
|
IMAP_PrefIsLocked(LPCTSTR(m_szServerName), INT_CHECK_TIME))
|
|
{
|
|
GetDlgItem(IDC_CHECK_MAIL)->EnableWindow(FALSE);
|
|
GetDlgItem(IDC_EDIT_CHECK_MAIL)->EnableWindow(FALSE);
|
|
}
|
|
if (IMAP_PrefIsLocked(LPCTSTR(m_szServerName), BOOL_REMEMBER_PASSWORD))
|
|
GetDlgItem(IDC_CHECK_PASSWORD)->EnableWindow(FALSE);
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
void CGeneralServerPage::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
}
|
|
|
|
BOOL CGeneralServerPage::ProcessOK()
|
|
{
|
|
char name[MAX_HOSTNAME_LEN];
|
|
char userName[256];
|
|
char text[MAX_DESCRIPTION_LEN];
|
|
|
|
if ((m_szServerName.IsEmpty() || m_pParent->WasPopServer()) &&
|
|
0 == GetDlgItemText(IDC_EDIT_SERVER, name, MAX_HOSTNAME_LEN))
|
|
{
|
|
AfxMessageBox(IDS_EMPTY_STRING);
|
|
((CEdit*)GetDlgItem(IDC_EDIT_SERVER))->SetFocus();
|
|
return FALSE;
|
|
}
|
|
|
|
if (0 == GetDlgItemText(IDC_EDIT_USERNAME, userName, 255))
|
|
{
|
|
AfxMessageBox(IDS_EMPTY_STRING);
|
|
((CEdit*)GetDlgItem(IDC_EDIT_USERNAME))->SetFocus();
|
|
return FALSE;
|
|
}
|
|
|
|
if (IsDlgButtonChecked(IDC_CHECK_MAIL) &&
|
|
GetDlgItemText(IDC_EDIT_CHECK_MAIL, text, MAX_DESCRIPTION_LEN))
|
|
{
|
|
if (!::IsNumeric(text))
|
|
{
|
|
ShowError(IDS_NUMBERS_ONLY, this);
|
|
((CEdit*)GetDlgItem(IDC_EDIT_CHECK_MAIL))->SetFocus();
|
|
((CEdit*)GetDlgItem(IDC_EDIT_CHECK_MAIL))->SetSel((DWORD)MAKELONG(0, -1));
|
|
return FALSE;
|
|
}
|
|
}
|
|
if (m_szServerName.IsEmpty() || m_pParent->WasPopServer())
|
|
{
|
|
m_szServerName = name;
|
|
m_pParent->SetMailHostName(name);
|
|
}
|
|
else
|
|
strncpy(name, LPCTSTR(m_szServerName), m_szServerName.GetLength());
|
|
|
|
int nCheckTime = 0;
|
|
XP_Bool bRememberPassword = IsDlgButtonChecked(IDC_CHECK_PASSWORD);
|
|
XP_Bool bCheckMail = IsDlgButtonChecked(IDC_CHECK_MAIL);
|
|
if (GetDlgItemText(IDC_EDIT_CHECK_MAIL, text, MAX_DESCRIPTION_LEN))
|
|
nCheckTime = atoi(text);
|
|
|
|
if (m_pParent->IsPopServer())
|
|
{
|
|
PREF_SetIntPref("mail.server_type", (int32)TYPE_POP);
|
|
PREF_SetCharPref("network.hosts.pop_server", LPCTSTR(m_szServerName));
|
|
PREF_SetCharPref("mail.pop_name", userName);
|
|
PREF_SetBoolPref("mail.remember_password",bRememberPassword);
|
|
PREF_SetBoolPref("mail.check_new_mail", bCheckMail);
|
|
PREF_SetIntPref("mail.check_time", (int32)nCheckTime);
|
|
}
|
|
else
|
|
{
|
|
if (!m_pParent->EditServer() || m_pParent->WasPopServer())
|
|
{
|
|
XP_Bool bIsxxx = HG72866
|
|
XP_Bool bOverrideNamespaces = m_pParent->GetIMAPOverrideNameSpaces();
|
|
char personalDir[256];
|
|
char publicDir[256];
|
|
char othersDir[256];
|
|
m_pParent->GetIMAPPersonalDir(personalDir, 255);
|
|
m_pParent->GetIMAPPublicDir(publicDir, 255);
|
|
m_pParent->GetIMAPOthersDir(othersDir, 255);
|
|
|
|
MSG_IMAPHost* pHost = MSG_CreateIMAPHost(WFE_MSGGetMaster(),
|
|
name,
|
|
bIsxxx,
|
|
userName,
|
|
bCheckMail,
|
|
nCheckTime,
|
|
bRememberPassword,
|
|
TRUE,
|
|
bOverrideNamespaces,
|
|
personalDir,
|
|
publicDir,
|
|
othersDir
|
|
);
|
|
}
|
|
|
|
PREF_SetIntPref("mail.server_type", (int32)TYPE_IMAP);
|
|
IMAP_SetCharPref(LPCTSTR(m_szServerName), CHAR_USERNAME, userName);
|
|
IMAP_SetBoolPref(LPCTSTR(m_szServerName), BOOL_CHECK_NEW_MAIL, bCheckMail);
|
|
IMAP_SetIntPref(LPCTSTR(m_szServerName), INT_CHECK_TIME, (int32)nCheckTime);
|
|
IMAP_SetBoolPref(LPCTSTR(m_szServerName), BOOL_REMEMBER_PASSWORD, bRememberPassword);
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
void CGeneralServerPage::OnChangeServerType()
|
|
{
|
|
CComboBox* pCombo = (CComboBox*)GetDlgItem(IDC_COMBO_TYPE);
|
|
int nType = (int)pCombo->GetItemData(pCombo->GetCurSel());
|
|
if ((m_pParent->IsPopServer() && nType == TYPE_POP) ||
|
|
(!m_pParent->IsPopServer() && nType == TYPE_IMAP))
|
|
return;
|
|
if (nType == TYPE_POP)
|
|
m_pParent->SetPopServer(TRUE);
|
|
else
|
|
m_pParent->SetPopServer(FALSE);
|
|
m_pParent->ShowHidePages(nType);
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CGeneralServerPage, CPropertyPage)
|
|
ON_CBN_SELCHANGE(IDC_COMBO_TYPE, OnChangeServerType)
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CPopServerPage
|
|
//
|
|
CPopServerPage::CPopServerPage(CWnd *pParent)
|
|
: CPropertyPage(IDD)
|
|
{
|
|
}
|
|
|
|
BOOL CPopServerPage::OnInitDialog()
|
|
{
|
|
BOOL ret = CPropertyPage::OnInitDialog();
|
|
|
|
XP_Bool prefBool = FALSE;
|
|
PREF_GetBoolPref("mail.leave_on_server",&prefBool);
|
|
if (prefBool)
|
|
CheckDlgButton(IDC_CHECK_POP_REMOTE, TRUE);
|
|
else
|
|
CheckDlgButton(IDC_CHECK_POP_REMOTE, FALSE);
|
|
|
|
if (PREF_PrefIsLocked("mail.leave_on_server"))
|
|
GetDlgItem(IDC_CHECK_POP_REMOTE)->EnableWindow(FALSE);
|
|
|
|
return ret;
|
|
}
|
|
|
|
void CPopServerPage::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
}
|
|
|
|
BOOL CPopServerPage::ProcessOK()
|
|
{
|
|
if (IsDlgButtonChecked(IDC_CHECK_POP_REMOTE))
|
|
PREF_SetBoolPref("mail.leave_on_server", TRUE);
|
|
else
|
|
PREF_SetBoolPref("mail.leave_on_server", FALSE);
|
|
return TRUE;
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CPopServerPage, CPropertyPage)
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CIMAPServerPage
|
|
//
|
|
CIMAPServerPage::CIMAPServerPage(CWnd *pParent, const char* pName)
|
|
: CPropertyPage(IDD)
|
|
{
|
|
m_pParent = (CMailServerPropertySheet*)pParent;
|
|
m_szServerName = pName;
|
|
}
|
|
|
|
BOOL CIMAPServerPage::OnInitDialog()
|
|
{
|
|
BOOL ret = CPropertyPage::OnInitDialog();
|
|
|
|
XP_Bool bOfflineDownload = FALSE;
|
|
XP_Bool bxxx = FALSE;
|
|
XP_Bool bEmptyTrash = FALSE;
|
|
XP_Bool bCleanupInbox = FALSE;
|
|
int32 lDeleteModel = -1;
|
|
|
|
IMAP_GetBoolPref(LPCTSTR(m_szServerName), BOOL_OFFLINE_DOWNLOAD, &bOfflineDownload);
|
|
|
|
IMAP_GetBoolPref(LPCTSTR(m_szServerName), BOOL_EMPTY_TRASH_ON_EXIT, &bEmptyTrash);
|
|
IMAP_GetBoolPref(LPCTSTR(m_szServerName), BOOL_CLEANUP_INBOX_ON_EXIT, &bCleanupInbox);
|
|
IMAP_GetIntPref(LPCTSTR(m_szServerName), INT_DELETE_MODEL, &lDeleteModel);
|
|
CheckDlgButton(IDC_CHECK_IMAP_LOCAL, bOfflineDownload);
|
|
|
|
CheckDlgButton(IDC_CHECK_EMPTY_TRASH, bEmptyTrash);
|
|
CheckDlgButton(IDC_CHECK_EMPTY_INBOX, bCleanupInbox);
|
|
if (lDeleteModel == 0)
|
|
CheckDlgButton(IDC_RADIO_IMAP_DELETE, TRUE);
|
|
else if (lDeleteModel == 1)
|
|
CheckDlgButton(IDC_RADIO_MOVE_TO_TRASH, TRUE);
|
|
else if (lDeleteModel == 2)
|
|
CheckDlgButton(IDC_RADIO_REAL_DELETE, TRUE);
|
|
else
|
|
CheckDlgButton(IDC_RADIO_MOVE_TO_TRASH, TRUE);
|
|
|
|
if (IMAP_PrefIsLocked(LPCTSTR(m_szServerName), BOOL_OFFLINE_DOWNLOAD))
|
|
GetDlgItem(IDC_CHECK_IMAP_LOCAL)->EnableWindow(FALSE);
|
|
if (IMAP_PrefIsLocked(LPCTSTR(m_szServerName), BOOL_IS_SECURE))
|
|
GetDlgItem(IDC_CHECK_IMAP_SSL)->EnableWindow(FALSE);
|
|
if (IMAP_PrefIsLocked(LPCTSTR(m_szServerName), BOOL_EMPTY_TRASH_ON_EXIT))
|
|
GetDlgItem(IDC_CHECK_EMPTY_TRASH)->EnableWindow(FALSE);
|
|
if (IMAP_PrefIsLocked(LPCTSTR(m_szServerName), BOOL_CLEANUP_INBOX_ON_EXIT))
|
|
GetDlgItem(IDC_CHECK_EMPTY_INBOX)->EnableWindow(FALSE);
|
|
if (IMAP_PrefIsLocked(LPCTSTR(m_szServerName), INT_DELETE_MODEL))
|
|
{
|
|
GetDlgItem(IDC_RADIO_IMAP_DELETE)->EnableWindow(FALSE);
|
|
GetDlgItem(IDC_RADIO_MOVE_TO_TRASH)->EnableWindow(FALSE);
|
|
GetDlgItem(IDC_RADIO_REAL_DELETE)->EnableWindow(FALSE);
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
XP_Bool CIMAPServerPage::GetUseSSL()
|
|
{
|
|
return (HG73221);
|
|
}
|
|
|
|
void CIMAPServerPage::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
}
|
|
|
|
BOOL CIMAPServerPage::ProcessOK()
|
|
{
|
|
m_szServerName = m_pParent->GetMailHostName();
|
|
|
|
XP_Bool bOfflineDownload = IsDlgButtonChecked(IDC_CHECK_IMAP_LOCAL);
|
|
HG73723
|
|
XP_Bool bEmptyTrash = IsDlgButtonChecked(IDC_CHECK_EMPTY_TRASH);
|
|
XP_Bool bCleanupInbox = IsDlgButtonChecked(IDC_CHECK_EMPTY_INBOX);
|
|
int nDeleteModel = 1;
|
|
if (IsDlgButtonChecked(IDC_RADIO_IMAP_DELETE))
|
|
nDeleteModel = 0;
|
|
else if (IsDlgButtonChecked(IDC_RADIO_MOVE_TO_TRASH))
|
|
nDeleteModel = 1;
|
|
else if (IsDlgButtonChecked(IDC_RADIO_REAL_DELETE))
|
|
nDeleteModel = 2;
|
|
|
|
IMAP_SetBoolPref(LPCTSTR(m_szServerName), BOOL_OFFLINE_DOWNLOAD, bOfflineDownload);
|
|
IMAP_SetBoolPref(LPCTSTR(m_szServerName), BOOL_EMPTY_TRASH_ON_EXIT, bEmptyTrash);
|
|
IMAP_SetBoolPref(LPCTSTR(m_szServerName), BOOL_CLEANUP_INBOX_ON_EXIT, bCleanupInbox);
|
|
IMAP_SetIntPref(LPCTSTR(m_szServerName), INT_DELETE_MODEL, (int32)nDeleteModel);
|
|
return TRUE;
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CIMAPServerPage, CPropertyPage)
|
|
END_MESSAGE_MAP()
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
// CIMAPAdvancedPage
|
|
//
|
|
CIMAPAdvancedPage::CIMAPAdvancedPage(CWnd *pParent, const char* pName)
|
|
: CPropertyPage(IDD)
|
|
{
|
|
m_pParent = (CMailServerPropertySheet*)pParent;
|
|
m_szServerName = pName;
|
|
}
|
|
|
|
BOOL CIMAPAdvancedPage::OnInitDialog()
|
|
{
|
|
BOOL ret = CPropertyPage::OnInitDialog();
|
|
|
|
XP_Bool bOverrideNamespaces = TRUE;
|
|
|
|
char* pPersonalDir = NULL;
|
|
char* pPublicDir = NULL;
|
|
char* pOtherUserDir = NULL;
|
|
IMAP_GetCharPref(LPCTSTR(m_szServerName), CHAR_PERAONAL_DIR, &pPersonalDir);
|
|
if (pPersonalDir)
|
|
{
|
|
SetDlgItemText(IDC_EDIT_IMAP_DIR, pPersonalDir);
|
|
XP_FREE(pPersonalDir);
|
|
}
|
|
IMAP_GetCharPref(LPCTSTR(m_szServerName), CHAR_PUBLIC_DIR, &pPublicDir);
|
|
if (pPublicDir)
|
|
{
|
|
SetDlgItemText(IDC_EDIT_PUBLIC_DIR, pPublicDir);
|
|
XP_FREE(pPublicDir);
|
|
}
|
|
IMAP_GetCharPref(LPCTSTR(m_szServerName), CHAR_OTHER_USER_DIR, &pOtherUserDir);
|
|
if (pOtherUserDir)
|
|
{
|
|
SetDlgItemText(IDC_EDIT_OTHERS_DIR, pOtherUserDir);
|
|
XP_FREE(pOtherUserDir);
|
|
}
|
|
IMAP_GetBoolPref(LPCTSTR(m_szServerName), BOOL_OVERRIDE_NAMESPACES, &bOverrideNamespaces);
|
|
CheckDlgButton(IDC_CHECK_OVERRIDE, bOverrideNamespaces);
|
|
|
|
if (IMAP_PrefIsLocked(LPCTSTR(m_szServerName), CHAR_PERAONAL_DIR))
|
|
GetDlgItem(IDC_EDIT_IMAP_DIR)->EnableWindow(FALSE);
|
|
if (IMAP_PrefIsLocked(LPCTSTR(m_szServerName), CHAR_PUBLIC_DIR))
|
|
GetDlgItem(IDC_EDIT_PUBLIC_DIR)->EnableWindow(FALSE);
|
|
if (IMAP_PrefIsLocked(LPCTSTR(m_szServerName), CHAR_OTHER_USER_DIR))
|
|
GetDlgItem(IDC_EDIT_OTHERS_DIR)->EnableWindow(FALSE);
|
|
if (IMAP_PrefIsLocked(LPCTSTR(m_szServerName), BOOL_OVERRIDE_NAMESPACES))
|
|
GetDlgItem(IDC_CHECK_OVERRIDE)->EnableWindow(FALSE);
|
|
|
|
return ret;
|
|
}
|
|
|
|
void CIMAPAdvancedPage::GetPersonalDir(char* pDir, int nLen)
|
|
{
|
|
if (0 == GetDlgItemText(IDC_EDIT_IMAP_DIR, pDir, nLen))
|
|
;
|
|
}
|
|
|
|
void CIMAPAdvancedPage::GetPublicDir(char* pDir, int nLen)
|
|
{
|
|
if (0 == GetDlgItemText(IDC_EDIT_PUBLIC_DIR, pDir, nLen))
|
|
;
|
|
}
|
|
|
|
void CIMAPAdvancedPage::GetOthersDir(char* pDir, int nLen)
|
|
{
|
|
if (0 == GetDlgItemText(IDC_EDIT_OTHERS_DIR, pDir, nLen))
|
|
;
|
|
}
|
|
|
|
XP_Bool CIMAPAdvancedPage::GetOverrideNameSpaces()
|
|
{
|
|
return (IsDlgButtonChecked(IDC_CHECK_OVERRIDE) == 0 ? FALSE : TRUE);
|
|
}
|
|
|
|
void CIMAPAdvancedPage::DoDataExchange(CDataExchange* pDX)
|
|
{
|
|
CDialog::DoDataExchange(pDX);
|
|
}
|
|
|
|
BOOL CIMAPAdvancedPage::ProcessOK()
|
|
{
|
|
m_szServerName = m_pParent->GetMailHostName();
|
|
|
|
char directory[256];
|
|
if (0 == GetDlgItemText(IDC_EDIT_IMAP_DIR, directory, 255))
|
|
IMAP_SetCharPref(LPCTSTR(m_szServerName), CHAR_PERAONAL_DIR, "");
|
|
else
|
|
IMAP_SetCharPref(LPCTSTR(m_szServerName), CHAR_PERAONAL_DIR, directory);
|
|
if (0 == GetDlgItemText(IDC_EDIT_PUBLIC_DIR, directory, 255))
|
|
IMAP_SetCharPref(LPCTSTR(m_szServerName), CHAR_PUBLIC_DIR, "");
|
|
else
|
|
IMAP_SetCharPref(LPCTSTR(m_szServerName), CHAR_PUBLIC_DIR, directory);
|
|
if (0 == GetDlgItemText(IDC_EDIT_OTHERS_DIR, directory, 255))
|
|
IMAP_SetCharPref(LPCTSTR(m_szServerName), CHAR_OTHER_USER_DIR, "");
|
|
else
|
|
IMAP_SetCharPref(LPCTSTR(m_szServerName), CHAR_OTHER_USER_DIR, directory);
|
|
|
|
XP_Bool bOverrideNamespaces = IsDlgButtonChecked(IDC_CHECK_OVERRIDE);
|
|
IMAP_SetBoolPref(LPCTSTR(m_szServerName), BOOL_OVERRIDE_NAMESPACES, bOverrideNamespaces);
|
|
return TRUE;
|
|
}
|
|
|
|
BEGIN_MESSAGE_MAP(CIMAPAdvancedPage, CPropertyPage)
|
|
END_MESSAGE_MAP()
|
|
|
|
#endif /* MOZ_MAIL_NEWS */
|