[PATCH 2/2] folder: Implement helper functions uidexists() and getmessageuidlist()
Sebastian Spaeth
Sebastian at SSpaeth.de
Wed Mar 9 07:53:21 GMT 2011
More convenient way to test if a certain uid exists and getting a list
of all uids. Also, the SQL backend will have efficient overrides for
these methods.
Signed-off-by: Sebastian Spaeth <Sebastian at SSpaeth.de>
---
offlineimap/folder/Base.py | 23 ++++++++++++++++-------
1 files changed, 16 insertions(+), 7 deletions(-)
diff --git a/offlineimap/folder/Base.py b/offlineimap/folder/Base.py
index ffbbbbb..318e5e6 100644
--- a/offlineimap/folder/Base.py
+++ b/offlineimap/folder/Base.py
@@ -139,6 +139,15 @@ class BaseFolder:
You must call cachemessagelist() before calling this function!"""
raise NotImplementedException
+ def uidexists(self,uid):
+ """Returns True if uid exists"""
+ return uid in self.getmessagelist()
+
+ def getmessageuidlist(self):
+ """Gets a list of UIDs.
+ You may have to call cachemessagelist() before calling this function!"""
+ return self.getmessagelist().keys()
+
def getmessagecount(self):
"""Gets the number of messages."""
return len(self.getmessagelist())
@@ -267,7 +276,7 @@ class BaseFolder:
:param dstfolder: A BaseFolder-derived instance
:param statusfolder: A LocalStatusFolder instance"""
- uidlist = [uid for uid in self.getmessagelist().keys() if uid < 0]
+ uidlist = [uid for uid in self.getmessageuidlist() if uid < 0]
threads = []
for uid in uidlist:
@@ -351,8 +360,8 @@ class BaseFolder:
threads = []
copylist = filter(lambda uid: uid>=0 and not \
- uid in statusfolder.getmessagelist(),
- self.getmessagelist().keys())
+ statusfolder.uidexists(uid),
+ self.getmessageuidlist())
for uid in copylist:
if self.suggeststhreads():
self.waitforthread()
@@ -378,8 +387,8 @@ class BaseFolder:
that were deleted in 'self'. Delete those from dstfolder and
statusfolder."""
deletelist = filter(lambda uid: uid>=0 \
- and not uid in self.getmessagelist(),
- statusfolder.getmessagelist().keys())
+ and not self.uidexists(uid),
+ statusfolder.getmessageuidlist())
if len(deletelist):
self.ui.deletingmessages(deletelist, [dstfolder])
# delete in statusfolder first to play safe. In case of abort, we
@@ -400,10 +409,10 @@ class BaseFolder:
# bulk, rather than one call per message.
addflaglist = {}
delflaglist = {}
- for uid in self.getmessagelist().keys():
+ for uid in self.getmessageuidlist():
# Ignore messages with negative UIDs missed by pass 1
# also don't do anything if the message has been deleted remotely
- if uid < 0 or not uid in dstfolder.getmessagelist():
+ if uid < 0 or not dstfolder.uidexists(uid):
continue
selfflags = self.getmessageflags(uid)
--
1.7.1
More information about the OfflineIMAP-project
mailing list