Folders list is now updated on each folder changement.
This commit is contained in:
tonio
2010-04-27 17:19:19 +02:00
parent 7154e8e243
commit 560f8557de
6 changed files with 41 additions and 22 deletions
+17 -6
View File
@@ -1,10 +1,9 @@
# -*- 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
@@ -142,13 +141,11 @@ 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 Exception, error:
except (imaplib.IMAP4.error, ssl.SSLError), 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 Exception, error:
except (imaplib.IMAP4.error, ssl.SSLError), error:
return False, _("Authentication failed, check your configuration")
return True, None
@@ -183,6 +180,14 @@ class IMAPconnector(object):
self.messages = data[0].split()
return len(self.messages)
def unseen_messages(self, folder):
"""Return the number of unseen messages for folder"""
self.m.select(self._encodefolder(folder))
status, data = self.m.search("UTF-8", "(NOT DELETED UNSEEN)")
if status != "OK":
return
return len(data[0].split())
def _parse_folder_name(self, dict, prefix, delimiter, parts):
if not len(parts):
return
@@ -305,6 +310,12 @@ class ImapListing(EmailListing):
{"name" : 'Trash', "icon" : "trash.png"}]
folders = self.mbc.listfolders(md_folders=md_folders)
md_folders += self.__parse_folders(folders)
for fd in md_folders:
key = fd.has_key("path") and "path" or "name"
count = self.mbc.unseen_messages(fd[key])
if count == 0:
continue
fd["unseen"] = count
return md_folders
def parse_search_parameters(self, criterion, pattern):
+4 -1
View File
@@ -91,7 +91,10 @@ def folder(request, name, updatenav=True):
else:
content = "Empty folder"
navbar = ""
ctx = getctx("ok", listing=content, navbar=navbar,
folders = render_to_string("webmail/folders.html", {
"folders" : lst.getfolders()
})
ctx = getctx("ok", folders=folders, listing=content, navbar=navbar,
menu=listing_menu("", name, request.user.get_all_permissions()))
return HttpResponse(simplejson.dumps(ctx), mimetype="application/json")
@@ -0,0 +1,6 @@
{% load i18n %}
{% load webextras %}
<h3>{% trans "Folders" %}</h3>
<ul>
{% print_folders folders %}
</ul>
+7 -9
View File
@@ -16,7 +16,7 @@ html > body #listing {
bottom: 35px;
}
#leftcol {
#folders {
float: left;
width: 150px;
}
@@ -70,7 +70,7 @@ table#emails > tbody {
.box a:link, .box a:visited {
background: transparent;
color: black;
font-weight: bold;
/*font-weight: bold;*/
text-decoration: none;
}
@@ -126,7 +126,10 @@ ul.visible {
{% block js %}
wm_updatelisting = function(resp) {
updatelisting(resp);
if ($defined(resp.folders)) {
$("folders").set("html", resp.folders);
}
$$("a[name=loadfolder]").addEvent("click", foldercallback);
$$("a[name=compose]").addEvent("click", loadCompose);
$$("a[name=empty]").addEvent("click", empty);
}
@@ -375,14 +378,9 @@ ul.visible {
select(event.target);
loadFolder(event, event.target);
}
$$("a[name=loadfolder]").addEvent("click", foldercallback);
{% endblock %}
{% block middletitle %}{% trans "Webmail" %}{% endblock %}
{% block leftcol %}
<div id="leftcol" class="box">
<h3>{% trans "Folders" %}</h3>
<ul>
{% print_folders folders %}
</ul>
<div id="folders" class="box">
</div>
{% endblock %}
+7 -2
View File
@@ -95,8 +95,13 @@ def print_folders(folders):
else:
icon = "folder.png"
result += "<li class='droppable'>\n"
result += "<a href='%s' name='loadfolder'>%s</a>\n" \
% (fd.has_key("path") and fd["path"] or fd["name"], fd["name"])
label = fd["name"]
cssclass = ""
if fd.has_key("unseen"):
label += " (%d)" % fd["unseen"]
cssclass = "unseen"
result += "<a href='%s' class='%s' name='loadfolder'>%s</a>\n" \
% (fd.has_key("path") and fd["path"] or fd["name"], cssclass, label)
if fd.has_key("sub"):
result += "<img name='%s' class='clickable' src='/static/pics/%s' />\n" \
% (fd["path"], icon)
-4
View File
@@ -105,9 +105,6 @@ class EmailListing:
"page" : page
})
def getfolders(self):
return None
def fetch(self, request, id_start, id_stop):
table = self.tbltype(self.mbc.fetch(start=id_start, stop=id_stop,
folder=self.folder))
@@ -131,7 +128,6 @@ class EmailListing:
"listing" : listing,
"elapsed" : elapsed,
"navbar" : self.render_navbar(page),
"folders" : self.getfolders(),
"selection" : self.folder,
"navparams" : self.navparams,
"deflocation" : self.deflocation, "defcallback" : self.defcallback