From 438e9bb63533326b175c0001951f159fbf50b82c Mon Sep 17 00:00:00 2001 From: Francis Lachapelle Date: Thu, 13 Dec 2007 21:07:09 +0000 Subject: [PATCH] Monotone-Parent: 88aa0604fa28680daef426d3364f7f10665edb11 Monotone-Revision: 917c16cbc72247a3b9d3bc68547572f93349255c Monotone-Author: flachapelle@inverse.ca Monotone-Date: 2007-12-13T21:07:09 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 6 +++ UI/MailerUI/UIxMailMainFrame.h | 5 ++- UI/MailerUI/UIxMailMainFrame.m | 49 +++++++++++++++++++++++++ UI/MailerUI/product.plist | 12 +++++- UI/WebServerResources/MailerUI+dTree.js | 27 +++++++++++++- UI/WebServerResources/MailerUI.js | 45 ++++++++++++++++++++++- 6 files changed, 138 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index debdfec73..dd3b6dd84 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,9 @@ +2007-12-13 Francis Lachapelle + + * UI/MailerUI/UIxMailMainFrame.m ([UIxMailMainFrame -saveFoldersStateAction]) + ([UIxMailMainFrame -getFoldersStateAction]): new methods to get + and set the folders state of the user's web view. + 2007-12-13 Wolfgang Sourdeau * UI/MainUI/SOGoRootPage.m ([SOGoRootPage -crashAction]): new diff --git a/UI/MailerUI/UIxMailMainFrame.h b/UI/MailerUI/UIxMailMainFrame.h index 70bf0198c..1e4ecd553 100644 --- a/UI/MailerUI/UIxMailMainFrame.h +++ b/UI/MailerUI/UIxMailMainFrame.h @@ -26,7 +26,10 @@ #import "../SOGoUI/UIxComponent.h" @interface UIxMailMainFrame : UIxComponent - +{ + NSUserDefaults *ud; + NSMutableDictionary *moduleSettings; +} @end #endif /* UIXMAILMAINFRAME_H */ diff --git a/UI/MailerUI/UIxMailMainFrame.m b/UI/MailerUI/UIxMailMainFrame.m index 94842a19e..b0967759a 100644 --- a/UI/MailerUI/UIxMailMainFrame.m +++ b/UI/MailerUI/UIxMailMainFrame.m @@ -36,6 +36,28 @@ @implementation UIxMailMainFrame +- (void) _setupContext +{ + SOGoUser *activeUser; + NSString *login, *module; + SOGoMailAccounts *clientObject; + + activeUser = [context activeUser]; + login = [activeUser login]; + clientObject = [self clientObject]; + + module = [clientObject nameInContainer]; + + ud = [activeUser userSettings]; + moduleSettings = [ud objectForKey: module]; + if (!moduleSettings) + { + moduleSettings = [NSMutableDictionary new]; + [moduleSettings autorelease]; + } + [ud setObject: moduleSettings forKey: module]; +} + /* accessors */ - (NSString *) mailAccounts { @@ -111,4 +133,31 @@ return [self redirectToLocation: newLocation]; } +- (WOResponse *) getFoldersStateAction +{ + NSString *expandedFolders; + + [self _setupContext]; + expandedFolders = [moduleSettings objectForKey: @"ExpandedFolders"]; + + return [self responseWithStatus: 200 andString: expandedFolders]; +} + +- (WOResponse *) saveFoldersStateAction +{ + WORequest *request; + NSString *expandedFolders; + + [self _setupContext]; + request = [context request]; + expandedFolders = [request formValueForKey: @"expandedFolders"]; + + [moduleSettings setObject: expandedFolders + forKey: @"ExpandedFolders"]; + + [ud synchronize]; + + return [self responseWithStatus: 204]; +} + @end /* UIxMailMainFrame */ diff --git a/UI/MailerUI/product.plist b/UI/MailerUI/product.plist index 0c024e62f..61714cd2a 100644 --- a/UI/MailerUI/product.plist +++ b/UI/MailerUI/product.plist @@ -328,7 +328,17 @@ compose = { protectedBy = "View"; pageName = "UIxMailMainFrame"; - actionName = "compose"; + actionName = "compose"; + }; + foldersState = { + protectedBy = "View"; + pageName = "UIxMailMainFrame"; + actionName = "getFoldersState"; + }; + saveFoldersState = { + protectedBy = "View"; + pageName = "UIxMailMainFrame"; + actionName = "saveFoldersState"; }; }; }; diff --git a/UI/WebServerResources/MailerUI+dTree.js b/UI/WebServerResources/MailerUI+dTree.js index 42e60b4fb..a0805e5b8 100644 --- a/UI/WebServerResources/MailerUI+dTree.js +++ b/UI/WebServerResources/MailerUI+dTree.js @@ -29,8 +29,31 @@ var MailerUIdTreeExtension = { this._addFolder(thisCounter, folder.children[i]); }, addMailAccount: function (mailAccount) { - this._addFolder(0, mailAccount); - } + this._addFolder(0, mailAccount); + }, + setCookie: function(cookieName, cookieValue, expires, path, domain, secure) { + + }, + getCookie: function(cookieName) { + return (""); + }, + updateCookie: function () { + if (Mailer.foldersStateTimer) + clearTimeout(Mailer.foldersStateTimer); + Mailer.foldersStateTimer = setTimeout('saveFoldersState()', 3000); // 3 seconds + }, + getFoldersState: function () { + var expandedFolders = new Array(); + for (var n = 0; n < this.aNodes.length; n++) { + if (this.aNodes[n]._io && this.aNodes[n].pid != this.root.id) { + expandedFolders.push(this.aNodes[n].dataname); + } + } + return expandedFolders.toJSON(); + }, + autoSync: function() { + this.config.useCookies = true; + } }; Object.extend(dTree.prototype, MailerUIdTreeExtension); diff --git a/UI/WebServerResources/MailerUI.js b/UI/WebServerResources/MailerUI.js index 97a2a289e..d1639579b 100644 --- a/UI/WebServerResources/MailerUI.js +++ b/UI/WebServerResources/MailerUI.js @@ -14,7 +14,8 @@ var Mailer = { currentMailboxType: "", currentMessages: {}, maxCachedMessages: 20, - cachedMessages: new Array() + cachedMessages: new Array(), + foldersStateTimer: false }; var usersRightsWindowHeight = 320; @@ -1254,7 +1255,7 @@ function initMailer(event) { initMailboxTree(); initMessageCheckTimer(); } - + // Default sort options sorting["attribute"] = "date"; sorting["ascending"] = false; @@ -1434,6 +1435,7 @@ function onLoadMailboxesCallback(http) { updateMailboxTreeInPage(); updateMailboxMenus(); checkAjaxRequestsState(); + getFoldersState(); } } } @@ -1482,6 +1484,45 @@ function buildMailboxes(accountName, encoded) { return account; } +function getFoldersState() { + if (mailAccounts.length > 0) { + var urlstr = ApplicationBaseURL + "foldersState"; + triggerAjaxRequest(urlstr, getFoldersStateCallback); + } +} + +function getFoldersStateCallback(http) { + if (http.readyState == 4 + && http.status == 200) { + if (http.responseText.length > 0) { + // The response text is a JSOn representation + // of the folders that were left opened. + var data = http.responseText.evalJSON(true); + for (var i = 1; i < mailboxTree.aNodes.length; i++) { + if ($(data).indexOf(mailboxTree.aNodes[i].dataname) > 0) + // If the folder is found, open it + mailboxTree.o(i); + } + } + } + mailboxTree.autoSync(); +} + +function saveFoldersState() { + if (mailAccounts.length > 0) { + var foldersState = mailboxTree.getFoldersState(); + var urlstr = ApplicationBaseURL + "saveFoldersState" + "?expandedFolders=" + foldersState; + triggerAjaxRequest(urlstr, saveFoldersStateCallback); + } +} + +function saveFoldersStateCallback(http) { + if (http.readyState == 4 + && isHttpStatus204(http.status)) { + log ("folders state saved"); + } +} + function onMenuCreateFolder(event) { var name = window.prompt(labels["Name :"], ""); if (name && name.length > 0) {