Hello and happy holidays,
I've been thinking about high performance bidirectional synchronizing the mail on my laptop (which is frequently disconnected) and my workstation at work (which is always on and receives all inbound mail). Both run dovecot on top of maildir.
I've been playing with offlineimap, unison (which I already use for all my non-mail files), as well as the gnus agent (in IMAP "disconnected mode"). None of these solutions is really satisfactory:
offlineimap treats a message refile between folders as a delete-plus-resend;
unison doesn't understand the semantics of flag changes at the end of files in maildirs; it also has to stat all the files (which can become slow) to detect changes;
gnus agent can't refile messages between folders when in disconnected mode.
Perhaps there are better disconnected IMAP modes available for other MUAs, but, it seems like a more general solution would be appropriate.
In particular, the "uniq" field of a maildir filename is an easy way of tracking the identity of a message as it gets refiled. My question: would it be difficult to patch dovecot so that it maintained the *same* uniq when copying messages between folders?
What about adding hooks that get triggered whenever dovecot copies or deletes messages? These hooks could log the changes. Later, when one tries to sync, one merges the changes from both replicas and then applies them.
I'm aware that dovecot has an option to do copies as hardlinks, which is a good start, but still requires one to stat the files to discover which have the same inode. This is *much* slower than simply listing the directories and comparing maildir "uniq" fields.
I'm aware that this invariant wouldn't be maintained if other programs modified the maildirs under dovecot's nose, but I'm willing to exclude this possibility.
Suggestions?
Best regards, -James Leifer