------- You are receiving this mail because: -------
You are the assignee for the bug, or are watching the assignee.
http://bugs.kde.org/show_bug.cgi?id=140443
------- Additional Comments From jani-matti.hatinen iki fi 2008-08-15 16:09
-------
The easiest way to fix this is to reimplement dimap with journaling. Along with
the local message cache there's also a local transaction cache. As with the
message cache, each item in the transaction cahce is stored in a separate file
(to minimise the possible effects of corruption).
Whenever the user does something to a message locally (mark read, mark unread,
mark important, move, copy, etc.), the action is stored in the transaction
cache as well as the message state in the local message cache.
When syncing to the server the items in the local transaction cache are
reviewed one by one. If syncing to server is successful, the item in the
transaction cache is marked as done. If syncing to server fails because the
server state differs from the local state (message has already been removed,
marked read, marked important, etc.), the item is marked as failed and ignored
in further syncs. If syncing fails for any other reason (timeout, server down,
etc.), the item is left in the transaction cache as open.
Only when/if the local transaction cache is empty, the state between local
message cache and server message store is compared and all differences are
synced _from_ the server _to_ the client.
For error situations the GUI can provide options for cleaning and/or reviewing
the local transaction cache (in case particular transactions cause consistent
errors).
I'm not sure how close the current implementation is from the one I described,
but from what I understand the above design shouldn't require too much
refactoring.
_______________________________________________
Kdepim-bugs mailing list
[email protected]
https://mail.kde.org/mailman/listinfo/kdepim-bugs