From 127599b7ff3216c9b7a8f847bf7e59b02b08a3d2 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Fri, 26 Oct 2007 13:58:15 +0000 Subject: [PATCH 1/3] Monotone-Parent: 63a530bbdbc486f47136825ad11a2ed0267f8e1e Monotone-Revision: 1e445a759baf03865aad01318b01c32c1c83c456 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2007-10-26T13:58:15 Monotone-Branch: ca.inverse.sogo --- UI/MainUI/SOGoUserHomePage.m | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/UI/MainUI/SOGoUserHomePage.m b/UI/MainUI/SOGoUserHomePage.m index 22c6a295c..8134af2c0 100644 --- a/UI/MainUI/SOGoUserHomePage.m +++ b/UI/MainUI/SOGoUserHomePage.m @@ -24,6 +24,7 @@ #import #import #import +#import #import #import #import @@ -213,15 +214,19 @@ static NSString *defaultModule = nil; [response setHeader: [container baseURLInContext: context] forKey: @"location"]; auth = [[self clientObject] authenticatorInContext: context]; + + date = [NSCalendarDate calendarDate]; + [date setTimeZone: [NSTimeZone timeZoneWithAbbreviation: @"GMT"]]; + cookie = [WOCookie cookieWithName: [auth cookieNameInContext: context] value: @"discard"]; [cookie setPath: @"/"]; - date = [NSCalendarDate calendarDate]; [cookie setExpires: [date yesterday]]; [response addCookie: cookie]; - - [response setHeader: date forKey: @"Last-Modified"]; - [response setHeader: @"no-store, no-cache, must-revalidate, max-age=0" forKey: @"Cache-Control"]; + + [response setHeader: [date rfc822DateString] forKey: @"Last-Modified"]; + [response setHeader: @"no-store, no-cache, must-revalidate, max-age=0" + forKey: @"Cache-Control"]; [response setHeader: @"post-check=0, pre-check=0" forKey: @"Cache-Control"]; [response setHeader: @"no-cache" forKey: @"Pragma"]; From 941605d08f2bb1710aff2dd12a4787f438ff89b9 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Fri, 26 Oct 2007 14:26:01 +0000 Subject: [PATCH 2/3] Monotone-Parent: 1e445a759baf03865aad01318b01c32c1c83c456 Monotone-Revision: 76b80b70d982a6797653b57df9258fed33df4bd9 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2007-10-26T14:26:01 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 16 +++++++++++ SoObjects/Mailer/SOGoMailFolder.h | 3 +++ SoObjects/Mailer/SOGoMailFolder.m | 44 +++++++++++++++++++++++++++++++ SoObjects/Mailer/SOGoMailObject.m | 4 ++- UI/MailerUI/UIxMailListView.m | 6 ++++- 5 files changed, 71 insertions(+), 2 deletions(-) diff --git a/ChangeLog b/ChangeLog index 2239ac960..35a2b3add 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,19 @@ +2007-10-26 Wolfgang Sourdeau + + * UI/MailerUI/UIxMailListView.m ([UIxMailListView + -defaultAction]): now expunges the last folder marked for expunge. + + * SoObjects/Mailer/SOGoMailObject.m ([SOGoMailObject + -trashInContext:_ctx]): now marks the container folder for + expunge. + + * SoObjects/Mailer/SOGoMailFolder.m ([SOGoMailFolder + -markForExpunge]): new method that marks the folder for the next + automatic expunge operation in the user settings. + ([SOGoMailFolder -expungeLastMarkedFolder]): new methods that + takes the last folder marked for expunge, expunges it and removes + it from the user settings, if it exists. + 2007-10-25 Wolfgang Sourdeau * UI/MailerUI/UIxMailListView.m ([UIxMailListView diff --git a/SoObjects/Mailer/SOGoMailFolder.h b/SoObjects/Mailer/SOGoMailFolder.h index 3cd98c20a..3de6f3ee8 100644 --- a/SoObjects/Mailer/SOGoMailFolder.h +++ b/SoObjects/Mailer/SOGoMailFolder.h @@ -52,6 +52,9 @@ - (NSException *) postData: (NSData *) _data flags: (id) _flags; +- (void) markForExpunge; +- (void) expungeLastMarkedFolder; + - (NSException *) expunge; /* flags */ diff --git a/SoObjects/Mailer/SOGoMailFolder.m b/SoObjects/Mailer/SOGoMailFolder.m index 50f2484b0..ec66e3669 100644 --- a/SoObjects/Mailer/SOGoMailFolder.m +++ b/SoObjects/Mailer/SOGoMailFolder.m @@ -19,9 +19,12 @@ 02111-1307, USA. */ +#import +#import #import #import +#import #import #import #import @@ -236,6 +239,47 @@ static NSString *defaultUserID = @"anyone"; return [[self imap4Connection] expungeAtURL: [self imap4URL]]; } +- (void) markForExpunge +{ + NSUserDefaults *ud; + NSMutableDictionary *mailSettings; + + ud = [[context activeUser] userSettings]; + mailSettings = [ud objectForKey: @"Mail"]; + if (!mailSettings) + { + mailSettings = [NSMutableDictionary dictionaryWithCapacity: 1]; + [ud setObject: mailSettings forKey: @"Mail"]; + } + + [mailSettings setObject: [self imap4URLString] forKey: @"folderForExpunge"]; + [ud synchronize]; +} + +- (void) expungeLastMarkedFolder +{ + NSUserDefaults *ud; + NSMutableDictionary *mailSettings; + NSString *expungeURL; + NSURL *folderURL; + + ud = [[context activeUser] userSettings]; + mailSettings = [ud objectForKey: @"Mail"]; + if (mailSettings) + { + expungeURL = [mailSettings objectForKey: @"folderForExpunge"]; + if (expungeURL) + { + folderURL = [NSURL URLWithString: expungeURL]; + if (![[self imap4Connection] expungeAtURL: folderURL]) + { + [mailSettings removeObjectForKey: @"folderForExpunge"]; + [ud synchronize]; + } + } + } +} + /* flags */ - (NSException *) addFlagsToAllMessages: (id) _f diff --git a/SoObjects/Mailer/SOGoMailObject.m b/SoObjects/Mailer/SOGoMailObject.m index 86eb94e8e..e126222f3 100644 --- a/SoObjects/Mailer/SOGoMailObject.m +++ b/SoObjects/Mailer/SOGoMailObject.m @@ -874,7 +874,9 @@ static BOOL debugSoParts = NO; error = [[self imap4Connection] markURLDeleted: [self imap4URL]]; if (error != nil) return error; - + + [container markForExpunge]; + [self flushMailCaches]; return nil; diff --git a/UI/MailerUI/UIxMailListView.m b/UI/MailerUI/UIxMailListView.m index 7c6a855bb..162514211 100644 --- a/UI/MailerUI/UIxMailListView.m +++ b/UI/MailerUI/UIxMailListView.m @@ -516,10 +516,13 @@ static int attachmentFlagSize = 8096; { WORequest *request; NSString *specificMessage, *searchCriteria, *searchValue; + SOGoUserFolder *co; request = [context request]; - [[self clientObject] flushMailCaches]; + co = [self clientObject]; + [co flushMailCaches]; + [co expungeLastMarkedFolder]; specificMessage = [request formValueForKey: @"pageforuid"]; searchCriteria = [request formValueForKey: @"search"]; @@ -532,6 +535,7 @@ static int attachmentFlagSize = 8096; = ((specificMessage) ? [self firstMessageOfPageFor: [specificMessage intValue]] : [[request formValueForKey:@"idx"] intValue]); + return self; } From 116df618efa1ad126cb11508efeb37591fa36b25 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Fri, 26 Oct 2007 15:35:51 +0000 Subject: [PATCH 3/3] Monotone-Parent: 76b80b70d982a6797653b57df9258fed33df4bd9 Monotone-Revision: 43873f327e4f2327b78f3b1c2f2c079cbe5f76d0 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2007-10-26T15:35:51 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 10 +++++++ SoObjects/SOGo/SOGoUser.h | 1 + SoObjects/SOGo/SOGoUser.m | 12 ++++++++ .../English.lproj/Localizable.strings | 10 +++++++ .../French.lproj/Localizable.strings | 10 +++++++ .../German.lproj/Localizable.strings | 10 +++++++ UI/PreferencesUI/UIxPreferences.m | 24 +++++++++++++++ UI/Templates/PreferencesUI/UIxPreferences.wox | 30 ++++++++++--------- UI/WebServerResources/MailerUI.js | 23 ++++++++++++++ 9 files changed, 116 insertions(+), 14 deletions(-) diff --git a/ChangeLog b/ChangeLog index 35a2b3add..8684e5f6f 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,15 @@ 2007-10-26 Wolfgang Sourdeau + * UI/PreferencesUI/UIxPreferences.m ([UIxPreferences -messageCheckList]) + ([UIxPreferences -itemMessageCheckText]) + ([UIxPreferences -userMessageCheck]) + ([UIxPreferences -setUserMessageCheck:newMessageCheck]): new + methods for handling the retrieval of new messages automatically. + + * SoObjects/SOGo/SOGoUser.m ([SOGoUser -messageCheck]): new method + that returns the interval of time between automatic message + retrievals. + * UI/MailerUI/UIxMailListView.m ([UIxMailListView -defaultAction]): now expunges the last folder marked for expunge. diff --git a/SoObjects/SOGo/SOGoUser.h b/SoObjects/SOGo/SOGoUser.h index 203f1c220..bea3b7242 100644 --- a/SoObjects/SOGo/SOGoUser.h +++ b/SoObjects/SOGo/SOGoUser.h @@ -112,6 +112,7 @@ extern NSString *SOGoWeekStartFirstFullWeek; - (NSArray *) allIdentities; - (NSDictionary *) primaryIdentity; - (NSString *) messageForwarding; +- (NSString *) messageCheck; /* folders */ diff --git a/SoObjects/SOGo/SOGoUser.m b/SoObjects/SOGo/SOGoUser.m index 5ea1146c6..f3a0633ac 100644 --- a/SoObjects/SOGo/SOGoUser.m +++ b/SoObjects/SOGo/SOGoUser.m @@ -499,6 +499,18 @@ NSString *SOGoWeekStartFirstFullWeek = @"FirstFullWeek"; return messageForwarding; } +- (NSString *) messageCheck +{ + NSString *messageCheck; + + messageCheck + = [[self userDefaults] stringForKey: @"MessageCheck"]; + if (![messageCheck length]) + messageCheck = @"manually"; + + return messageCheck; +} + /* folders */ // TODO: those methods should check whether the traversal stack in the context diff --git a/UI/PreferencesUI/English.lproj/Localizable.strings b/UI/PreferencesUI/English.lproj/Localizable.strings index 64aa487e7..d216c0fe6 100644 --- a/UI/PreferencesUI/English.lproj/Localizable.strings +++ b/UI/PreferencesUI/English.lproj/Localizable.strings @@ -68,6 +68,16 @@ "reminderTime_4800" = "2 days"; /* Mailer */ +"Check for new mail:" = "Check for new mail:"; +"messagecheck_manually" = "Manually"; +"messagecheck_every_minute" = "Every minute"; +"messagecheck_every_2_minutes" = "Every 2 minutes"; +"messagecheck_every_5_minutes" = "Every 5 minutes"; +"messagecheck_every_10_minutes" = "Every 10 minutes"; +"messagecheck_every_20_minutes" = "Every 20 minutes"; +"messagecheck_every_30_minutes" = "Every 30 minutes"; +"messagecheck_once_per_hour" = "Once per hour"; + "Forward messages:" = "Forward messages:"; "messageforward_inline" = "Inline"; "messageforward_attached" = "As Attachment"; diff --git a/UI/PreferencesUI/French.lproj/Localizable.strings b/UI/PreferencesUI/French.lproj/Localizable.strings index a3e625db7..99d333873 100644 --- a/UI/PreferencesUI/French.lproj/Localizable.strings +++ b/UI/PreferencesUI/French.lproj/Localizable.strings @@ -65,6 +65,16 @@ "reminderTime_4800" = "2 journées"; /* Mailer */ +"Check for new mail:" = "Vérifier l'arrivée de messages:"; +"messagecheck_manually" = "Manuellement"; +"messagecheck_every_minute" = "Chaque minute"; +"messagecheck_every_2_minutes" = "Toutes les 2 minutes"; +"messagecheck_every_5_minutes" = "Toutes les 5 minutes"; +"messagecheck_every_10_minutes" = "Toutes les 10 minutes"; +"messagecheck_every_20_minutes" = "Toutes les 20 minutes"; +"messagecheck_every_30_minutes" = "Toutes les 30 minutes"; +"messagecheck_once_per_hour" = "Une fois par heure"; + "Forward messages:" = "Transérer les messages :"; "messageforward_inline" = "intégrés"; "messageforward_attached" = "en pièces jointes"; diff --git a/UI/PreferencesUI/German.lproj/Localizable.strings b/UI/PreferencesUI/German.lproj/Localizable.strings index 34ac16981..e25c85fb0 100644 --- a/UI/PreferencesUI/German.lproj/Localizable.strings +++ b/UI/PreferencesUI/German.lproj/Localizable.strings @@ -65,6 +65,16 @@ "reminderTime_4800" = "2 Tage"; /* Mailer */ +"Check for new mail:" = "Check for new mail:"; +"messagecheck_manually" = "Manually"; +"messagecheck_every_minute" = "Every minute"; +"messagecheck_every_2_minutes" = "Every 2 minutes"; +"messagecheck_every_5_minutes" = "Every 5 minutes"; +"messagecheck_every_10_minutes" = "Every 10 minutes"; +"messagecheck_every_20_minutes" = "Every 20 minutes"; +"messagecheck_every_30_minutes" = "Every 30 minutes"; +"messagecheck_once_per_hour" = "Once per hour"; + "Forward messages:" = "Nachrichten weiterleiten:"; "messageforward_inline" = "Eingebunden"; "messageforward_attached" = "Als Anhang"; diff --git a/UI/PreferencesUI/UIxPreferences.m b/UI/PreferencesUI/UIxPreferences.m index 7259f60d2..0a6c33ef1 100644 --- a/UI/PreferencesUI/UIxPreferences.m +++ b/UI/PreferencesUI/UIxPreferences.m @@ -421,6 +421,30 @@ static BOOL shouldDisplayPasswordChange = NO; } /* Mailer */ +- (NSArray *) messageCheckList +{ + return [NSArray arrayWithObjects: @"manually", @"every_minute", + @"every_2_minutes", @"every_5_minutes", @"every_10_minutes", + @"every_20_minutes", @"every_30_minutes", @"once_per_hour", + nil]; +} + +- (NSString *) itemMessageCheckText +{ + return [self labelForKey: + [NSString stringWithFormat: @"messagecheck_%@", item]]; +} + +- (NSString *) userMessageCheck +{ + return [user messageCheck]; +} + +- (void) setUserMessageCheck: (NSString *) newMessageCheck +{ + [userDefaults setObject: newMessageCheck forKey: @"MessageCheck"]; +} + - (NSArray *) messageForwardingList { return [NSArray arrayWithObjects: @"inline", @"attached", nil]; diff --git a/UI/Templates/PreferencesUI/UIxPreferences.wox b/UI/Templates/PreferencesUI/UIxPreferences.wox index 8a890c582..dd0ca1af2 100644 --- a/UI/Templates/PreferencesUI/UIxPreferences.wox +++ b/UI/Templates/PreferencesUI/UIxPreferences.wox @@ -25,8 +25,8 @@

