diff --git a/ChangeLog b/ChangeLog index 61810aa38..ba7e9c522 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +2010-11-10 Francis Lachapelle + + * UI/WebServerResources/MailerUI.js (openMailbox): improved + behavior when reloading the mailbox. + 2010-11-08 Ludovic Marcotte * SOPE/GDLContentStore/GCSAlarmsFolder.m diff --git a/UI/WebServerResources/MailerUI.js b/UI/WebServerResources/MailerUI.js index 3a28e9588..43585e466 100644 --- a/UI/WebServerResources/MailerUI.js +++ b/UI/WebServerResources/MailerUI.js @@ -730,28 +730,44 @@ function openMailbox(mailbox, reload) { key += "?" + p; } - var dataSource = Mailer.dataSources.get(key); - if (!dataSource) { - dataSource = new SOGoMailDataSource(Mailer.dataTable, url); - if (inboxData) { - dataSource.init(inboxData['uids'], inboxData['headers']); - inboxData = null; // invalidate this initial lookup - } - else - dataSource.load(urlParams); - Mailer.dataSources.set(key, dataSource); - getUnseenCountForFolder(mailbox); - } - else if (reload) { + if (reload) { + // Don't change data source, only query UIDs from server and refresh + // the view. Cases that end up here: + // - performed a search + // - clicked on Get Mail button urlParams.set("no_headers", "1"); - dataSource.load(urlParams); - } - if (reload) + Mailer.dataTable.load(urlParams); Mailer.dataTable.refresh(); + } else { + var dataSource = Mailer.dataSources.get(key); + if (!dataSource) { + // Data source is not cached + dataSource = new SOGoMailDataSource(Mailer.dataTable, url); + if (inboxData) { + // Use UIDs and headers from the WOX template; this only + // happens once and only with the inbox + dataSource.init(inboxData['uids'], inboxData['headers']); + inboxData = null; // invalidate this initial lookup + } + else + // Fetch UIDs and headers from server + dataSource.load(urlParams); + // Cache data source + Mailer.dataSources.set(key, dataSource); + // Update unseen count + getUnseenCountForFolder(mailbox); + } + else { + // Data source is cached, query only UIDs from server + urlParams.set("no_headers", "1"); + dataSource.load(urlParams); + } + // Associate data source with data table and render the view Mailer.dataTable.setSource(dataSource); Mailer.dataTable.render(); } + configureDraggables(); Mailer.currentMailbox = mailbox; diff --git a/UI/WebServerResources/SOGoDataTable.js b/UI/WebServerResources/SOGoDataTable.js index 3d3f53def..9e55c8473 100644 --- a/UI/WebServerResources/SOGoDataTable.js +++ b/UI/WebServerResources/SOGoDataTable.js @@ -180,7 +180,7 @@ var SOGoDataTableInterface = { _render: function(renderID, start, max, data, refresh) { if (this.currentRenderID != renderID) { -// log ("DataTable._render() ignore render for " + renderID + " (current is " + this.currentRenderID + ")"); +// log ("DataTable._render() ignore render for " + renderID + " (current is " + this.currentRenderID + ")"); return; } // log("DataTable._render() for " + data.length + " uids (from " + start + ", max " + max + ")"); diff --git a/UI/WebServerResources/SOGoMailDataSource.js b/UI/WebServerResources/SOGoMailDataSource.js index daa5366f0..4a4f7a6ca 100644 --- a/UI/WebServerResources/SOGoMailDataSource.js +++ b/UI/WebServerResources/SOGoMailDataSource.js @@ -84,7 +84,6 @@ SOGoMailDataSource = Class.create({ this.init(data.uids, data.headers); else this.init(data); - this.loaded = true; if (this.delayedGetData) { this.delayedGetData(); this.delayedGetData = false; @@ -99,7 +98,7 @@ SOGoMailDataSource = Class.create({ getData: function(id, index, count, callbackFunction, delay) { if (this.loaded == false) { // UIDs are not yet loaded -- delay the call until loading the data is completed. -// log ("MailDataSource.getData() delaying data fetching while waiting for UIDs"); +// log ("MailDataSource.getData() delaying data fetching while waiting for UIDs"); this.delayedGetData = this.getData.bind(this, id, index, count, callbackFunction, delay); return; }