270
edits
| Line 306: | Line 306: | ||
|} | |} | ||
==== Implementation Plan ==== | ==== Implementation Plan #1==== | ||
* Requirement #1.1 can be implemented by simply enabling AutoSyncOfflineStores option and putting the selected folder into offline mode. | |||
* Requirement #1.2 - skip | |||
* Requirement #2 - No strategy based download | |||
* Requirement #4 can be implemented by putting folders into offline mode, storing all operations locally, and playing them back using <i>Playback manager</i> (see below). | |||
* Requirement #5: putting folders in offline mode would store the messages locally, but the current workflow should be changed to fetch messages locally, instead of fetching them from the server every time. | |||
* Requirement #6 - skip | |||
* Requirement #7 - skip | |||
* Requirement #1.1 can be implemented by simply enabling AutoSyncOfflineStores option and putting the selected folder into offline mode. | ==== Implementation Plan #2==== | ||
* Requirement #1.1 can be implemented by simply enabling AutoSyncOfflineStores option and putting the selected folder into offline mode - adding this option into mailnews.js file. | |||
* Requirement #1.2 can be implemented with the help of the following new components (please note that these are conceptual rather than physical): | * Requirement #1.2 can be implemented with the help of the following new components (please note that these are conceptual rather than physical): | ||
** <b>Priority Queue</b>; Its main duty is to serialize access to imap protocol queue, and prioritize download and playback requests. | ** <b>Priority Queue</b>; Its main duty is to serialize access to imap protocol queue, and prioritize download and playback requests. | ||
** <b>Message download manager</b>; Main duties are to coordinate partial downloads, and to make strategy-based decisions to prioritize messages. In the context of this component we need to implement PARTIAL FETCH commands in imap protocol level. The existing code fetches the mime structure of the message, and looks at the types of all the parts. If a message has parts TB doesn't know how to render inline (e.g., a .zip file, or a .doc or a .pdf), it fetches the body, and the parts TB knows how to display inline separately, and doesn't fetch the parts that TB can't render inline. We can definitely leverage this feature. | ** <b>Message download manager</b>; Main duties are to coordinate partial downloads, and to make strategy-based decisions to prioritize messages. In the context of this component we need to implement PARTIAL FETCH commands in imap protocol level. The existing code fetches the mime structure of the message, and looks at the types of all the parts. If a message has parts TB doesn't know how to render inline (e.g., a .zip file, or a .doc or a .pdf), it fetches the body, and the parts TB knows how to display inline separately, and doesn't fetch the parts that TB can't render inline. We can definitely leverage this feature. | ||
** <b>Playback manager</b>; To playback pending offline operations on the server and handling errors gracefully. In other word activating offline operation state machine when required. This component is partially implemented as part of <i>Offline operation playback</i> feature. | ** <b>Playback manager</b>; To playback pending offline operations on the server and handling errors gracefully. In other word activating offline operation state machine when required. This component is partially implemented as part of <i>Offline operation playback</i> feature. | ||
* Requirement #2 same as #1.2 | * Requirement #2 same as #1.2 | ||
* Requirement #4 can be implemented by storing all operations locally, and playing them back using <i>Playback manager</i>. To store the operations locally TB can be put to the following states (''see Existing Behavior section''): | * Requirement #4 can be implemented by storing all operations locally, and playing them back using <i>Playback manager</i>. To store the operations locally TB can be put to the following states (''see Existing Behavior section''): | ||
edits