MailNews:Better Faster IMAP Plan: Difference between revisions

Line 177: Line 177:


=== Task List for Feature 2 ===
=== Task List for Feature 2 ===
==== Existing Implementation ====
Decision table for IMAP message operations. Current State (6th June 2008):
Decision table for IMAP message operations. Current State (6th June 2008):


Line 202: Line 205:
*<sup>1</sup> If and only if the destination folder is already selected (having connection to the server)
*<sup>1</sup> If and only if the destination folder is already selected (having connection to the server)
*<sup>2</sup> Do not remove if the operation is COPY
*<sup>2</sup> Do not remove if the operation is COPY


{|border=1
{|border=1
Line 220: Line 222:
|-
|-
|}
|}
 
 
{|border=1
{|border=1
| <b>Tagging an IMAP message</b> || <center>1</center> || <center>2</center> || <center>3</center> || <center>4</center>
| <b>Tagging an IMAP message</b> || <center>1</center> || <center>2</center> || <center>3</center> || <center>4</center>
Line 233: Line 234:
| Store the flag on || <center>server</center> || <center>local db</center> || <center>server</center> || <center>local db</center>
| Store the flag on || <center>server</center> || <center>local db</center> || <center>server</center> || <center>local db</center>
|}
|}
 
 
{|border=1
{|border=1
| <b>Selecting an IMAP folder</b> || <center>1</center> || <center>2</center> || <center>3</center> || <center>4</center>
| <b>Selecting an IMAP folder</b> || <center>1</center> || <center>2</center> || <center>3</center> || <center>4</center>
Line 255: Line 255:
|}
|}
<sup>1</sup> If and only if the selected folder is the source folder of the pending offline operation
<sup>1</sup> If and only if the selected folder is the source folder of the pending offline operation
==== Implementation Plan ====
* Background preemptive message downloading:
** AutoSyncOfflineStores parameter is used in nsImapMailFolder.cpp (nsImapMailFolder::HeaderFetchCompleted method) to provide automatic message download. We are going to leverage this functionality.
** Implement a queue to provide with a strategy based fetch mechanism that also supports partial fetching
* Sync'ing with the server should be handled on background:
** Pending offline operations should be played back regularly. This mechanism is already implemented as the part of the first feature.
** IDLE message should be handled silently
** Message key changes should be handled silently (without generating UI events but not changing the execution flow)
* Error mechanism should be changed. Currently all imap errors are handled in imapserver. This code should be re-factored in order to make it work with new UI elements.
* UI element implementation: Waiting for design to be finished.
==== Resourcing ====
* Dale is working on IMAP partial fetch
* Emre is working on queueu mechanism
* David is consulted on integration, design and implementation issues. He also works on RFC 4551.
* No assignment for UI-side implementation yet.
==== Estimation ====
Feature complete June 22th. Part of 3.0a2.
==== Risk ====
* Changes in event mechanism: Move, Delete, Copy event handling
* Problems in database message key synchronization
* Error handling problems
* UI might not be ready by the deadline
[TBD]


==== Decisions to make====
==== Decisions to make====
270

edits