TODO 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. f{,data}sync() usage could be optimized by batching the calls.
  2. add some marker about message being already [remotely] trashed.
  3. real transactions would be certainly not particularly useful ...
  4. make SSL (connect) timeouts produce a bit more than "Unidentified socket error".
  5. uidvalidity lock timeout handling would be a good idea.
  6. add message expiration based on arrival date (message date would be too
  7. unreliable). MaxAge; probably mutually exclusive to MaxMessages.
  8. add alternative treatments of expired messages. ExpiredMessageMode: Prune
  9. (delete messages like now), Keep (just don't sync) and Archive (move to
  10. separate folder - ArchiveSuffix, default .archive).
  11. kill the concept of an INBOX, it is a relic from single-channel operation.
  12. if somebody needs it, he can have two stores with different Paths. the path
  13. can name a single (in-)box (curr. broken with maildir). an empty box name
  14. actually means empty, so the IMAP mailbox should use INBOX for Path (can't
  15. make that the default, as it would mess up the NAMESPACE).
  16. add regexp-based mailbox path rewriting to the drivers. user would provide
  17. expressions for both directions. every transformation would be immediately
  18. verified with the inverse transform. PathDelimiter and Flatten would become
  19. special cases of this.
  20. add daemon mode. primary goal: keep imap password in memory.
  21. also: idling mode.
  22. parallel fetching of multiple mailboxes.
  23. imap_set_flags(): group commands for efficiency, don't call back until
  24. imap_commit().
  25. add streaming from fetching to storing.
  26. handle custom flags (keywords).
  27. make use of IMAP CONDSTORE extension (rfc4551; CHANGEDSINCE FETCH Modifier);
  28. make use of IMAP QRESYNC extension (rfc5162) to avoid SEARCH to find vanished
  29. messages.
  30. use MULTIAPPEND and FETCH with multiple messages.
  31. create dummies describing MIME structure of messages bigger than MaxSize.
  32. flagging the dummy would fetch the real message. possibly remove --renew.
  33. note that all interaction needs to happen on the slave side probably.
  34. don't SELECT boxes unless really needed; in particular not for appending,
  35. and in write-only mode not before changes are made.
  36. problem: UIDVALIDITY change detection is delayed, significantly complicating
  37. matters.
  38. possibly use ^[[1m to highlight error messages.
  39. consider alternative approach to trashing: instead of the current trash-before-
  40. expunge done by mbsync, let MUAs do the trashing (as modern ones typically do).
  41. mbsync wouldn't do any trashing by itself, but should track the moves for
  42. optimization. additionally, there should be a mode to move trashed messages to
  43. the remote store. TrashMode Internal|External, AbsorbRemoteTrash.
  44. a yet different approach to trashing is treating the trash like a normal mailbox.
  45. however, this implies a huge working set.
  46. consider optional use of messages-id (and X-GM-MSGID):
  47. - detection of message moves between folders
  48. - recovery from unmotivated UIDVALIDITY change, or total loss of sync state