"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 <[email protected]> --- 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 _______________________________________________ OfflineIMAP-project mailing list: [email protected] http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/offlineimap-project OfflineIMAP homepages: - https://github.com/OfflineIMAP - http://offlineimap.org
