TODO 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. f{,data}sync() usage could be optimized by batching the calls.
  2. automatically resume upon transient errors, e.g. "connection reset by peer"
  3. or timeout after some data was already transmitted.
  4. possibly also try to handle Exchange's "glitches" somehow.
  5. uidvalidity lock timeout handling would be a good idea.
  6. should complain when multiple Channels match the same folders.
  7. should complain about nonsensical combinations like Sync Pull + Create Both.
  8. propagate folder deletions even when the folders are non-empty.
  9. - verify that "most" of the folders in the Channel are still there.
  10. - refuse to delete unpropagated messages when trashing on the remote side.
  11. - refuse to delete far side if it has unpropagated messages. symmetry?
  12. add option to suppress complaints about folders that would need creation
  13. (but not deleted ones).
  14. add message expiration based on arrival date (message date would be too
  15. unreliable). MaxAge; probably mutually exclusive to MaxMessages.
  16. add alternative treatments of expired messages. ExpiredMessageMode: Prune
  17. (delete messages like now), Keep (just don't sync) and Archive (move to
  18. separate folder - ArchiveSuffix, default .archive).
  19. add support for event notification callbacks.
  20. make it possible to have different mailbox names for far and near side in
  21. Patterns.
  22. - use far:near for the pattern
  23. - supporting names with colons requires and extension of the parser to
  24. report which parts of an argument were quoted
  25. - this makes Groups mostly useless, as they are mostly a workaround for this
  26. function being missing so far
  27. - this is needed for move detection, which would work only within one Channel
  28. - this supersedes MapInbox
  29. add regexp-based mailbox path rewriting to the drivers. user would provide
  30. expressions for both directions. every transformation would be immediately
  31. verified with the inverse transform. PathDelimiter and Flatten would become
  32. special cases of this.
  33. add daemon mode. primary goal: keep imap password in memory.
  34. also: idling mode.
  35. parallel fetching of multiple mailboxes.
  36. TLS session resumption becomes interesting then as well.
  37. imap_set_msg_flags() & imap_trash_msg(): group commands for efficiency.
  38. add streaming from fetching to storing.
  39. this is complicated by the IMAP target needing the final size in advance,
  40. which we can't know in a single pass when newline translation is necessary.
  41. handle custom flags (keywords).
  42. this is impeded by there being no Maildir-side standard.
  43. make use of IMAP CONDSTORE extension (rfc4551; CHANGEDSINCE FETCH Modifier);
  44. make use of IMAP QRESYNC extension (rfc5162) to avoid SEARCH to find vanished
  45. messages.
  46. make use of IMAP CAPABILITY APPENDLIMIT= extension (rfc7889; fastmail & gmail).
  47. this is really useful only for IMAP <=> IMAP syncs: saves FETCH BODY.
  48. the message could still become oversized due to conversion.
  49. dummy messages resulting from MaxSize should contain a dump of the original
  50. message's MIME structure and its (reasonably sized) text parts.
  51. don't SELECT boxes unless really needed; in particular not for appending,
  52. and in write-only mode not before changes are made.
  53. problem: UIDVALIDITY change detection is delayed, significantly complicating
  54. matters.
  55. some error messages are unhelpful in non-verbose mode due to missing context.
  56. possibly use ^[[1m to highlight error messages.
  57. consider alternative approach to trashing: instead of the current trash-before-
  58. expunge done by mbsync, let MUAs do the trashing (as modern ones typically do).
  59. mbsync wouldn't do any trashing by itself, but should track the moves for
  60. optimization. additionally, there should be a mode to move trashed messages to
  61. the remote store. TrashMode Internal|External, AbsorbRemoteTrash.
  62. a yet different approach to trashing is treating the trash like a normal mailbox.
  63. however, this implies a huge working set.
  64. consider optional use of messages-id (and X-GM-MSGID):
  65. - detection of message moves between folders
  66. - recovery from loss of sync state, migration from other tools