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 e20d8b9679.

Signed-off-by: Vladimir Marek <vlmarek@volny.cz>
Signed-off-by: Nicolas Sebrecht <nicolas.s-dev@laposte.net>
This commit is contained in:
Vladimir Marek 2011-07-26 10:59:54 +02:00 committed by Nicolas Sebrecht
parent 86e9c7442b
commit d5cbdc4c0e
2 changed files with 12 additions and 2 deletions

View File

@ -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" % \

View File

@ -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