[PATCH] Handle maxage for davmail correctly

Łukasz Żarnowiecki dolohow at outlook.com
Sat May 7 11:32:10 BST 2016


"imapobj.search" returns a list with one string element of numbers
separated by one whitespace character for regular box (GMail, AOL...).
['1 2 3 4 5 6 7 8 9 10 11 12']
But if we would like to sync from Davmail it would return a list of
numbers.
['1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'].

The code "return res_data[0].split()" in the first case will return what
we already have when using Davmail, hence only one email will be
fetched.  But if only the first sync would be with maxage the emails
will be removed, because offlineimap will think that they were removed
by us.

The patch distinguishes between syncing with Davmail and regular box and
applies split on the first element only when it finds whitespace
character.  It also handles the case when the first element is empty on
first sync.


Closes #327

Signed-off-by: Łukasz Żarnowiecki <dolohow at outlook.com>
---

 offlineimap/folder/IMAP.py | 6 +++++-
 1 file changed, 5 insertions(+), 1 deletion(-)

diff --git a/offlineimap/folder/IMAP.py b/offlineimap/folder/IMAP.py
index 5a26051..e589519 100644
--- a/offlineimap/folder/IMAP.py
+++ b/offlineimap/folder/IMAP.py
@@ -178,7 +178,11 @@ class IMAPFolder(BaseFolder):
                     "Search string was '%s'. Server responded '[%s] %s'"% (
                     self.getrepository(), self, search_cond, res_type, res_data),
                     OfflineImapError.ERROR.FOLDER)
-            return res_data[0].split()
+            # Davmail returns list instead of list of one element string.
+            # On first run the first element is empty.
+            if ' ' in res_data[0] or res_data[0] == '':
+                res_data = res_data[0].split()
+            return res_data
 
         res_type, imapdata = imapobj.select(self.getfullname(), True, True)
         if imapdata == [None] or imapdata[0] == '0':
-- 
2.7.4





More information about the OfflineIMAP-project mailing list