home *** CD-ROM | disk | FTP | other *** search
- /* -*- 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 "mmsystem.h"
- #include "apiapi.h"
- #ifdef MOZ_MAIL_NEWS
- #include "msgcom.h"
- #include "apimsg.h"
- #endif
-
- #ifdef MOZ_MAIL_NEWS
- #include "msgcom.h"
- #endif
- #include "fe_proto.h"
- #include "hiddenfr.h"
- #ifdef MOZ_MAIL_NEWS
- #include "mailfrm.h"
- #include "mailmisc.h"
- #include "mnprefs.h"
- #include "compfrm.h"
- #endif
- #include "template.h"
- #include "prefapi.h"
- #ifdef MOZ_MAIL_NEWS
- #include "winbif.h"
- #endif
-
- /* This function is defined in msgfrm.cpp
- Declare here to avoid including the whole header file */
- #ifdef MOZ_MAIL_NEWS
- MSG_Master *WFE_MSGGetMaster();
- #endif
-
- extern "C" MSG_Master* FE_GetMaster(){
- #ifdef MOZ_MAIL_NEWS
- return WFE_MSGGetMaster();
- #else
- return(NULL);
- #endif /* MOZ_MAIL_NEWS */
- }
-
- // prototypes
- BOOL SetBiffInfoNum(LPCSTR pKey, uint32 num);
-
-
-
- //
- // I'm sure this already exists...
- //
- CGenericFrame *wfe_FrameFromXPContext(MWContext * pXPCX)
- {
- if(!pXPCX)
- return(NULL);
-
- CFrameGlue * pFrameGlue = GetFrame(pXPCX);
- if(pFrameGlue) {
- CFrameWnd * pFrame = pFrameGlue->GetFrameWnd();
- if(pFrame && pFrame->IsKindOf(RUNTIME_CLASS(CGenericFrame)))
- return((CGenericFrame*)pFrame);
- }
-
- return(NULL);
- }
-
- extern "C" int FE_GetURL(MWContext *pContext, URL_Struct *pUrl)
- {
- if(!pContext || !ABSTRACTCX(pContext))
- return(-1);
- #ifdef EDITOR
- // The only circumstance in which we load a URL
- // into Editor when called from XP code is during
- // Publishing: we have "files to post"
- if( EDT_IS_EDITOR(pContext) && pUrl->files_to_post == NULL ){
- // So switch to or create a Browser frame/context
- // TODO: A possibly bad side effect is that changing
- // frames will obscure the last active frame
- // (and possibly a preference dialog)
- CGenericFrame* pFrame = (CGenericFrame*)FEU_GetLastActiveFrame(MWContextBrowser);
- pContext = NULL;
- if( pFrame && pFrame->GetMainContext() ){
- pContext = pFrame->GetMainContext()->GetContext();
- if( pContext ){
- // Find previously-active Browser frame
- if ( pFrame->IsIconic() ){
- pFrame->ShowWindow(SW_RESTORE);
- }
- pFrame->SetActiveWindow();
- }
- } else {
- // Create a new Browser frame
- pContext = CFE_CreateNewDocWindow(NULL, NULL);
- }
- if( !pContext ){
- return -1;
- }
- }
- #endif
- return(ABSTRACTCX(pContext)->GetUrl(pUrl, FO_CACHE_AND_PRESENT));
- }
-
- //
- // The must return a unix style path.
- // We'll have to figure out how to convert Win9x "\\fuzzhead\d-drive\span\mail"
- // into a unix path at some point.
- //
- extern "C" const char* FE_GetFolderDirectory(MWContext *pContext)
- {
- #ifdef MOZ_MAIL_NEWS
- static char pStr[_MAX_PATH];
- pStr[0] = '\0';
-
- if (!g_MsgPrefs.m_csMailDir.IsEmpty())
- {
- sprintf(pStr, "/%s", (LPCTSTR) g_MsgPrefs.m_csMailDir);
-
- for(char * p = pStr; p && *p; p++)
- if(*p == '\\')
- *p = '/';
- else if(*p == ':')
- *p = '|';
- }
-
- return(pStr);
- #else // MOZ_MAIL_NEWS
- return("");
- #endif // MOZ_MAIL_NEWS
-
- }
-
- extern "C" uint32
- FE_DiskSpaceAvailable (MWContext *context, const char *lpszPath )
- {
- char aDrive[_MAX_DRIVE];
- _splitpath( lpszPath, aDrive, NULL, NULL, NULL);
-
- if(aDrive[0] == '\0') {
-
- // The back end is always trying to pass us paths that look
- // like /c|/netscape/mail. See if we've got one of them
- if(strlen(lpszPath) > 2 && lpszPath[0] == '/' && lpszPath[2] == '|') {
- aDrive[0] = lpszPath[1];
- aDrive[1] = ':';
- aDrive[2] = '\0';
- }
- else {
- // Return bogus large number and hope for the best
- TRACE("Unable to determine drive, can't check free disk space.\n");
- return 1L<<30;
- }
- }
-
- CString csDrive = aDrive;
- csDrive += '\\';
- TRACE("Checking drive %s disk space\n", (const char *)csDrive);
-
- DWORD dwSectorsPerCluster = 0;
- DWORD dwBytesPerSector = 0;
- DWORD dwFreeClusters = 0;
- DWORD dwTotalClusters = 0;
- if(GetDiskFreeSpace(csDrive,
- &dwSectorsPerCluster,
- &dwBytesPerSector,
- &dwFreeClusters,
- &dwTotalClusters) == FALSE) {
- TRACE("Couldn't get free disk space...\n");
- return 1L<<30; // Return bogus large number and hope for the best
- }
-
- // We can now figure free disk space.
- DWORD dwFreeSpace = dwFreeClusters * dwSectorsPerCluster * dwBytesPerSector;
- TRACE("%lu free bytes\n", dwFreeSpace);
-
- return dwFreeSpace;
- }
-
- //
- // Generate a temp file name for a file that can eventually maybe be renamed
- // to pFileName. We could do something more intelligent
- // about putting it in the right directory and all that but not today
- //
- extern "C" char *FE_GetTempFileFor(MWContext *pContext, const char *pFileName, XP_FileType ftype, XP_FileType *rettype)
- {
- char * pString = WH_TempFileName(ftype, NULL, NULL);
- if(!pString)
- return(NULL);
-
- if(rettype)
- *rettype = xpTemporary;
-
- return(pString);
- }
-
- #ifdef MOZ_MAIL_NEWS
- extern "C" void FE_MsgShowHeaders(MSG_Pane *pPane, MSG_HEADER_SET mhsHeaders)
- {
- }
-
- extern "C" void FE_UpdateCompToolbar(MSG_Pane *pPane)
- {
- CComposeFrame * pCompose = (CComposeFrame *) MSG_GetFEData(pPane);
- if ( pCompose && pCompose->GetMainContext() && !MSG_DeliveryInProgress(pPane))
- {
- // Stop animation in corner and (more importantly) kill the progress bar.
- MWContext *pContext = pCompose->GetMainContext()->GetContext();
- if (pContext && !XP_IsContextBusy(pContext))
- {
- pCompose->GetChrome()->StopAnimation();
-
- pCompose->UpdateComposeWindowForMAPI(); // rhp - for MAPI operations
- }
- }
- }
- #endif /* MOZ_MAIL_NEWS */
-
- //
- // Prompt the user for a local file name
- //
- extern "C" int FE_PromptForFileName(MWContext *context,
- const char *prompt_string,
- const char *default_path,
- XP_Bool file_must_exist_p,
- XP_Bool directories_allowed_p,
- ReadFileNameCallbackFunction fn,
- void *closure)
- {
- HWND hWnd = NULL;
- CGenericFrame * pWnd = wfe_FrameFromXPContext(context);
- if(pWnd)
- hWnd = pWnd->m_hWnd;
- else if (context) { // XXX WHS Do what we really should have done
- CWnd *pWnd2 = (ABSTRACTCX(context))->GetDialogOwner();
- ASSERT(pWnd2 != CWnd::GetDesktopWindow());
- if (pWnd2 && pWnd2 != CWnd::GetDesktopWindow())
- hWnd = pWnd2->m_hWnd;
- }
- ASSERT(hWnd); // Bad!
-
- char * pFile = NULL;
- if (file_must_exist_p)
- {
- // Doing a file open
- // check for PKCS 12 files
- if(default_path && !strcmp(default_path, "*.p12")) {
- default_path = NULL;
- pFile = wfe_GetExistingFileName(hWnd, (char *)prompt_string, P12,
- file_must_exist_p, FALSE);
- } else {
- // Changed to prompt for ALL, instead defaulting to first filter.
- pFile = wfe_GetExistingFileName(hWnd , (char *)prompt_string, ALL,
- file_must_exist_p, FALSE);
- }
- } /* end if */
- else if (context->type == MWContextRDFSlave)
- {
- CString cs;
- cs.LoadString(IDS_UNTITLED);
- // Since someone undid my work for untyped title strings.
- cs += ".rdf";
- pFile = wfe_GetSaveFileName(hWnd, (char *)prompt_string, (char *) (LPCTSTR) cs, 0);
- }
-
- #ifdef MOZ_MAIL_NEWS
- else if (directories_allowed_p) {
- CDirDialog directory(ABSTRACTCX(context)->GetDialogOwner(), default_path);
- if (IDOK == directory.DoModal())
- {
- CString fileName = directory.GetPathName();
- /* There is a reason for this k5bg bogusness */
- /* Whatever well-meaning person coded CDirPicker in mnprefs.cpp did it wrong */
- /* this is a hidden string we are getting rid of */
- int nPos = fileName.GetLength() - strlen("\\k5bg");
- CString pathName(fileName.Left(nPos));
- pFile = XP_STRDUP(pathName);
- }
- }
- else
- {
- CString cs;
-
- // Doing a file save
- if ((context->type == MWContextMail) ||
- (context->type == MWContextNews) ||
- (context->type == MWContextMailMsg) ||
- (context->type == MWContextNewsMsg) ) {
- // Suggest an untyped file name
- cs.LoadString(IDS_UNTITLED);
- // Since someone undid my work for untyped title strings.
- cs += ".txt";
- pFile = wfe_GetSaveFileName(hWnd, (char *)prompt_string, (char *) (LPCTSTR) cs, 0);
- } else if (context->type == MWContextBookmarks) {
- // Suggest the default bookmarks file
- pFile = wfe_GetSaveFileName(hWnd, (char *)prompt_string, (char *)(const char *)theApp.m_pBookmarkFile, 0);
- } else if((default_path != NULL) && !strcmp(default_path, "*.p12")) {
- int p12type = P12;
- default_path = NULL;
- pFile = wfe_GetSaveFileName(hWnd, (char *)prompt_string, (char *)default_path, &p12type);
- } else {
- pFile = wfe_GetSaveFileName(hWnd, (char *)prompt_string, (char *)default_path, 0);
- }
- } /* end else */
- #endif
-
- if(!pFile)
- return(-1);
-
- fn(context, pFile, closure);
-
- return(0);
- }
-
- extern "C" int FE_PromptForNewsHost (MWContext *context,
- const char *prompt_string,
- ReadFileNameCallbackFunction fn,
- void *closure)
- {
-
- char * pString = FE_Prompt(context, prompt_string, "");
-
- if(pString) {
-
- // make sure we have a correct looking news URL
- if(strncmp(pString, "news://", 7) && strncmp(pString, "snews://", 8)) {
- char * pNewString = (char *) XP_ALLOC(10 + XP_STRLEN(pString));
- sprintf(pNewString, "news://%s", pString);
- XP_FREE(pString);
- pString = pNewString;
- }
-
- fn(context, pString, closure);
- }
-
- return(0);
- }
-
- #ifdef MOZ_MAIL_NEWS
- extern "C" ABook * FE_GetAddressBook ( MSG_Pane *pPane)
- {
- return theApp.m_pABook;
- }
-
-
- extern "C" XP_List * FE_GetDirServers ()
- {
- return theApp.m_directories;
- }
-
-
- extern "C" MWContext * FE_GetAddressBookContext ( MSG_Pane *pPane, XP_Bool viewnow )
- {
- return theApp.m_pAddressContext;
- }
- #endif
-
- //
- // Send back the current user's email address
- //
- extern "C" const char *FE_UsersMailAddress()
- {
- #ifdef MOZ_MAIL_NEWS
- const char * addr = g_MsgPrefs.m_csUsersEmailAddr;
-
- if(addr && *addr)
- return(addr);
- #else
- static char * prefStr = NULL;
- XP_FREEIF(prefStr);
- PREF_CopyCharPref("mail.identity.useremail",&prefStr);
- return(prefStr);
- #endif // MOZ_MAIL_NEWS
- return("");
- }
-
-
- //
- // Send back the fullname of the current user
- //
- extern "C" const char *FE_UsersFullName()
- {
- #ifdef MOZ_MAIL_NEWS
- const char * name = g_MsgPrefs.m_csUsersFullName;
-
- if(name && *name)
- return(name);
- else
- return(NULL);
- #else
- static char * prefStr = NULL;
- XP_FREEIF(prefStr);
- PREF_CopyCharPref("mail.identity.username", &prefStr);
- return(prefStr);
- #endif
- }
-
- //
- // Return the uesr's organization (if specified)
- //
- extern "C" const char *FE_UsersOrganization (void)
- {
- #ifdef MOZ_MAIL_NEWS
- const char * org = g_MsgPrefs.m_csUsersOrganization;
-
- if(org && *org)
- return(org);
- else
- return(NULL);
- #else
- static char * prefStr = NULL;
- XP_FREEIF(prefStr);
- PREF_CopyCharPref("mail.identity.organization", &prefStr);
- return(prefStr);
- #endif // MOZ_MAIL_NEWS
- }
-
- extern "C" const char *FE_UsersSignature(void)
- {
- #ifdef MOZ_MAIL_NEWS
- // Just return the sig file that we read in on startup.
- char * pszPref;
- PREF_CopyCharPref("mail.signature_file", &pszPref);
- if (pszPref) {
- XP_FREEIF(g_MsgPrefs.m_pszUserSig);
- g_MsgPrefs.m_pszUserSig = wfe_ReadUserSig(pszPref);
- }
- XP_FREEIF(pszPref);
-
- return(g_MsgPrefs.m_pszUserSig);
- #else
- return("");
- #endif // MOZ_MAIL_NEWS
-
- }
-
- // Read in a user's sig file
- // Return NULL on error
- // The string should be freed by the caller
- MODULE_PRIVATE char *wfe_ReadUserSig(const char * msg)
- {
- #ifdef MOZ_MAIL_NEWS
- FILE * fp;
- char * buffer;
-
- if(!msg || !msg[0])
- return(NULL);
-
- #ifdef XP_WIN32
- fp = fopen(msg, "rb");
- #else
- // Windows uses ANSI codepage, DOS uses OEM codepage, fopen takes OEM codepage
- // That's why we need to do conversion here.
- CString oembuff = msg;
- oembuff.AnsiToOem();
- fp = fopen(oembuff, "rb");
- #endif
- if(!fp)
- return(NULL);
-
- // go to the end
- fseek(fp, 0L, SEEK_END);
- int32 len = ftell(fp);
-
- if(len < 1)
- return(NULL);
-
- buffer = (char *) XP_ALLOC(len + 5);
- if(!buffer)
- return(NULL);
-
- fseek(fp, 0L, SEEK_SET);
- len = fread(buffer, 1, CASTINT(len), fp);
- buffer[len] = '\0';
-
- // Strip whitespace from the end of the buffer.
- len--;
- while(len > 0 && (isspace(buffer[len])||buffer[len]==26)) {
- buffer[len] = '\0';
- len--;
- }
-
- // Add a new line to the end.
- if(len > 0) {
- strcat(buffer, "\r\n");
- }
-
- fclose(fp);
-
- return(buffer);
- #else // MOZ_MAIL_NEWS
- return("");
- #endif // MOZ_MAIL_NEWS
-
- }
-
- #ifdef MOZ_MAIL_NEWS
- // FE function that the back-end calls when it gets a new
- // IMAP highwater mark that needs to be communicated/stored
- // for the stand-alone biff
-
- #ifdef _WIN32
- extern "C" uint32 FE_SetBiffInfo(MSG_BiffInfoType type, uint32 data)
- {
- switch(type)
- {
- case MSG_IMAPHighWaterMark:
- {
- static const char szHighWaterKey[] = "IMAPHighWaterUID";
- SetBiffInfoNum(szHighWaterKey, data);
- break;
- }
- default:
- {
- break;
- }
- }
- return(0);
- }
- #endif
- #endif
-
- #ifdef MOZ_MAIL_NEWS
- //
- // A biff operation has just completed.
- //
-
- extern "C" void FE_UpdateBiff(MSG_BIFF_STATE state)
- {
- #ifdef _WIN32
- const char szNSNotifyWindowClassName[] = NSNotifyWindowClassName; // do not localize this string
- const char szNSNotifyRegisterMsgStr[] = NSMailNotifyMsg; // do not localize this string
- HWND nsNotifyHwnd = FindWindow(szNSNotifyWindowClassName, NULL);
- static UINT WM_NSMailMsg = 0;
- if (WM_NSMailMsg == 0)
- {
- WM_NSMailMsg = RegisterWindowMessage(szNSNotifyRegisterMsgStr);
- }
-
- NOTIFYICONDATA nid;
- if (sysInfo.m_bWin4) {
- nid.cbSize = sizeof(NOTIFYICONDATA);
- nid.hWnd = theApp.m_pHiddenFrame->GetSafeHwnd();
- nid.uID = ID_TOOLS_INBOX;
- nid.uFlags = 0;
- }
-
- if (state == MSG_BIFF_NoMail) {
- // tell the stand-alone biff there is no new mail anymore
- // always do this, even if this is the same as the last state
- if (nsNotifyHwnd)
- PostMessage(nsNotifyHwnd, WM_NSMailMsg, NSMAIL_GetMailCompleted, 0);
- }
- #endif
-
- static MSG_BIFF_STATE stateOld = MSG_BIFF_Unknown;
-
- if ( stateOld != state ) {
- switch ( state ) {
- case MSG_BIFF_NoMail:
- #ifdef _WIN32
- if (sysInfo.m_bWin4) {
- Shell_NotifyIcon( NIM_DELETE, &nid );
- }
- #endif
- theApp.GetTaskBarMgr().ReplaceTaskIcon( ID_TOOLS_INBOX, IDB_TASKBARL, IDB_TASKBARS, INBOX_ICON_INDEX);
- break;
- case MSG_BIFF_Unknown:
- theApp.GetTaskBarMgr().ReplaceTaskIcon( ID_TOOLS_INBOX, IDB_TASKBARL, IDB_TASKBARS, UNKNOWN_MAIL_ICON_INDEX);
- break;
- case MSG_BIFF_NewMail:
- XP_Bool prefBool = TRUE;
- PREF_GetBoolPref("mail.play_sound",&prefBool);
-
- #ifdef _WIN32
- if (sysInfo.m_bWin4) {
- if (prefBool) {
- PlaySound( _T("MailBeep"), NULL, SND_ASYNC );
- }
-
- // Add the biff icon only if we don't find a standalone biff
- if (!nsNotifyHwnd) {
- nid.uFlags = NIF_MESSAGE|NIF_ICON|NIF_TIP;
- nid.uCallbackMessage = MSG_TASK_NOTIFY;
- nid.hIcon = ::LoadIcon(AfxGetResourceHandle(), MAKEINTRESOURCE( IDI_MAIL ));
- strcpy(nid.szTip, szLoadString(IDS_YOUHAVENEWMAIL));
- Shell_NotifyIcon( NIM_ADD, &nid );
- if (nid.hIcon)
- DestroyIcon(nid.hIcon);
- }
- else {
- if (sysInfo.m_bWin4) {
- Shell_NotifyIcon( NIM_DELETE, &nid );
- }
- }
- }
- else
- #endif
- {
- if (prefBool) {
- sndPlaySound( "MailBeep", SND_ASYNC );
- }
- }
-
- theApp.GetTaskBarMgr().ReplaceTaskIcon( ID_TOOLS_INBOX, IDB_TASKBARL, IDB_TASKBARS, NEW_MAIL_ICON_INDEX);
- break;
- }
- stateOld = state;
- }
- }
- #endif
-
- //
- // Save the POP3 password in the encrypted form it was handed to us
- //
- extern "C" void FE_RememberPopPassword(MWContext * context, const char * password)
- {
- #ifdef MOZ_MAIL_NEWS
- // if we aren't supposed to remember clear anything in the registry
- XP_Bool prefBool;
- PREF_GetBoolPref("mail.remember_password",&prefBool);
-
- if(prefBool)
- PREF_SetCharPref("mail.pop_password",(char *)password);
- else
- PREF_SetCharPref("mail.pop_password","");
- #endif /* MOZ_MAIL_NEWS */
- }
-
- #ifdef MOZ_MAIL_NEWS
- /////////////////////////////////////////////////////////////////////
- //
- // CNewsDownloadDialog
- //
-
- class CNewsDownloadDialog: public CDialog {
-
- protected:
- enum { IDD = IDD_NEWSMAXHEADERS };
-
- virtual BOOL OnInitDialog( );
- virtual void DoDataExchange(CDataExchange* pDX);
-
- public:
- int32 m_iNumMsg;
- int m_iDownloadSome;
- int32 m_iDownloadMax;
- int m_iMarkRead;
-
- CNewsDownloadDialog( MWContext *pXPCX, int32 iNumMsg);
-
- protected:
- afx_msg void OnRadioClicked();
- afx_msg void OnEditFocus();
- DECLARE_MESSAGE_MAP();
- };
-
- void CNewsDownloadDialog::DoDataExchange(CDataExchange* pDX)
- {
- CDialog::DoDataExchange(pDX);
-
- DDX_Radio(pDX, IDC_RADIO1, m_iDownloadSome);
- DDX_Text(pDX, IDC_EDIT1, m_iDownloadMax);
- DDX_Check(pDX, IDC_CHECK1, m_iMarkRead);
- }
-
- BOOL CNewsDownloadDialog::OnInitDialog()
- {
- CDialog::OnInitDialog();
-
- CWnd *widget = GetDlgItem(IDC_STATIC1);
-
- CString cs;
- cs.Format(szLoadString(IDS_MSGSTODOWNLOAD),
- (long int) m_iNumMsg );
- widget->SetWindowText(cs);
-
- widget = GetDlgItem( IDC_CHECK1 );
- widget->EnableWindow( m_iDownloadSome );
- return TRUE;
- }
-
- CNewsDownloadDialog::CNewsDownloadDialog( MWContext *pXPCX, int32 iNumMsg ):
- CDialog( IDD, ABSTRACTCX(pXPCX)->GetDialogOwner() )
- {
- m_iNumMsg = iNumMsg;
-
- m_iDownloadMax = 0;
- PREF_GetIntPref("news.max_articles", &m_iDownloadMax);
-
- m_iDownloadSome = 0;
-
- XP_Bool bMarkRead = FALSE;
- PREF_GetBoolPref( "news.mark_old_read", &bMarkRead );
- m_iMarkRead = bMarkRead ? 1 : 0;
- }
-
- BEGIN_MESSAGE_MAP(CNewsDownloadDialog, CDialog)
- ON_BN_CLICKED(IDC_RADIO1, OnRadioClicked)
- ON_BN_CLICKED(IDC_RADIO2, OnRadioClicked)
- ON_EN_SETFOCUS(IDC_EDIT1, OnEditFocus)
- END_MESSAGE_MAP()
-
- void CNewsDownloadDialog::OnRadioClicked()
- {
- UpdateData(TRUE);
-
- CWnd *widget = GetDlgItem( IDC_CHECK1 );
- widget->EnableWindow( m_iDownloadSome );
- }
-
- void CNewsDownloadDialog::OnEditFocus()
- {
- CheckRadioButton(IDC_RADIO1, IDC_RADIO2, IDC_RADIO2);
- OnRadioClicked();
- }
-
- extern "C" XP_Bool FE_NewsDownloadPrompt( MWContext *context,
- int32 numMessagesToDownload,
- XP_Bool *downloadAll)
- {
- CNewsDownloadDialog dlg(context, numMessagesToDownload);
-
- if (dlg.DoModal() == IDOK ) {
- if (dlg.m_iDownloadSome) {
- *downloadAll = FALSE;
- PREF_SetIntPref("news.max_articles", dlg.m_iDownloadMax);
- PREF_SetBoolPref("news.mark_old_read", dlg.m_iMarkRead ? TRUE : FALSE);
- } else {
- *downloadAll = TRUE;
- }
- return TRUE;
- } else {
- return FALSE;
- }
- }
-
- extern "C" void FE_ListChangeStarting(MSG_Pane* pane, XP_Bool asynchronous,
- MSG_NOTIFY_CODE notify, MSG_ViewIndex where,
- int32 num)
- {
- LPUNKNOWN pUnk = (LPUNKNOWN) MSG_GetFEData( pane );
- if (pUnk) {
- LPMSGLIST pInterface = NULL;
- pUnk->QueryInterface( IID_IMsgList, (LPVOID *) &pInterface );
- if ( pInterface ) {
- pInterface->ListChangeStarting( pane, asynchronous, notify, where, num );
- pInterface->Release();
- }
- }
- }
-
- extern "C" void FE_ListChangeFinished(MSG_Pane* pane, XP_Bool asynchronous,
- MSG_NOTIFY_CODE notify, MSG_ViewIndex where,
- int32 num)
- {
- LPUNKNOWN pUnk = (LPUNKNOWN) MSG_GetFEData( pane );
- if (pUnk) {
- LPMSGLIST pInterface = NULL;
- pUnk->QueryInterface( IID_IMsgList, (LPVOID *) &pInterface );
- if ( pInterface ) {
- pInterface->ListChangeFinished( pane, asynchronous, notify, where, num );
- pInterface->Release();
- }
- }
- }
-
- extern "C" void FE_PaneChanged( MSG_Pane *pane, XP_Bool asynchronous,
- MSG_PANE_CHANGED_NOTIFY_CODE notify, int32 value)
- {
- LPUNKNOWN pUnk = (LPUNKNOWN) MSG_GetFEData( pane );
- if (pUnk) {
- LPMAILFRAME pInterface = NULL;
- pUnk->QueryInterface( IID_IMailFrame, (LPVOID *) &pInterface );
- ASSERT( pInterface );
- if ( pInterface ) {
- pInterface->PaneChanged( pane, asynchronous, notify, value );
- pInterface->Release();
- }
- }
- }
-
- extern "C" XP_Bool FE_IsAltMailUsed(MWContext *pContext)
- {
- return theApp.m_hPostalLib ? TRUE : FALSE;
- }
-
- #endif // MOZ_MAIL_NEWS
-
-
- #ifdef _WIN32
-
- // these are the registry functions that are used to communicate and store
- // stuff in the registry for the stand-alone biff
- static const char szMasterKey[] = "Software\\Netscape\\Netscape Navigator\\%s";
- static const char szMasterKeyBiff[] = "Software\\Netscape\\Netscape Navigator\\biff";
- static const char szUserKey[] = "Software\\Netscape\\Netscape Navigator\\Users";
- static const char szCurrentUser[] = "CurrentUser";
-
- BOOL GetConfigInfoStr(LPCSTR pSection, LPCSTR pKey, LPSTR pBuf, int lenBuf, HKEY hMasterKey);
- HKEY RegCreateParent(LPCSTR pSection, HKEY hMasterKey);
- BOOL SetConfigInfoNum(LPCSTR pSection, LPCSTR pKey, uint32 num, HKEY hMasterKey);
-
- HKEY RegOpenParent(LPCSTR pSection, HKEY hRootKey)
- {
- char buf[128];
- HKEY hKey;
- if (strchr(pSection, '\\'))
- {
- lstrcpy(buf, pSection);
- }
- else
- {
- wsprintf(buf, szMasterKey, pSection);
- }
- if (RegOpenKeyEx(hRootKey, buf, 0, KEY_ALL_ACCESS, &hKey) != ERROR_SUCCESS)
- {
- return(NULL);
- }
- return(hKey);
- }
-
- BOOL SetBiffInfoNum(LPCSTR pKey, uint32 num)
- {
- char userName[512];
- char temp[512];
- if (GetConfigInfoStr(szUserKey, szCurrentUser, userName, sizeof(userName), HKEY_LOCAL_MACHINE))
- {
- wsprintf(temp, "%s\\%s\\biff", szUserKey, userName);
- return(SetConfigInfoNum(temp, pKey, num, HKEY_LOCAL_MACHINE));
- }
- // if the user isn't there, then store it in the global biff location
- return(SetConfigInfoNum(szMasterKeyBiff, pKey, num, HKEY_CURRENT_USER));
- }
-
- BOOL GetConfigInfoStr(LPCSTR pSection, LPCSTR pKey, LPSTR pBuf, int lenBuf, HKEY hMasterKey)
- {
- HKEY hKey;
- hKey = RegOpenParent(pSection, hMasterKey);
- if (!hKey)
- {
- return(FALSE);
- }
-
- uint32 len = (uint32)lenBuf;
- BOOL retVal = (RegQueryValueEx(hKey, pKey, NULL, NULL, (LPBYTE)pBuf, &len) == ERROR_SUCCESS);
- RegCloseKey(hKey);
- return(retVal);
- }
-
- HKEY RegCreateParent(LPCSTR pSection, HKEY hMasterKey)
- {
- char buf[128];
- HKEY hKey;
- if (strchr(pSection, '\\'))
- {
- lstrcpy(buf, pSection);
- }
- else
- {
- wsprintf(buf, szMasterKey, pSection);
- }
- if (RegCreateKey(hMasterKey, buf, &hKey) != ERROR_SUCCESS)
- {
- return(NULL);
- }
- return(hKey);
- }
-
- BOOL SetConfigInfoNum(LPCSTR pSection, LPCSTR pKey, uint32 num, HKEY hMasterKey)
- {
- HKEY hKey;
- hKey = RegCreateParent(pSection, hMasterKey);
- if (!hKey)
- {
- return(FALSE);
- }
-
- BOOL retVal = (RegSetValueEx(hKey, pKey, 0, REG_DWORD, (LPBYTE)&num, sizeof(num)) == ERROR_SUCCESS);
- RegCloseKey(hKey);
- return(retVal);
- }
-
- #endif // _WIN32
-
-