зеркало из https://github.com/mozilla/pjs.git
315 строки
13 KiB
Plaintext
315 строки
13 KiB
Plaintext
/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
|
|
/* ***** BEGIN LICENSE BLOCK *****
|
|
* Version: MPL 1.1/GPL 2.0/LGPL 2.1
|
|
*
|
|
* The contents of this file are subject to the Mozilla 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/MPL/
|
|
*
|
|
* 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 the Initial Developer are Copyright (C) 1999
|
|
* the Initial Developer. All Rights Reserved.
|
|
*
|
|
* Contributor(s):
|
|
*
|
|
* Alternatively, the contents of this file may be used under the terms of
|
|
* either of the GNU General Public License Version 2 or later (the "GPL"),
|
|
* or the GNU Lesser General Public License Version 2.1 or later (the "LGPL"),
|
|
* in which case the provisions of the GPL or the LGPL are applicable instead
|
|
* of those above. If you wish to allow use of your version of this file only
|
|
* under the terms of either the GPL or the LGPL, and not to allow others to
|
|
* use your version of this file under the terms of the MPL, indicate your
|
|
* decision by deleting the provisions above and replace them with the notice
|
|
* and other provisions required by the GPL or the LGPL. If you do not delete
|
|
* the provisions above, a recipient may use your version of this file under
|
|
* the terms of any one of the MPL, the GPL or the LGPL.
|
|
*
|
|
* ***** END LICENSE BLOCK ***** */
|
|
|
|
#include "nsISupports.idl"
|
|
#include "MailNewsTypes2.idl"
|
|
#include "nsIDBChangeAnnouncer.idl"
|
|
#include "nsIMsgDBView.idl"
|
|
|
|
%{C++
|
|
#include "nsMsgKeyArray.h"
|
|
%}
|
|
|
|
interface nsIDBChangeListener;
|
|
interface nsIMsgDBHdr;
|
|
interface nsISimpleEnumerator;
|
|
interface nsIMsgThread;
|
|
interface nsIDBFolderInfo;
|
|
interface nsIMsgOfflineImapOperation;
|
|
interface nsIMsgFolder;
|
|
interface nsIOutputStream;
|
|
interface nsIUrlListener;
|
|
interface nsILocalFile;
|
|
|
|
[ptr] native octetPtr(PRUint8);
|
|
|
|
typedef unsigned long nsMsgRetainByPreference;
|
|
|
|
|
|
[scriptable, uuid(063bd2ac-de85-11d4-a5b6-0060b0fc04b7)]
|
|
|
|
interface nsIMsgRetentionSettings : nsISupports
|
|
{
|
|
const unsigned long nsMsgRetainAll = 1;
|
|
const unsigned long nsMsgRetainByAge = 2;
|
|
const unsigned long nsMsgRetainByNumHeaders = 3;
|
|
|
|
attribute boolean useServerDefaults;
|
|
attribute nsMsgRetainByPreference retainByPreference;
|
|
attribute unsigned long daysToKeepHdrs;
|
|
attribute unsigned long numHeadersToKeep;
|
|
|
|
// this is orthogonal to retaining by age or num headers, i.e., if
|
|
// it's set, we'll only keep NNN unread messages only, or unread
|
|
// messages less than NNN days old.
|
|
attribute boolean keepUnreadMessagesOnly;
|
|
// this is for keeping offline bodies.
|
|
attribute boolean cleanupBodiesByDays;
|
|
attribute unsigned long daysToKeepBodies;
|
|
};
|
|
|
|
[scriptable, uuid(86a9da90-14f1-11d5-a5c0-0060b0fc04b7)]
|
|
interface nsIMsgDownloadSettings : nsISupports
|
|
{
|
|
attribute boolean useServerDefaults;
|
|
attribute boolean downloadByDate;
|
|
attribute boolean downloadUnreadOnly;
|
|
attribute unsigned long ageLimitOfMsgsToDownload;
|
|
};
|
|
|
|
typedef long nsMsgDBCommit;
|
|
|
|
[scriptable, uuid(aa4d45d0-3956-11d3-8d76-00805f8a6617)]
|
|
|
|
interface nsMsgDBCommitType
|
|
{
|
|
const long kSmallCommit = 0;
|
|
const long kLargeCommit = 1;
|
|
const long kSessionCommit = 2;
|
|
const long kCompressCommit = 3;
|
|
};
|
|
|
|
[ref] native nsMsgKeyArrayRef(nsMsgKeyArray);
|
|
[ptr] native nsMsgKeyArrayPtr(nsMsgKeyArray);
|
|
|
|
[scriptable, uuid(03223c50-1e88-45e8-ba1a-7ce792dc3fc3)]
|
|
interface nsIMsgDBService : nsISupports
|
|
{
|
|
// want to remove this method from nsIMsgDatabase...
|
|
// if a db is opened on the folder, the listener will automatically be added
|
|
nsIMsgDatabase openFolderDB(in nsIMsgFolder aFolder, in boolean aCreate, in boolean aLeaveInvalidDB);
|
|
nsIMsgDatabase openMailDBFromFile(in nsILocalFile aFolderName, in boolean aCreate, in boolean aLeaveInvalidDB);
|
|
void registerPendingListener(in nsIMsgFolder aFolder, in nsIDBChangeListener aListener);
|
|
void unregisterPendingListener(in nsIDBChangeListener aListener);
|
|
};
|
|
|
|
[scriptable, uuid(6c8db586-57ff-4a1b-bb7e-acff79d6a4ce)]
|
|
|
|
interface nsIMsgDatabase : nsIDBChangeAnnouncer {
|
|
void Open(in nsILocalFile aFolderName, in boolean aCreate, in boolean aLeaveInvalidDB);
|
|
void forceFolderDBClosed(in nsIMsgFolder aFolder);
|
|
void Close(in boolean aForceCommit);
|
|
|
|
void Commit(in nsMsgDBCommit commitType);
|
|
// 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.
|
|
void ForceClosed();
|
|
void clearCachedHdrs();
|
|
void resetHdrCacheSize(in unsigned long size);
|
|
|
|
readonly attribute nsIDBFolderInfo dBFolderInfo;
|
|
|
|
// get a message header for the given key. Caller must release()!
|
|
|
|
nsIMsgDBHdr GetMsgHdrForKey(in nsMsgKey key);
|
|
nsIMsgDBHdr getMsgHdrForMessageID(in string messageID);
|
|
//Returns whether or not this database contains the given key
|
|
boolean ContainsKey(in nsMsgKey key);
|
|
|
|
// 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.
|
|
nsIMsgDBHdr CreateNewHdr(in nsMsgKey key);
|
|
|
|
void AddNewHdrToDB(in nsIMsgDBHdr newHdr, in boolean notify);
|
|
|
|
nsIMsgDBHdr CopyHdrFromExistingHdr(in nsMsgKey key, in nsIMsgDBHdr existingHdr, in boolean addHdrToDB);
|
|
|
|
[noscript] void ListAllKeys(in nsMsgKeyArrayRef outputKeys);
|
|
|
|
nsISimpleEnumerator EnumerateMessages();
|
|
nsISimpleEnumerator EnumerateThreads();
|
|
|
|
// count the total and unread msgs, and adjust global count if needed
|
|
void syncCounts();
|
|
|
|
nsIMsgThread GetThreadContainingMsgHdr(in nsIMsgDBHdr msgHdr) ;
|
|
|
|
// helpers for user command functions like delete, mark read, etc.
|
|
|
|
void MarkHdrRead(in nsIMsgDBHdr msgHdr, in boolean bRead,
|
|
in nsIDBChangeListener instigator);
|
|
|
|
void MarkHdrReplied(in nsIMsgDBHdr msgHdr, in boolean bReplied,
|
|
in nsIDBChangeListener instigator);
|
|
|
|
void MarkHdrMarked(in nsIMsgDBHdr msgHdr, in boolean mark,
|
|
in nsIDBChangeListener instigator);
|
|
|
|
// MDN support
|
|
void MarkMDNNeeded(in nsMsgKey key, in boolean bNeeded,
|
|
in nsIDBChangeListener instigator);
|
|
|
|
// MarkMDNneeded only used when mail server is a POP3 server
|
|
// or when the IMAP server does not support user defined
|
|
// PERMANENTFLAGS
|
|
boolean IsMDNNeeded(in nsMsgKey key);
|
|
|
|
void MarkMDNSent(in nsMsgKey key, in boolean bNeeded,
|
|
in nsIDBChangeListener instigator);
|
|
boolean IsMDNSent(in nsMsgKey key);
|
|
|
|
// methods to get and set docsets for ids.
|
|
void MarkRead(in nsMsgKey key, in boolean bRead,
|
|
in nsIDBChangeListener instigator);
|
|
|
|
void MarkReplied(in nsMsgKey key, in boolean bReplied,
|
|
in nsIDBChangeListener instigator);
|
|
|
|
void MarkForwarded(in nsMsgKey key, in boolean bForwarded,
|
|
in nsIDBChangeListener instigator);
|
|
|
|
void MarkHasAttachments(in nsMsgKey key, in boolean bHasAttachments,
|
|
in nsIDBChangeListener instigator);
|
|
|
|
[noscript] void MarkThreadRead(in nsIMsgThread thread,
|
|
in nsIDBChangeListener instigator, in nsMsgKeyArrayPtr thoseMarked);
|
|
|
|
void MarkThreadIgnored(in nsIMsgThread thread, in nsMsgKey threadKey, in boolean bIgnored,
|
|
in nsIDBChangeListener instigator);
|
|
void MarkThreadWatched(in nsIMsgThread thread, in nsMsgKey threadKey, in boolean bWatched,
|
|
in nsIDBChangeListener instigator);
|
|
|
|
boolean IsRead(in nsMsgKey key);
|
|
boolean IsIgnored(in nsMsgKey key);
|
|
boolean IsMarked(in nsMsgKey key);
|
|
boolean HasAttachments(in nsMsgKey key);
|
|
|
|
[noscript] void MarkAllRead(in nsMsgKeyArrayPtr thoseMarked);
|
|
|
|
[noscript] void MarkReadByDate (in PRTime startDate, in PRTime endDate, in nsMsgKeyArrayPtr markedIds);
|
|
|
|
[noscript] void DeleteMessages(in nsMsgKeyArrayPtr nsMsgKeys, in nsIDBChangeListener instigator);
|
|
void DeleteMessage(in nsMsgKey key,
|
|
in nsIDBChangeListener instigator,
|
|
in boolean commit);
|
|
void DeleteHeader(in nsIMsgDBHdr msgHdr, in nsIDBChangeListener instigator,
|
|
in boolean commit, in boolean notify);
|
|
|
|
// lower level routine that doesn't remove hdr from thread or adjust counts
|
|
void RemoveHeaderMdbRow(in nsIMsgDBHdr msgHdr);
|
|
|
|
void UndoDelete(in nsIMsgDBHdr msgHdr);
|
|
|
|
void MarkMarked(in nsMsgKey key, in boolean mark,
|
|
in nsIDBChangeListener instigator);
|
|
void MarkOffline(in nsMsgKey key, in boolean offline,
|
|
in nsIDBChangeListener instigator);
|
|
void SetLabel(in nsMsgKey key, in nsMsgLabelValue label);
|
|
void setStringProperty(in nsMsgKey aKey, in string aProperty, in string aValue);
|
|
|
|
void MarkImapDeleted(in nsMsgKey key, in boolean deleted,
|
|
in nsIDBChangeListener instigator);
|
|
|
|
readonly attribute nsMsgKey FirstNew;
|
|
|
|
attribute nsIMsgRetentionSettings msgRetentionSettings;
|
|
// purge unwanted message headers and/or bodies. If deleteViaFolder is
|
|
// true, we'll call nsIMsgFolder::DeleteMessages to delete the messages.
|
|
// Otherwise, we'll just delete them from the db.
|
|
void applyRetentionSettings(in nsIMsgRetentionSettings aMsgRetentionSettings,
|
|
in boolean aDeleteViaFolder);
|
|
|
|
attribute nsIMsgDownloadSettings msgDownloadSettings;
|
|
|
|
boolean HasNew();
|
|
void ClearNewList(in boolean notify);
|
|
void AddToNewList(in nsMsgKey key);
|
|
|
|
// 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
|
|
// Also, if a local folder is being reparsed, summary will be invalid
|
|
// until the reparsing is done.
|
|
attribute boolean summaryValid;
|
|
|
|
// batching - can be used to cache file stream for local mail,
|
|
// and perhaps to use the mdb batching mechanism as well.
|
|
void StartBatch();
|
|
void EndBatch();
|
|
// offline operations - we could move these into an offline operation interface
|
|
// but it would have to be in nsMailDatabase, since local folders can be move destinations
|
|
nsIMsgOfflineImapOperation GetOfflineOpForKey(in nsMsgKey messageKey, in boolean create);
|
|
void RemoveOfflineOp(in nsIMsgOfflineImapOperation op);
|
|
nsISimpleEnumerator EnumerateOfflineOps();
|
|
[noscript] void ListAllOfflineOpIds(in nsMsgKeyArrayPtr offlineOpIds);
|
|
[noscript] void ListAllOfflineDeletes(in nsMsgKeyArrayPtr offlineDeletes);
|
|
[noscript] void ListAllOfflineMsgs(in nsMsgKeyArrayPtr offlineMsgs);
|
|
|
|
void setAttributesOnPendingHdr(in nsIMsgDBHdr pendingHdr, in string property,
|
|
in string propertyVal, in long flags);
|
|
|
|
readonly attribute nsMsgKey lowWaterArticleNum;
|
|
readonly attribute nsMsgKey highWaterArticleNum;
|
|
attribute nsMsgKey nextPseudoMsgKey; //for undo-redo of move pop->imap
|
|
readonly attribute nsMsgKey nextFakeOfflineMsgKey; // for saving "fake" offline msg hdrs
|
|
// for sorting
|
|
[noscript] void createCollationKey(in AString sourceString, out octetPtr key, out unsigned long len);
|
|
[noscript] long compareCollationKeys(in octetPtr key1, in unsigned long len1, in octetPtr key2, in unsigned long len2);
|
|
|
|
// when creating a view, the default sort order and view flags
|
|
// use these for the default. (this allows news to override, so that
|
|
// news can be threaded by default)
|
|
readonly attribute nsMsgViewFlagsTypeValue defaultViewFlags;
|
|
readonly attribute nsMsgViewSortTypeValue defaultSortType;
|
|
readonly attribute nsMsgViewSortOrderValue defaultSortOrder;
|
|
|
|
// for msg hdr hash table allocation. controllable by caller to improve folder loading preformance.
|
|
attribute unsigned long msgHdrCacheSize;
|
|
|
|
// this is used to cache the folder stream the db reads and write. It's also an
|
|
// nsIInputStream, and nsISeekable.
|
|
attribute nsIOutputStream folderStream;
|
|
|
|
/**
|
|
* The list of messages currently in the NEW state.
|
|
*
|
|
* If there are no such messages, a null pointer may be returned.
|
|
* the caller should free when done using nsMemory::Free.
|
|
*/
|
|
void getNewList(out unsigned long count, [array, size_is(count)] out nsMsgKey newKeys);
|
|
|
|
// These are used for caching search hits in a db, to speed up saved search folders.
|
|
nsISimpleEnumerator getCachedHits(in string aSearchFolderUri);
|
|
void refreshCache(in string aSearchFolderUri, in unsigned long aNumKeys, [array, size_is (aNumKeys)] in nsMsgKey aNewHits,
|
|
out unsigned long aNumBadHits, [array, size_is(aNumBadHits)] out nsMsgKey aStaleHits);
|
|
void updateHdrInCache(in string aSearchFolderUri, in nsIMsgDBHdr aHdr, in boolean aAdd);
|
|
boolean hdrIsInCache(in string aSearchFolderUri, in nsIMsgDBHdr aHdr);
|
|
|
|
};
|
|
|