gecko-dev/lib/libmsg/msgmast.h

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_ */