mirror of
https://github.com/mozilla/gecko-dev.git
synced 2024-12-02 10:00:54 +00:00
256 lines
9.9 KiB
C++
256 lines
9.9 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.1 (the "License"); you may not use this file
|
|
* except in compliance with the License. You may obtain a copy of
|
|
* the License at http://www.mozilla.org/NPL/
|
|
*
|
|
* Software distributed under the License is distributed on an "AS
|
|
* IS" basis, WITHOUT WARRANTY OF ANY KIND, either express or
|
|
* implied. See the License for the specific language governing
|
|
* rights and limitations under the License.
|
|
*
|
|
* The Original Code is mozilla.org code.
|
|
*
|
|
* The Initial Developer of the Original Code is Netscape
|
|
* Communications Corporation. Portions created by Netscape are
|
|
* Copyright (C) 1998 Netscape Communications Corporation. All
|
|
* Rights Reserved.
|
|
*
|
|
* Contributor(s):
|
|
*/
|
|
|
|
#ifndef _MsgMast_H_
|
|
#define _MsgMast_H_
|
|
|
|
#include "prlong.h"
|
|
#include "msgprnot.h"
|
|
#include "errcode.h"
|
|
class MSG_Prefs;
|
|
class MSG_Pane;
|
|
class MSG_ThreadPane;
|
|
class MSG_FolderInfo;
|
|
class MSG_FolderInfoMail;
|
|
class MSG_FolderInfoContainer;
|
|
class MSG_IMAPFolderInfoContainer;
|
|
class MSG_FolderInfoNews;
|
|
class ParseMailboxState;
|
|
class msg_HostTable;
|
|
class MSG_NewsHost;
|
|
class ListNewsGroupState;
|
|
class XPPtrArray;
|
|
struct MSG_PurgeInfo;
|
|
class MSG_FolderCache;
|
|
class MSG_CachedConnectionList;
|
|
class MSG_IMAPHostTable;
|
|
|
|
typedef void * pw_ptr;
|
|
|
|
class MSG_Master : public MSG_PrefsNotify {
|
|
public:
|
|
MSG_Master(MSG_Prefs* prefs);
|
|
virtual ~MSG_Master();
|
|
|
|
virtual void NotifyPrefsChange(NotifyCode code);
|
|
|
|
MSG_FolderInfo *GetFolderTree();
|
|
MSG_FolderInfoMail* GetLocalMailFolderTree();
|
|
MSG_IMAPFolderInfoContainer* GetImapMailFolderTree();
|
|
XP_Bool FolderTreeExists ();
|
|
|
|
void BroadcastFolderChanged(MSG_FolderInfo *folder);
|
|
void BroadcastFolderDeleted (MSG_FolderInfo *folder);
|
|
void BroadcastFolderAdded (MSG_FolderInfo *folder, MSG_Pane *instigator = NULL);
|
|
void BroadcastFolderKeysAreInvalid (MSG_FolderInfo *folder);
|
|
|
|
MSG_Prefs* GetPrefs() {return m_prefs;}
|
|
|
|
void SetFirstPane(MSG_Pane* pane);
|
|
MSG_Pane* GetFirstPane();
|
|
|
|
int32 GetFolderChildren(MSG_FolderInfo* folder, MSG_FolderInfo** result,
|
|
int32 resultsize);
|
|
|
|
int32 GetFoldersWithFlag(uint32 flags, MSG_FolderInfo** result,
|
|
int32 resultsize);
|
|
|
|
XP_Bool GetFolderLineById(MSG_FolderInfo* info, MSG_FolderLine* data);
|
|
MSG_Pane *FindPaneOfType(MSG_FolderInfo *id, MSG_PaneType type) ;
|
|
MSG_Pane *FindPaneOfType(const char *url, MSG_PaneType type) ;
|
|
|
|
MSG_Pane *FindFirstPaneOfType(MSG_PaneType type);
|
|
MSG_Pane *FindNextPaneOfType(MSG_Pane *startHere, MSG_PaneType type);
|
|
|
|
MSG_IMAPFolderInfoMail *FindImapMailFolder(const char* onlineServerName); // As imap would say, BAD
|
|
MSG_IMAPFolderInfoMail *FindImapMailFolder(const char *hostName, const char* onlineServerName, const char *owner, XP_Bool createIfMissing);
|
|
|
|
MSG_IMAPFolderInfoMail *FindImapMailFolderFromPath(const char *pathName);
|
|
MSG_FolderInfoMail* FindMagicMailFolder(int flag, XP_Bool createIfMissing);
|
|
MSG_FolderInfoMail* FindFolderForNikiBiff(const char *path, const char *host, const char *owner);
|
|
MSG_FolderInfoMail *FindMailFolder(const char* pathname,
|
|
XP_Bool createIfMissing);
|
|
MSG_FolderInfoNews *FindNewsFolder(const char *host_and_port,
|
|
const char *newsGroupName,
|
|
XP_Bool secureP,
|
|
XP_Bool autoSubscribe = TRUE);
|
|
MSG_FolderInfoNews *FindNewsFolder(MSG_NewsHost* host,
|
|
const char *newsGroupName,
|
|
XP_Bool autoSubscribe = TRUE);
|
|
MSG_ThreadPane* FindThreadPaneNamed(const char *pathname);
|
|
void FindPanesReferringToFolder (MSG_FolderInfo *folder, XPPtrArray *outArray);
|
|
MSG_FolderInfo *FindNextFolder(MSG_FolderInfo *startFolder);
|
|
MSG_FolderInfo *FindNextFolderWithUnread(MSG_FolderInfo *startFolder);
|
|
|
|
ParseMailboxState *GetParseMailboxState(const char *folderName);
|
|
ParseMailboxState *GetMailboxParseState() {return m_parseMailboxState;}
|
|
void SetParseMailboxState(ParseMailboxState *state)
|
|
{m_parseMailboxState = state;}
|
|
void ClearParseMailboxState();
|
|
void ClearParseMailboxState(const char *folderName);
|
|
|
|
// Get News Header helper routines
|
|
ListNewsGroupState *GetListNewsGroupState(MSG_NewsHost* host,
|
|
const char *newsGroupName);
|
|
void ClearListNewsGroupState(MSG_NewsHost* host,
|
|
const char *newsGroupName);
|
|
|
|
MSG_FolderInfo* GetFolderInfo(const char *url, XP_Bool createIfMissing);
|
|
int GetMessageLineForURL(const char *url, MSG_MessageLine *msgLine);
|
|
MSG_NewsHost* FindHost(const char* name, XP_Bool isSecure,
|
|
int32 port); // If port is negative, then we will
|
|
// look for a ":portnum" as part of the
|
|
// name. Otherwise, there had better
|
|
// not be a colon in the name.
|
|
MSG_NewsHost* GetDefaultNewsHost();
|
|
MSG_FolderInfoNews * AddNewsGroup(const char *groupURL);
|
|
MSG_FolderInfoNews * AddProfileNewsgroup(MSG_NewsHost* host,
|
|
const char *group);
|
|
MSG_NewsHost * AddNewsHost(const char* hostname, XP_Bool isSecure, int32 port);
|
|
|
|
msg_HostTable* GetHostTable() {return m_hosttable;}
|
|
MSG_IMAPHostTable *GetIMAPHostTable();
|
|
MSG_IMAPHost *AddIMAPHost(const char* hostname,
|
|
XP_Bool isSecure,
|
|
const char *userName,
|
|
XP_Bool checkNewMail,
|
|
int biffInterval,
|
|
XP_Bool rememberPassword,
|
|
XP_Bool usingSubscription,
|
|
XP_Bool overrideNamespace,
|
|
const char *personalOnlineDir,
|
|
const char *publicOnlineDir,
|
|
const char *otherUsersOnlineDir,
|
|
XP_Bool writePrefs = TRUE);
|
|
|
|
MSG_IMAPHost *GetIMAPHost(const char *hostName);
|
|
MSG_FolderInfoContainer *GetImapMailFolderTreeForHost(const char *hostName);
|
|
int32 GetSubscribingHosts(MSG_Host** result, int32 resultsize);
|
|
int32 GetSubscribingIMAPHosts(MSG_IMAPHost** result, int32 resultsize);
|
|
|
|
XP_Bool CleanupNeeded();
|
|
void CleanupFolders(MSG_Pane *pane);
|
|
int SynchronizeOffline(MSG_Pane *pane, XP_Bool bDownloadDiscussions, XP_Bool bGetNewMail, XP_Bool bSendOutbox, XP_Bool bGetDirectories, XP_Bool goOffline);
|
|
int DownloadForOffline(MSG_Pane *pane, MSG_FolderInfo *folder = NULL);
|
|
void ClearFolderGotNewBit();
|
|
|
|
XP_Bool AcquireRulesSemaphore (void*);
|
|
XP_Bool ReleaseRulesSemaphore (void*);
|
|
|
|
XP_Bool AcquireEditHeadersSemaphore (void *);
|
|
XP_Bool ReleaseEditHeadersSemaphore (void *);
|
|
|
|
// Non-standard implementation but to lure the customers ...
|
|
XP_Bool IsUserAuthenticated() {return m_userAuthenticated;}
|
|
void SetUserAuthenticated(XP_Bool bAuthenticated) { m_userAuthenticated = bAuthenticated; }
|
|
XP_Bool AreLocalFoldersAuthenticated() {return m_localFoldersAuthenticated;}
|
|
void SetLocalFoldersAuthenticated() {m_localFoldersAuthenticated = TRUE;}
|
|
|
|
void SetMailAccountURL(const char* urlString);
|
|
const char* GetMailAccountURL() { return m_mailAccountUrl; }
|
|
|
|
TNavigatorImapConnection* UnCacheImapConnection(const char *host, const char *folderName);
|
|
XP_Bool TryToCacheImapConnection(TNavigatorImapConnection *connection, const char *host, const char *folderName);
|
|
void CloseCachedImapConnections();
|
|
XP_Bool HasCachedConnection(MSG_IMAPFolderInfoMail *folder);
|
|
void ImapFolderClosed(MSG_FolderInfo *folder);
|
|
|
|
MsgERR CreateMailFolder (MSG_Pane *invokingPane, MSG_FolderInfo *parent, const char *childName);
|
|
MSG_PurgeInfo *GetPurgeHdrInfo();
|
|
MSG_PurgeInfo *GetPurgeArtInfo();
|
|
|
|
void ImapGoOnline(MSG_Pane *paneForUrls);
|
|
|
|
XP_Bool IsHTMLOK(MSG_FolderInfo* group);
|
|
int SetIsHTMLOK(MSG_FolderInfo* group, MWContext* context, XP_Bool value);
|
|
|
|
XP_Bool InitFolderFromCache (MSG_FolderInfo *folder);
|
|
|
|
static void PostCreateImapFolderUrlExitFunc (URL_Struct *URL_s, int status, MWContext *window_id);
|
|
|
|
XP_Bool IsCachePasswordProtected();
|
|
XP_Bool IsCollabraEnabled() { return m_collabraEnabled; };
|
|
XP_Bool TryUpgradeToIMAPSubscription(MWContext *context, XP_Bool forceBringUpSubscribeUI,
|
|
MSG_Pane *paneToAssociate, MSG_IMAPHost *hostBeingOpened);
|
|
void SetUpgradingToIMAPSubscription(XP_Bool upgrading) { m_upgradingToIMAPSubscription = upgrading; }
|
|
XP_Bool GetUpgradingToIMAPSubscription() { return m_upgradingToIMAPSubscription; }
|
|
static void PostImapSubscriptionUpgradeExitFunc (URL_Struct *URL_s, int status, MWContext *context);
|
|
static void CancelIMAPProgressCallback(void *closure);
|
|
void SetIMAPSubscriptionUpgradedPrefs(); // call upon upgrade success, to write out pref.
|
|
XP_Bool ShowIMAPProgressWindow();
|
|
void PostIMAPUpgradeFolderLoad(int status);
|
|
|
|
XP_Bool GetPlayingBackOfflineOps() {return m_playingBackOfflineOps;}
|
|
void SetPlayingBackOfflineOps(XP_Bool playingBackOfflineOps) {m_playingBackOfflineOps = playingBackOfflineOps;}
|
|
|
|
char *GetArbitraryHeadersForHostFromFilters(const char *hostName);
|
|
char *GetArbitraryHeadersForHostFromMDN(const char *hostName);
|
|
int PromptForHostPassword(MWContext *context, MSG_FolderInfo *folder);
|
|
|
|
protected:
|
|
XP_Bool ShouldUpgradeToIMAPSubscription();
|
|
|
|
private:
|
|
MSG_Prefs* m_prefs;
|
|
MSG_Pane* m_firstpane;
|
|
|
|
MSG_FolderInfo* m_folderTree; // Master list of all folders.
|
|
MSG_FolderInfoMail* m_mailfolders; // List of local mail folders.
|
|
MSG_IMAPFolderInfoContainer* m_imapfolders; // List of imap mail folders.
|
|
|
|
// get mailbox header handling state - only one ever...
|
|
// This means we can only be parsing one at a time.
|
|
ParseMailboxState *m_parseMailboxState;
|
|
XP_Bool m_IMAPfoldersBuilt;
|
|
msg_HostTable* m_hosttable;
|
|
MSG_IMAPHostTable *m_imapHostTable;
|
|
|
|
MSG_CachedConnectionList *m_cachedConnectionList;
|
|
|
|
void *m_editHeadersSemaphoreHolder;
|
|
void *m_rulesSemaphoreHolder;
|
|
// This is a non-standard implementation. But....
|
|
XP_Bool m_userAuthenticated;
|
|
|
|
MSG_PurgeInfo *m_purgeHdrPref;
|
|
MSG_PurgeInfo *m_purgeArtPref;
|
|
int32 m_purgeThreshhold;
|
|
char *m_mailAccountUrl;
|
|
|
|
MSG_FolderCache *m_folderCache;
|
|
|
|
// whether or not Collabra is enabled, from the prefs and/or Mission Control
|
|
// default is true
|
|
XP_Bool m_collabraEnabled;
|
|
XP_Bool m_upgradingToIMAPSubscription;
|
|
XP_Bool m_playingBackOfflineOps;
|
|
XP_Bool m_passwordProtectCache;
|
|
XP_Bool m_localFoldersAuthenticated;
|
|
|
|
// For the IMAP subscription upgrade
|
|
pw_ptr m_progressWindow;
|
|
MSG_ThreadPane *m_imapUpgradeBeginPane;
|
|
};
|
|
|
|
|
|
#endif /* _MsgMast_H_ */
|