gecko-dev/mailnews/db/msgdb/public/nsIMsgDatabase.h
bienvenu%netscape.com f4c3ca6058 make msgdb a dll
1999-04-04 17:48:16 +00:00

188 lines
7.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.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) 1999 Netscape Communications Corporation. All Rights
* Reserved.
*/
#ifndef nsIMsgDatabase_h__
#define nsIMsgDatabase_h__
#include "nsISupports.h"
#include "MailNewsTypes.h"
class nsIMessage;
class nsIDBChangeListener;
class nsIEnumerator;
class nsThreadMessageHdr; // XXX where's the public interface to this?
class nsMsgKeyArray;
class nsIDBFolderInfo;
enum nsMsgDBCommitType {
kSmallCommit,
kLargeCommit,
kSessionCommit,
kCompressCommit
};
struct nsMsgHdrStruct {
nsMsgKey m_threadId;
nsMsgKey m_messageKey;
nsString m_subject; // should be nsCString when it's impl
nsString m_author; // should be nsCString when it's impl
nsString m_messageId; // should be nsCString when it's impl
nsString m_references; // should be nsCString when it's impl
nsString m_recipients; // should be nsCString when it's impl
time_t m_date; // is there some sort of PR type I should use for this?
PRUint32 m_messageSize; // lines for news articles, bytes for local mail and imap messages
PRUint32 m_flags;
PRInt16 m_numChildren; // for top-level threads
PRInt16 m_numNewChildren; // for top-level threads
nsMsgPriority m_priority;
};
class nsIDBChangeAnnouncer : public nsISupports {
public:
// these 2 calls return NS_OK on success, NS_COMFALSE on failure
NS_IMETHOD AddListener(nsIDBChangeListener *listener) = 0;
NS_IMETHOD RemoveListener(nsIDBChangeListener *listener) = 0;
NS_IMETHOD NotifyKeyChangeAll(nsMsgKey keyChanged, PRInt32 flags,
nsIDBChangeListener *instigator) = 0;
NS_IMETHOD NotifyKeyAddedAll(nsMsgKey keyAdded, PRInt32 flags,
nsIDBChangeListener *instigator) = 0;
NS_IMETHOD NotifyKeyDeletedAll(nsMsgKey keyDeleted, PRInt32 flags,
nsIDBChangeListener *instigator) = 0;
NS_IMETHOD NotifyAnnouncerGoingAway(void) = 0;
};
class nsIMsgDatabase : public nsIDBChangeAnnouncer {
public:
// open local folder...
NS_IMETHOD Open(nsFileSpec &folderName, PRBool create, nsIMsgDatabase** pMessageDB, PRBool upgrading) = 0;
NS_IMETHOD Close(PRBool forceCommit) = 0;
NS_IMETHOD OpenMDB(const char *dbName, PRBool create) = 0;
NS_IMETHOD CloseMDB(PRBool commit) = 0;
NS_IMETHOD Commit(nsMsgDBCommitType commitType) = 0;
// Force closed is evil, and we should see if we can do without it.
// In 4.x, it was mainly used to remove corrupted databases.
NS_IMETHOD ForceClosed(void) = 0;
NS_IMETHOD GetDBFolderInfo(nsIDBFolderInfo **result) = 0;
// get a message header for the given key. Caller must release()!
NS_IMETHOD GetMsgHdrForKey(nsMsgKey key, nsIMessage **msg) = 0;
// create a new message header from a hdrStruct. Caller must release resulting header,
// after adding any extra properties they want.
NS_IMETHOD CreateNewHdrAndAddToDB(PRBool *newThread,
nsMsgHdrStruct *hdrStruct,
nsIMessage **newHdr,
PRBool notify) = 0;
// Must call AddNewHdrToDB after creating. The idea is that you create
// a new header, fill in its properties, and then call AddNewHdrToDB.
// AddNewHdrToDB will send notifications to any listeners.
NS_IMETHOD CreateNewHdr(nsMsgKey key, nsIMessage **newHdr) = 0;
NS_IMETHOD AddNewHdrToDB(nsIMessage *newHdr, PRBool notify) = 0;
// extract info from an nsIMessage into a nsMsgHdrStruct
NS_IMETHOD GetMsgHdrStructFromnsMsgHdr(nsIMessage *msgHdr,
nsMsgHdrStruct *hdrStruct) = 0;
NS_IMETHOD CopyHdrFromExistingHdr(nsMsgKey key, nsIMessage *existingHdr, nsIMessage **newHdr) = 0;
#if HAVE_INT_ENUMERATORS
NS_IMETHOD EnumerateKeys(nsIEnumerator* *outputKeys) = 0;
#else
NS_IMETHOD ListAllKeys(nsMsgKeyArray &outputKeys) = 0;
#endif
NS_IMETHOD EnumerateMessages(nsIEnumerator* *result) = 0;
// helpers for user command functions like delete, mark read, etc.
NS_IMETHOD MarkHdrRead(nsIMessage *msgHdr, PRBool bRead,
nsIDBChangeListener *instigator) = 0;
// MDN support
NS_IMETHOD MarkMDNNeeded(nsMsgKey key, PRBool bNeeded,
nsIDBChangeListener *instigator) = 0;
// MarkMDNneeded only used when mail server is a POP3 server
// or when the IMAP server does not support user defined
// PERMANENTFLAGS
NS_IMETHOD IsMDNNeeded(nsMsgKey key, PRBool *isNeeded) = 0;
NS_IMETHOD MarkMDNSent(nsMsgKey key, PRBool bNeeded,
nsIDBChangeListener *instigator) = 0;
NS_IMETHOD IsMDNSent(nsMsgKey key, PRBool *isSent) = 0;
// methods to get and set docsets for ids.
NS_IMETHOD MarkRead(nsMsgKey key, PRBool bRead,
nsIDBChangeListener *instigator) = 0;
NS_IMETHOD MarkReplied(nsMsgKey key, PRBool bReplied,
nsIDBChangeListener *instigator) = 0;
NS_IMETHOD MarkForwarded(nsMsgKey key, PRBool bForwarded,
nsIDBChangeListener *instigator) = 0;
NS_IMETHOD MarkHasAttachments(nsMsgKey key, PRBool bHasAttachments,
nsIDBChangeListener *instigator) = 0;
NS_IMETHOD MarkThreadIgnored(nsThreadMessageHdr *thread, nsMsgKey threadKey, PRBool bIgnored,
nsIDBChangeListener *instigator) = 0;
NS_IMETHOD MarkThreadWatched(nsThreadMessageHdr *thread, nsMsgKey threadKey, PRBool bWatched,
nsIDBChangeListener *instigator) = 0;
NS_IMETHOD IsRead(nsMsgKey key, PRBool *pRead) = 0;
NS_IMETHOD IsIgnored(nsMsgKey key, PRBool *pIgnored) = 0;
NS_IMETHOD IsMarked(nsMsgKey key, PRBool *pMarked) = 0;
NS_IMETHOD HasAttachments(nsMsgKey key, PRBool *pHasThem) = 0;
NS_IMETHOD MarkAllRead(nsMsgKeyArray *thoseMarked) = 0;
NS_IMETHOD MarkReadByDate (time_t te, time_t endDate, nsMsgKeyArray *markedIds) = 0;
NS_IMETHOD DeleteMessages(nsMsgKeyArray* nsMsgKeys, nsIDBChangeListener *instigator) = 0;
NS_IMETHOD DeleteMessage(nsMsgKey key,
nsIDBChangeListener *instigator,
PRBool commit) = 0;
NS_IMETHOD DeleteHeader(nsIMessage *msgHdr, nsIDBChangeListener *instigator,
PRBool commit, PRBool notify) = 0;
NS_IMETHOD UndoDelete(nsIMessage *msgHdr) = 0;
NS_IMETHOD MarkLater(nsMsgKey key, time_t *until) = 0;
NS_IMETHOD MarkMarked(nsMsgKey key, PRBool mark,
nsIDBChangeListener *instigator) = 0;
NS_IMETHOD MarkOffline(nsMsgKey key, PRBool offline,
nsIDBChangeListener *instigator) = 0;
// returns NS_OK on success, NS_COMFALSE on failure
NS_IMETHOD AllMsgKeysImapDeleted(const nsMsgKeyArray *keys) = 0;
NS_IMETHOD MarkImapDeleted(nsMsgKey key, PRBool deleted,
nsIDBChangeListener *instigator) = 0;
NS_IMETHOD GetFirstNew(nsMsgKey *result) = 0;
NS_IMETHOD HasNew(void) = 0; // returns NS_OK if true, NS_COMFALSE if false
NS_IMETHOD ClearNewList(PRBool notify) = 0;
NS_IMETHOD AddToNewList(nsMsgKey key) = 0;
// used mainly to force the timestamp of a local mail folder db to
// match the time stamp of the corresponding berkeley mail folder,
// but also useful to tell the summary to mark itself invalid
NS_IMETHOD SetSummaryValid(PRBool valid) = 0;
};
#endif // nsIMsgDatabase_h__