From 1fc8f45a09a6895c49bee52d2dd6878b59733e64 Mon Sep 17 00:00:00 2001 From: tonio Date: Sun, 25 Apr 2010 22:15:59 +0200 Subject: [PATCH] Nothing... --- extensions/webmail/imap_listing.py | 37 ++++++++++++++++++------ extensions/webmail/main.py | 5 ++-- extensions/webmail/templates/index.html | 3 +- static/pics/folder-open.png | Bin 0 -> 625 bytes static/pics/subfolders.png | Bin 0 -> 635 bytes templates/common/email_listing.html | 1 + 6 files changed, 34 insertions(+), 12 deletions(-) create mode 100644 static/pics/folder-open.png create mode 100644 static/pics/subfolders.png diff --git a/extensions/webmail/imap_listing.py b/extensions/webmail/imap_listing.py index 43e63cdfd..a6cfa86a2 100644 --- a/extensions/webmail/imap_listing.py +++ b/extensions/webmail/imap_listing.py @@ -1,9 +1,10 @@ + # -*- coding: utf-8 -*- import re import time import imaplib -import ssl +#import ssl from datetime import datetime, timedelta from email.header import decode_header import email.utils @@ -141,11 +142,13 @@ class IMAPconnector(object): self.m = imaplib.IMAP4_SSL(self.address, self.port) else: self.m = imaplib.IMAP4(self.address, self.port) - except (imaplib.IMAP4.error, ssl.SSLError), error: +# except (imaplib.IMAP4.error, ssl.SSLError), error: + except Exception, error: return False, _("Connection to IMAP server failed, check your configuration") try: self.m.login(user, passwd) - except (imaplib.IMAP4.error, ssl.SSLError), error: +# except (imaplib.IMAP4.error, ssl.SSLError), error: + except Exception, error: return False, _("Authentication failed, check your configuration") return True, None @@ -180,20 +183,33 @@ class IMAPconnector(object): self.messages = data[0].split() return len(self.messages) + def _parse_folder_name(self, dict, parts): + if not len(parts): + return + dict[parts[0]] = {} + self._parse_folder_name(dict[parts[0]], parts[1:]) + def listfolders(self, topfolder='INBOX', md_folders=[]): + list_response_pattern = re.compile(r'\((?P.*?)\) "(?P.*)" (?P.*)') (status, data) = self.m.list() - result = [] + result = {} for mb in data: - attrs, truc, name = mb.split() + flags, delimiter, name = list_response_pattern.match(mb).groups() name = name.strip('"').decode("imap4-utf-7") + if re.search("\%s" % delimiter, name): + parts = name.split(".") + dict = {} + self._parse_folder_name(dict, parts[1:]) + result[parts[0]] = dict + continue present = False for mdf in md_folders: if mdf["name"] == name: present = True break if not present: - result += [name] - return sorted(result) + result[name] = None + return result def msgseen(self, imapid): folder, id = imapid.split("/") @@ -271,8 +287,11 @@ class ImapListing(EmailListing): {"name" : 'Sent'}, {"name" : 'Trash', "icon" : "trash.png"}] folders = self.mbc.listfolders(md_folders=md_folders) - for fd in folders: - md_folders += [{"name" : fd}] + for fd in sorted(folders.keys()): + descr = {"name" : fd} + if folders[fd] != None: + descr["icon"] = "subfolders.png" + md_folders += [descr] return md_folders def parse_search_parameters(self, criterion, pattern): diff --git a/extensions/webmail/main.py b/extensions/webmail/main.py index 83e7f189b..2e537c56f 100644 --- a/extensions/webmail/main.py +++ b/extensions/webmail/main.py @@ -103,7 +103,7 @@ def index(request): lst = ImapListing(request.user.username, request.session["password"], baseurl="INBOX", navparams=navp, folder="INBOX", empty=True) - except Exception as exp: + except Exception, exp: return _render_error(request, {"error" : exp}) return lst.render(request) @@ -217,7 +217,8 @@ def send_mail(request, withctx=False): s = smtplib.SMTP(parameters.get("webmail", "SMTP_SERVER")) if parameters.get("webmail", "SMTP_SECURED") == "yes": s.starttls() - except (smtplib.SMTPException, ssl.SSLError), error: + #except (smtplib.SMTPException, ssl.SSLError), error: + except Exception, e: print error # Prévoir la remontée de cette erreur au niveau du client!! diff --git a/extensions/webmail/templates/index.html b/extensions/webmail/templates/index.html index 967d8bced..1ca47b349 100644 --- a/extensions/webmail/templates/index.html +++ b/extensions/webmail/templates/index.html @@ -301,6 +301,7 @@ tr.selected { }, }); }); + if ($("toggleselect")) { $("toggleselect").addEvent("click", function(evt) { var checked = evt.target.get("checked"); if (checked) { @@ -313,7 +314,7 @@ tr.selected { selectedRows.empty(); } }); - + } $$("tr").addEvent("dblclick", viewmail); $$("th[class*=sortable]").addEvent("click", function(evt) { diff --git a/static/pics/folder-open.png b/static/pics/folder-open.png new file mode 100644 index 0000000000000000000000000000000000000000..b67403d9fe8cc15d91acf2eaa7dba47e815dd5ae GIT binary patch literal 625 zcmV-%0*?KOP)i{e+ zE)M)Cu@n(kRkpXc$vKZfYPH%-yWKu;cif$-s&IE^XJV$6vP>MgS3^+wBrUAcR1S5rCA^@#aer@s!dSAm_}e zZFfHdP}SolmMJAuRdUWOe~j$)B2YWmI;-y2W}YnfLX2NaRYgR|IkVe~JbiqRB8DT6 zfPcJ`q;~1qi?_E+5it?L%m_FWje@oBzi=Pw38#DqVhr54JV6LpDI%si1Qan)#6S$; zjPOKd`u$A23VWOEut9F1wEs#;2kg8?)r>ul{0=%kmf=A()x*Wv9;dYfW|!g}xZQq{pJuBgGKd*f}JIxK+Bt>L#rI ztaGbb=gsO5vR(W`JMDe4+v_qnuDtuOS=|I@?en(_g(qSIv**77-=a~Y&?|SC00000 LNkvXXu0mjfka`Wo literal 0 HcmV?d00001 diff --git a/static/pics/subfolders.png b/static/pics/subfolders.png new file mode 100644 index 0000000000000000000000000000000000000000..628f4d50ffc3a350c8cdcbb089b25bcc7139001d GIT binary patch literal 635 zcmV->0)+jEP)K`lbtXsaQ;_vX7l#~~rDr9s7q55D1?^Pcy->cq+1jZ7wU zlQn3qYkyT=9D4NlK21=UuUwMzXD_T<^nH(qLk}pI%cq|`ef}hzKdJx=2+Z^gX$a(w z9jEZI&}<1~=5GIr#kTnFBp0JiPWk?d?LkQ*GNyW<-J8)xZA^$>*C zq1Y(iRq@)?S0J5PtwTX&lprAhpJoaZL@8vfr+s?gTEz;V*Ee=RvcJHi~u5nQVJ14 z1Y!}QNC=`B9SYSjB8Y@!qIE^U^ISG1t1MPDUl%wcY$LzW`je V_=-2-nyCN)002ovPDHLkV1icx6Sn{W literal 0 HcmV?d00001 diff --git a/templates/common/email_listing.html b/templates/common/email_listing.html index bda4df9e8..1e8fbcbca 100644 --- a/templates/common/email_listing.html +++ b/templates/common/email_listing.html @@ -23,6 +23,7 @@ {% block css %}{% endblock %} +