+




+

+
diff --git a/UI/WebServerResources/MailerUI.js b/UI/WebServerResources/MailerUI.js index 85cbeb013..85e0bfbdf 100644 --- a/UI/WebServerResources/MailerUI.js +++ b/UI/WebServerResources/MailerUI.js @@ -18,6 +18,8 @@ var pageContent; var deleteMessageRequestCount = 0; +var messageCheckTimer; + /* mail list */ function openMessageWindow(msguid, url) { @@ -1106,9 +1108,30 @@ function initMailer(event) { if (!document.body.hasClassName("popup")) { // initDnd(); initMailboxTree(); + initMessageCheckTimer(); } } +function initMessageCheckTimer() { + var messageCheck = userDefaults["MessageCheck"]; + if (messageCheck && messageCheck != "manually") { + var interval; + if (messageCheck == "once_per_hour") + interval = 3600; + else if (messageCheck == "every_minute") + interval = 60; + else { + interval = parseInt(messageCheck.substr(6)) * 60; + } + messageCheckTimer = window.setInterval(onMessageCheckCallback, + interval * 1000); + } +} + +function onMessageCheckCallback(event) { + refreshMailbox(); +} + function initMailboxTree() { mailboxTree = new dTree("mailboxTree"); mailboxTree.config.folderLinks = true;