From 8ffed984309816a33695bd38117ab0f5d34b526f Mon Sep 17 00:00:00 2001 From: Antoine Nguyen Date: Mon, 9 Jan 2012 14:42:30 +0100 Subject: [PATCH] Default folders can also have children. fix #177 --- extensions/webmail/lib.py | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/extensions/webmail/lib.py b/extensions/webmail/lib.py index dd3e759b3..c823c075b 100644 --- a/extensions/webmail/lib.py +++ b/extensions/webmail/lib.py @@ -213,10 +213,9 @@ class IMAPconnector(object): sdescr["class"] = "subfolders" return True - def _listfolders(self, topfolder='INBOX', md_folders=[]): + def _listfolders(self, topfolder='INBOX', folders=[]): list_response_pattern = re.compile(r'\((?P.*?)\) "(?P.*)" (?P.*)') (status, data) = self.m.list() - result = [] for mb in data: flags, delimiter, name = list_response_pattern.match(mb).groups() name = name.strip('"').decode("imap4-utf-7") @@ -229,16 +228,20 @@ class IMAPconnector(object): parts[1:]): descr["class"] = "subfolders" continue - present = False + + pos = -1 descr = {"name" : name} - for mdf in md_folders: + for idx, mdf in enumerate(folders): if mdf["name"] == name: - present = True + pos = idx break - if not present: - result += [descr] + if pos == -1: + folders += [descr] + else: + folders[idx] = descr + from operator import itemgetter - return sorted(result, key=itemgetter("name")) + return sorted(folders, key=itemgetter("name")) def getfolders(self, user, unseen_messages=True): md_folders = [{"name" : "INBOX", "class" : "inbox"}, @@ -248,7 +251,8 @@ class IMAPconnector(object): {"name" : parameters.get_user(user, "SENT_FOLDER")}, {"name" : parameters.get_user(user, "TRASH_FOLDER"), "class" : "trash"}] - md_folders += self._listfolders(md_folders=md_folders) + self._listfolders(folders=md_folders) + if unseen_messages: for fd in md_folders: key = fd.has_key("path") and "path" or "name"