diff options
Diffstat (limited to 'comm/mailnews/imap/public/nsIAutoSyncState.idl')
-rw-r--r-- | comm/mailnews/imap/public/nsIAutoSyncState.idl | 157 |
1 files changed, 157 insertions, 0 deletions
diff --git a/comm/mailnews/imap/public/nsIAutoSyncState.idl b/comm/mailnews/imap/public/nsIAutoSyncState.idl new file mode 100644 index 0000000000..7d2c155435 --- /dev/null +++ b/comm/mailnews/imap/public/nsIAutoSyncState.idl @@ -0,0 +1,157 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ + +#include "nsISupports.idl" + +interface nsIMsgFolder; +interface nsIMsgDBHdr; + +[scriptable, uuid(7512f927-b8f0-48c4-b101-03e859e61281)] +interface nsIAutoSyncState : nsISupports { + + /** + * Auto-Sync states. + * + * ***WARNING***: If you change these, be sure to update stateStrings in + * nsAutoSyncState.cpp. If you do not, out-of-bounds memory accesses may + * happen. + */ + + /** + * Initial state. Returned to after new message bodies downloaded or if + * it is determined that no body fetches are actually needed. The next state + * is typically stStatusIssued but a transition directly to stUpdateNeeded + * may also occur. + */ + const long stCompletedIdle = 0; + + /** + * STATUS issued (URL "folderstatus"). Will check to see if new messages + * are present. If new messages are detected, the next state is + * stUpdateIssued; otherwise, a return to stCompleteIdle occurs. The previous + * state is always stCompleteIdle. + */ + const long stStatusIssued = 1; + + /** + * Occurs when imap APPEND and sometimes COPY or MOVE imap commands add + * messages that may not be detected in autosync stStatusIssued state. These + * are the "pending" messages referred to in the autosync code. + * stUpdateIssued state (URL "select") will occur next. + * The previous state is always stCompleteIdle, skipping stStatusIssued. + */ + const long stUpdateNeeded = 2; + + /** + * Update issued (URL "select"). Will figure out if there are any bodies to + * download after new headers are fetched and, if so, move to state + * stReadyToDownload. Otherwise, returns to stCompleteIdle. + */ + const long stUpdateIssued = 3; + + /** + * Preparing to download the next group of message bodies then move to + * stDownloadInProgress + */ + const long stReadyToDownload = 4; + + /** + * Fetch bodies issued (URL "fetch"). Group of message bodies download in + * progress. If more are needed, next state is stReadyToDownload; otherwise, + * when all are received, the next state is stCompleteIdle. + */ + const long stDownloadInProgress = 5; + + /** + * Puts the download queue offset to its previous position. + */ + void rollback(); + + /** + * Clears the download queue. Resets the offsets. + */ + void resetDownloadQ(); + + /** + * Rollbacks the offset to the previous position and + * changes the state to ready-to-download. + */ + void tryCurrentGroupAgain(in unsigned long aRetryCount); + + /** + * Resets the retry counter. + */ + void resetRetryCounter(); + + /** + * Tests whether the given folder has the same imap server. + */ + boolean isSibling(in nsIAutoSyncState aAnotherStateObj); + + /** + * Update the folder to find new message headers to download + */ + void updateFolder(); + + /** + * Downloads the bodies of the given messages from the server. + */ + void downloadMessagesForOffline(in Array<nsIMsgDBHdr> aMessageList); + + /** + * Returns an array containing the nsIMsgDBHdrs of the messages that will + * be downloaded next. + * + * @param aSuggestedGroupSizeLimit suggested size per group in bytes + * @param aActualGroupSize total size of the messages in bytes in the group + */ + Array<nsIMsgDBHdr> getNextGroupOfMessages(in unsigned long aSuggestedGroupSizeLimit, + out unsigned long aActualGroupSize); + + /** + * Iterates through the existing headers of the folder to find + * the messages not downloaded yet. + * + * @param aNumberOfHeadersToProcess number of headers to be processed + * at this pass + * + * @return the number of headers left to process + */ + unsigned long processExistingHeaders(in unsigned long aNumberOfHeadersToProcess); + + /** + * Tests whether the download queue is empty. + */ + boolean isDownloadQEmpty(); + + /** + * Last time the existing headers are completely processed. + */ + [noscript]readonly attribute PRTime lastSyncTime; + + /** + * Last time the owner folder is updated. + */ + [noscript]attribute PRTime lastUpdateTime; + + /** + * Download operation state. + */ + attribute long state; + + /** + * Number of messages waiting to be downloaded. + */ + readonly attribute long pendingMessageCount; + + /** + * Total number of messages in the download queue. + */ + readonly attribute long totalMessageCount; + + /** + * The folder this auto-sync object is related to. + */ + readonly attribute nsIMsgFolder ownerFolder; +}; |