diff --git a/extensions/webmail/lib.py b/extensions/webmail/lib.py index d6fabe75d..8e366d911 100644 --- a/extensions/webmail/lib.py +++ b/extensions/webmail/lib.py @@ -352,6 +352,8 @@ class ImapListing(EmailListing): if kwargs.has_key("reset"): self.mbc.criterions = [] EmailListing.__init__(self, **kwargs) + self.extravars["refreshrate"] = \ + int(parameters.get_user(user, "webmail", "REFRESH_INTERVAL")) * 1000 def __parse_folders(self, folders): result = [] diff --git a/extensions/webmail/main.py b/extensions/webmail/main.py index 112946673..36feefa9e 100644 --- a/extensions/webmail/main.py +++ b/extensions/webmail/main.py @@ -32,6 +32,8 @@ def init(): deflt="no", help=_("Use a secured connection to access SMTP server")) + parameters.register_user("webmail", "REFRESH_INTERVAL", type="int", deflt=300, + help=_("Automatic folder refresh rate (in seconds)")) parameters.register_user("webmail", "TRASH_FOLDER", type="string", deflt="Trash", help=_("Folder where deleted messages go")) parameters.register_user("webmail", "SENT_FOLDER", type="string", deflt="Sent", diff --git a/extensions/webmail/templates/index.html b/extensions/webmail/templates/index.html index f1e9b19a9..0b9b90506 100644 --- a/extensions/webmail/templates/index.html +++ b/extensions/webmail/templates/index.html @@ -105,18 +105,34 @@ location.hash += event.target.get("href"); } register_callback("forward", compose_callback); + + var rtimer = null; + refreshFolder = function() { + var query = current_anchor.serialized.substring(1); + $clear(rtimer); + infobox.show('{% trans "Refreshing..." %}', "gray"); + new Request.JSON({url: query, noCache : true, onSuccess: function(resp) { + callback = ($defined(resp.callback)) ? resp.callback : "default"; + callbacks[callback](resp); + infobox.notice('{% trans "Done" %}'); + infobox.hide(1); + }}).get(); + } loadFolder = function(event, obj) { event.stop(); if (!$defined(obj)) { obj = $(event.target); } + console.log($defined(rtimer)); + $clear(rtimer); current_anchor.parse_string(gethref(obj), true).setparams(navparams); current_anchor.update(); } register_callback("folder", function(resp) { wm_updatelisting(resp); + rtimer = refreshFolder.periodical({{ refreshrate }}); select($$("a[href=" + current_anchor.getbaseurl() + "]")); $$("li[class*=clickable]").removeEvents(); $$("li[class*=clickable]").addEvent("click", function(evt) { diff --git a/lib/email_listing.py b/lib/email_listing.py index 75e15086d..a17ef3774 100644 --- a/lib/email_listing.py +++ b/lib/email_listing.py @@ -90,6 +90,7 @@ class EmailListing: self.folder = folder self.elems_per_page = elems_per_page self.navparams = navparams + self.extravars = {} order = "order" in kwargs.keys() and kwargs["order"] or None self.empty = "empty" in kwargs.keys() and kwargs["empty"] or False if not self.empty: @@ -125,16 +126,19 @@ class EmailListing: else: listing = self.fetch(request, page.id_start, page.id_stop) elapsed = kwargs.has_key("start") and time.time() - kwargs["start"] or 0 - return _render(request, self.tpl, { - "listing" : listing, - "elapsed" : elapsed, - "navbar" : self.render_navbar(page), - "selection" : self.folder, - "navparams" : self.navparams, - "deflocation" : self.deflocation, - "defcallback" : self.defcallback, - "reset_wm_url" : self.reset_wm_url - }) + context = { + "listing" : listing, + "elapsed" : elapsed, + "navbar" : self.render_navbar(page), + "selection" : self.folder, + "navparams" : self.navparams, + "deflocation" : self.deflocation, + "defcallback" : self.defcallback, + "reset_wm_url" : self.reset_wm_url + } + for k, v in self.extravars.iteritems(): + context[k] = v + return _render(request, self.tpl, context) class Email(object): def __init__(self, msg, mode="plain", links="0"):