IMAP: reduce quickchanged() checks

For each folder we were making a second IMAP request asking for the
latest UID and compared that with the highest UID in our
statusfolder. This catched the case that 1 mail has been deleted by
someone else and another one has arrived since we checked, so that the
total number of mails appears to not have changed.

We don't capture anymore this case in the quickchanged() case.

It improves my performance from 8 to about 7.5 seconds per check (with lots of
variation) and we would benefit even more in the IMAP<->IMAP case as we do one
additional IMAP lookup per folder on each side then.

Do cleanups on whitespaces while in this file.

Signed-off-by: Sebastian Spaeth <Sebastian@SSpaeth.de>
Signed-off-by: Nicolas Sebrecht <nicolas.s-dev@laposte.net>
This commit is contained in:
Sebastian Spaeth 2011-04-11 18:33:11 +02:00 committed by Nicolas Sebrecht
parent 12e11429b5
commit 36eb37b47d

View File

@ -97,26 +97,8 @@ class IMAPFolder(BaseFolder):
if maxmsgid != statusfolder.getmessagecount(): if maxmsgid != statusfolder.getmessagecount():
return True return True
if maxmsgid < 1:
# No messages; return
return False
# Now, get the UID for the last message.
response = imapobj.fetch('%d' % maxmsgid, '(UID)')[1]
finally: finally:
self.imapserver.releaseconnection(imapobj) self.imapserver.releaseconnection(imapobj)
# Discard the message number.
messagestr = response[0].split(' ', 1)[1]
options = imaputil.flags2hash(messagestr)
if not options.has_key('UID'):
return True
uid = long(options['UID'])
saveduids = statusfolder.getmessageuidlist()
saveduids.sort()
if uid != saveduids[-1]:
return True
return False return False
# TODO: Make this so that it can define a date that would be the oldest messages etc. # TODO: Make this so that it can define a date that would be the oldest messages etc.