[PATCH 2/4] Re: Handle when UID can't be found on saved messages
nicolas.s-dev at laposte.net
Tue Jul 26 17:31:09 BST 2011
On Tue, Jul 26, 2011 at 10:59:54AM +0200, Vladimir.Marek at oracle.com wrote:
> From: Vladimir Marek <vlmarek at volny.cz>
> Message was stored to dstfolder, but we can't find it's UID. This means we can't
> link current message to the one created in IMAP. So we just delete local message
> and on next run we'll sync it back. Also fixed imap.savemessage description.
> This was broken by e20d8b967942934ddbf4659b5ec328a9a18da6bc.
Thanks. Whole topic looks interesting enough to have another -rc4 cycle
before the stable, IMHO.
> Signed-off-by: Vladimir Marek <vlmarek at volny.cz>
> offlineimap/folder/Base.py | 8 ++++++++
> offlineimap/folder/IMAP.py | 6 ++++--
> 2 files changed, 12 insertions(+), 2 deletions(-)
> diff --git a/offlineimap/folder/Base.py b/offlineimap/folder/Base.py
> index 608d361..0d5ddae 100644
> --- a/offlineimap/folder/Base.py
> +++ b/offlineimap/folder/Base.py
> @@ -264,6 +264,14 @@ class BaseFolder(object):
> uid = newuid
> # Save uploaded status in the statusfolder
> statusfolder.savemessage(uid, message, flags, rtime)
> + elif newuid == 0:
> + # Message was stored to dstfolder, but we can't find it's UID
> + # This means we can't link current message to the one created
> + # in IMAP. So we just delete local message and on next run
> + # we'll sync it back
> + # XXX This could cause infinite loop on syncing between two
> + # IMAP servers ...
I'm afraid about this infinite loop. Can you tell more?
I understand it could be done only if two instances of offlineimap are
running on both side. Am I correct or did I miss something?
> + self.deletemessage(uid)
> raise UserWarning("Trying to save msg (uid %d) on folder "
> "%s returned invalid uid %d" % \
> diff --git a/offlineimap/folder/IMAP.py b/offlineimap/folder/IMAP.py
> index 19a0340..1fa35f7 100644
> --- a/offlineimap/folder/IMAP.py
> +++ b/offlineimap/folder/IMAP.py
> @@ -409,8 +409,10 @@ class IMAPFolder(BaseFolder):
> the new message after sucessfully saving it.
> :param rtime: A timestamp to be used as the mail date
> - :returns: the UID of the new message as assigned by the
> - server. If the folder is read-only it will return 0."""
> + :returns: the UID of the new message as assigned by the server. If the
> + message is saved, but it's UID can not be found, it will
> + return 0. If the message can't be written (folder is
> + read-only for example) it will return -1."""
> self.ui.debug('imap', 'savemessage: called')
> # already have it, just save modified flags
More information about the OfflineIMAP-project