From d5cbdc4c0e51842af4979c63297e22f7971ae62b Mon Sep 17 00:00:00 2001 From: Vladimir Marek Date: Tue, 26 Jul 2011 10:59:54 +0200 Subject: [PATCH] Handle when UID can't be found on saved messages 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. Signed-off-by: Vladimir Marek Signed-off-by: Nicolas Sebrecht --- 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 ... + self.deletemessage(uid) else: 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