summaryrefslogtreecommitdiffstats
path: root/mailnews/imap/public/nsIAutoSyncState.idl
blob: d03697e11c49d635e3554c1dc94d4940ac9705c4 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/* 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 nsIArray;
interface nsIMutableArray;

[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.
   */

  /** sync'd and no pending messages */
  const long stCompletedIdle = 0;     

  /** STATUS issued. Will check to see if  any counts changed since last STATUS */
  const long stStatusIssued = 1;

  /**
   * Status found new messages. Update should be issued next. Status most
   * likely was issued by non-autosync code (e.g., check other folders for
   * new messages).
   */
  const long stUpdateNeeded = 2;

  /** Update issued. Will figure out if there are any bodies to download */
  const long stUpdateIssued = 3;

  /** Message body download in progress */
  const long stDownloadInProgress = 4;

  /** ready to download the next group of messages */
  const long stReadyToDownload = 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 nsIArray aMessageList);

  /**
   * Populates the given array with the keys 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
   */
  nsIMutableArray 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);

  /**
   * 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;
};