From 42817f45bf1146cf64e88bcbcc48a3adcd46913c Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Fri, 13 Aug 2010 21:03:04 +0000 Subject: [PATCH 1/5] Monotone-Parent: e16807404ac6ea20632ee7e0e21ae2db34830540 Monotone-Revision: 46e2b0eb136b0ff20576ecbaa9428e3c5bcd2ce7 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-08-13T21:03:04 Monotone-Branch: ca.inverse.sogo --- SOPE/NGCards/ChangeLog | 5 +++++ SOPE/NGCards/iCalAlarm.h | 2 ++ SOPE/NGCards/iCalAlarm.m | 42 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 49 insertions(+) diff --git a/SOPE/NGCards/ChangeLog b/SOPE/NGCards/ChangeLog index 91fb55d8a..1a22c37c3 100644 --- a/SOPE/NGCards/ChangeLog +++ b/SOPE/NGCards/ChangeLog @@ -1,3 +1,8 @@ +2010-08-13 Wolfgang Sourdeau + + * iCalAlarm.m (-nextAlarmDate): new utility method split from the + SOGo quick table extractor for events. + 2010-08-11 Wolfgang Sourdeau * NGVCardPhoto.m (-type): returns @"JPEG" if the type is diff --git a/SOPE/NGCards/iCalAlarm.h b/SOPE/NGCards/iCalAlarm.h index 41a45c042..ecb39f5c6 100644 --- a/SOPE/NGCards/iCalAlarm.h +++ b/SOPE/NGCards/iCalAlarm.h @@ -41,6 +41,8 @@ - (void) setRecurrenceRule: (NSString *) _recurrenceRule; - (NSString *) recurrenceRule; +- (NSCalendarDate *) nextAlarmDate; + @end #endif /* __NGCards_iCalAlarm_H__ */ diff --git a/SOPE/NGCards/iCalAlarm.m b/SOPE/NGCards/iCalAlarm.m index a4218fa84..cc7bc363e 100644 --- a/SOPE/NGCards/iCalAlarm.m +++ b/SOPE/NGCards/iCalAlarm.m @@ -20,10 +20,14 @@ */ #import +#import +#import #import "iCalAttachment.h" +#import "iCalEvent.h" #import "iCalRecurrenceRule.h" #import "iCalTrigger.h" +#import "NSString+NGCards.h" #import "iCalAlarm.h" @@ -103,4 +107,42 @@ return [[self uniqueChildWithTag: @"rrule"] value: 0]; } +- (NSCalendarDate *) nextAlarmDate +{ + Class parentClass; + iCalTrigger *aTrigger; + NSCalendarDate *relationDate, *nextAlarmDate; + NSString *relation; + NSTimeInterval anInterval; + iCalEvent *parentEvent; + + nextAlarmDate = nil; + + parentClass = [parent class]; + if ([parentClass isKindOfClass: [iCalEvent class]]) + { + parentEvent = (iCalEvent *) parent; + aTrigger = [self trigger]; + + if ([[aTrigger valueType] caseInsensitiveCompare: @"DURATION"]) + { + relation = [aTrigger relationType]; + anInterval = [[aTrigger value] durationAsTimeInterval]; + if ([relation caseInsensitiveCompare: @"END"] == NSOrderedSame) + relationDate = [parentEvent endDate]; + else + relationDate = [parentEvent startDate]; + + // Compute the next alarm date with respect to the reference date + if ([relationDate isNotNull]) + nextAlarmDate = [relationDate addTimeInterval: anInterval]; + } + } + else + [self warnWithFormat: @"alarms not handled for elements of class '%@'", + NSStringFromClass (parentClass)]; + + return nextAlarmDate; +} + @end /* iCalAlarm */ From 030c5cde99416f750ad04e5dd9f0bc6d6ddb2994 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Fri, 13 Aug 2010 21:23:56 +0000 Subject: [PATCH 2/5] Monotone-Parent: 46e2b0eb136b0ff20576ecbaa9428e3c5bcd2ce7 Monotone-Revision: af7a7cd27a47902f3807ddbe5a9716197f08eeab Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-08-13T21:23:56 Monotone-Branch: ca.inverse.sogo --- SOPE/NGCards/iCalAlarm.m | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/SOPE/NGCards/iCalAlarm.m b/SOPE/NGCards/iCalAlarm.m index cc7bc363e..03b6e33dd 100644 --- a/SOPE/NGCards/iCalAlarm.m +++ b/SOPE/NGCards/iCalAlarm.m @@ -27,6 +27,7 @@ #import "iCalEvent.h" #import "iCalRecurrenceRule.h" #import "iCalTrigger.h" +#import "iCalToDo.h" #import "NSString+NGCards.h" #import "iCalAlarm.h" @@ -114,14 +115,13 @@ NSCalendarDate *relationDate, *nextAlarmDate; NSString *relation; NSTimeInterval anInterval; - iCalEvent *parentEvent; nextAlarmDate = nil; parentClass = [parent class]; - if ([parentClass isKindOfClass: [iCalEvent class]]) + if ([parentClass isKindOfClass: [iCalEvent class]] + || [parentClass isKindOfClass: [iCalToDo class]]) { - parentEvent = (iCalEvent *) parent; aTrigger = [self trigger]; if ([[aTrigger valueType] caseInsensitiveCompare: @"DURATION"]) @@ -129,9 +129,14 @@ relation = [aTrigger relationType]; anInterval = [[aTrigger value] durationAsTimeInterval]; if ([relation caseInsensitiveCompare: @"END"] == NSOrderedSame) - relationDate = [parentEvent endDate]; + { + if ([parentClass isKindOfClass: [iCalEvent class]]) + relationDate = [(iCalEvent *) parent endDate]; + else + relationDate = [(iCalToDo *) parent due]; + } else - relationDate = [parentEvent startDate]; + relationDate = [(iCalEntityObject *) parent startDate]; // Compute the next alarm date with respect to the reference date if ([relationDate isNotNull]) From 16d77fcb15240d425a8d097f7d64e386a093ac53 Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Fri, 13 Aug 2010 21:26:28 +0000 Subject: [PATCH 3/5] Monotone-Parent: af7a7cd27a47902f3807ddbe5a9716197f08eeab Monotone-Revision: 9bb74304731864ba16d9eddd716cd890df9d5af6 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-08-13T21:26:28 Monotone-Branch: ca.inverse.sogo --- SOPE/NGCards/iCalAlarm.m | 3 +++ 1 file changed, 3 insertions(+) diff --git a/SOPE/NGCards/iCalAlarm.m b/SOPE/NGCards/iCalAlarm.m index 03b6e33dd..d07d81f4e 100644 --- a/SOPE/NGCards/iCalAlarm.m +++ b/SOPE/NGCards/iCalAlarm.m @@ -116,6 +116,9 @@ NSString *relation; NSTimeInterval anInterval; + // We currently have the following limitations for alarms: + // - the alarm's trigger value type must be DURATION; + nextAlarmDate = nil; parentClass = [parent class]; From a0548561b6a815a3bb7725d64813aebc1255b90f Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Fri, 13 Aug 2010 21:28:15 +0000 Subject: [PATCH 4/5] Monotone-Parent: 9bb74304731864ba16d9eddd716cd890df9d5af6 Monotone-Revision: b718c48057e1fd4a0cc8a43b5d71809846232ca6 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-08-13T21:28:15 Monotone-Branch: ca.inverse.sogo --- ChangeLog | 8 +++++ SoObjects/Appointments/iCalEvent+SOGo.m | 43 ++++++++----------------- SoObjects/Appointments/iCalToDo+SOGo.m | 32 +++++++----------- 3 files changed, 32 insertions(+), 51 deletions(-) diff --git a/ChangeLog b/ChangeLog index 3be02f72c..1fa5f6024 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2010-08-13 Wolfgang Sourdeau + + * SoObjects/Appointments/iCalEvent+SOGo.m (-quickRecord): we now + make use of the new -[iCalAlarm nextAlarmDate] method. + + * SoObjects/Appointments/iCalToDo+SOGo.m (-quickRecord): we now + make use of the new -[iCalAlarm nextAlarmDate] method. + 2010-08-12 Wolfgang Sourdeau * UI/WebServerResources/MailerUIdTree.js: (getMailboxNode): fixed diff --git a/SoObjects/Appointments/iCalEvent+SOGo.m b/SoObjects/Appointments/iCalEvent+SOGo.m index 29f691c15..df1e1059b 100644 --- a/SoObjects/Appointments/iCalEvent+SOGo.m +++ b/SoObjects/Appointments/iCalEvent+SOGo.m @@ -77,7 +77,6 @@ startDate = [self startDate]; endDate = [self endDate]; - nextAlarmDate = nil; uid = [self uid]; title = [self summary]; if (![title isNotNull]) @@ -203,46 +202,30 @@ [row setObject:partstates forKey: @"c_partstates"]; [partstates release]; - if ([self hasAlarms]) + nextAlarmDate = nil; + if (![self isRecurrent] && [self hasAlarms]) { // We currently have the following limitations for alarms: - // - the event must not be recurrent; + // - the component must not be recurrent; // - only the first alarm is considered; // - the alarm's action must be of type DISPLAY; // - the alarm's trigger value type must be DURATION; // // Morever, we don't update the quick table if the property X-WebStatus // of the trigger is set to "triggered". - iCalAlarm *anAlarm; - iCalTrigger *aTrigger; - NSCalendarDate *relationDate; - NSString *relation, *webstatus; - NSTimeInterval anInterval; + NSString *webstatus; anAlarm = [[self alarms] objectAtIndex: 0]; - aTrigger = [anAlarm trigger]; - relation = [aTrigger relationType]; - anInterval = [[aTrigger value] durationAsTimeInterval]; - - if ([[anAlarm action] caseInsensitiveCompare: @"DISPLAY"] == NSOrderedSame && - [[aTrigger valueType] caseInsensitiveCompare: @"DURATION"] == NSOrderedSame && - ![self isRecurrent]) - { - webstatus = [aTrigger value: 0 ofAttribute: @"x-webstatus"]; - if (!webstatus || - [webstatus caseInsensitiveCompare: @"TRIGGERED"] != NSOrderedSame) - { - if ([relation caseInsensitiveCompare: @"END"] == NSOrderedSame) - relationDate = endDate; - else - relationDate = startDate; - - // Compute the next alarm date with respect to the reference date - if ([relationDate isNotNull]) - nextAlarmDate = [relationDate addTimeInterval: anInterval]; - } - } + if ([[anAlarm action] caseInsensitiveCompare: @"DISPLAY"] + == NSOrderedSame) + { + webstatus = [[anAlarm trigger] value: 0 ofAttribute: @"x-webstatus"]; + if (!webstatus + || ([webstatus caseInsensitiveCompare: @"TRIGGERED"] + != NSOrderedSame)) + nextAlarmDate = [anAlarm nextAlarmDate]; + } } if ([nextAlarmDate isNotNull]) [row setObject: [NSNumber numberWithInt: [nextAlarmDate timeIntervalSince1970]] diff --git a/SoObjects/Appointments/iCalToDo+SOGo.m b/SoObjects/Appointments/iCalToDo+SOGo.m index 00945c2fc..7d03d8c2d 100644 --- a/SoObjects/Appointments/iCalToDo+SOGo.m +++ b/SoObjects/Appointments/iCalToDo+SOGo.m @@ -171,39 +171,29 @@ [row setObject:partstates forKey: @"c_partstates"]; [partstates release]; - if ([self hasAlarms]) + nextAlarmDate = nil; + if (![self isRecurrent] && [self hasAlarms]) { // We currently have the following limitations for alarms: // - the component must not be recurrent; // - only the first alarm is considered; // - the alarm's action must be of type DISPLAY; - // - the alarm's trigger value type must be DURATION; // // Morever, we don't update the quick table if the property X-WebStatus // of the trigger is set to "triggered". - iCalAlarm *anAlarm; - iCalTrigger *aTrigger; NSString *webstatus; - NSTimeInterval anInterval; anAlarm = [[self alarms] objectAtIndex: 0]; - aTrigger = [anAlarm trigger]; - anInterval = [[aTrigger value] durationAsTimeInterval]; - - if ([[anAlarm action] caseInsensitiveCompare: @"DISPLAY"] == NSOrderedSame && - [[aTrigger valueType] caseInsensitiveCompare: @"DURATION"] == NSOrderedSame && - ![self isRecurrent]) - { - webstatus = [aTrigger value: 0 ofAttribute: @"x-webstatus"]; - if (!webstatus || - [webstatus caseInsensitiveCompare: @"TRIGGERED"] != NSOrderedSame) - { - // Compute the next alarm date with respect to the due date - if ([dueDate isNotNull]) - nextAlarmDate = [dueDate addTimeInterval: anInterval]; - } - } + if ([[anAlarm action] caseInsensitiveCompare: @"DISPLAY"] + == NSOrderedSame) + { + webstatus = [[anAlarm trigger] value: 0 ofAttribute: @"x-webstatus"]; + if (!webstatus + || ([webstatus caseInsensitiveCompare: @"TRIGGERED"] + != NSOrderedSame)) + nextAlarmDate = [anAlarm nextAlarmDate]; + } } if ([nextAlarmDate isNotNull]) [row setObject: [NSNumber numberWithInt: [nextAlarmDate timeIntervalSince1970]] From 50dd3ada2ccb05cf653e73f32f2c810d0e11523f Mon Sep 17 00:00:00 2001 From: Wolfgang Sourdeau Date: Wed, 18 Aug 2010 16:23:13 +0000 Subject: [PATCH 5/5] reindentation Monotone-Parent: f19a49f2c5d69679992d50a3ebb685975f47b75e Monotone-Revision: bb3c592590664390a1256fac17d92ed09a9484d3 Monotone-Author: wsourdeau@inverse.ca Monotone-Date: 2010-08-18T16:23:13 Monotone-Branch: ca.inverse.sogo --- UI/WebServerResources/UIxReminderEditor.js | 46 +++++++++++----------- 1 file changed, 22 insertions(+), 24 deletions(-) diff --git a/UI/WebServerResources/UIxReminderEditor.js b/UI/WebServerResources/UIxReminderEditor.js index 4c8fa291d..69e9a2ec5 100644 --- a/UI/WebServerResources/UIxReminderEditor.js +++ b/UI/WebServerResources/UIxReminderEditor.js @@ -1,45 +1,43 @@ -/* -*- Mode: java; indent-tabs-mode: nil; c-basic-offset: 4 -*- */ - function initializeWindowButtons() { - var okButton = $("okButton"); - var cancelButton = $("cancelButton"); + var okButton = $("okButton"); + var cancelButton = $("cancelButton"); - okButton.observe("click", onEditorOkClick, false); - cancelButton.observe("click", onEditorCancelClick, false); + okButton.observe("click", onEditorOkClick, false); + cancelButton.observe("click", onEditorCancelClick, false); } function initializeFormValues() { if (parent$("reminderUnit").value.length > 0) { $("quantityField").value = parent$("reminderQuantity").value; - $("unitsList").value = parent$("reminderUnit").value; - $("relationsList").value = parent$("reminderRelation").value; - $("referencesList").value = parent$("reminderReference").value; + $("unitsList").value = parent$("reminderUnit").value; + $("relationsList").value = parent$("reminderRelation").value; + $("referencesList").value = parent$("reminderReference").value; } } function onEditorOkClick(event) { - preventDefault(event); - if (parseInt($("quantityField").value) > 0) { - parent$("reminderQuantity").value = parseInt($("quantityField").value); - parent$("reminderUnit").value = $("unitsList").value; - parent$("reminderRelation").value = $("relationsList").value; - parent$("reminderReference").value = $("referencesList").value; - - window.close(); - } - else - alert("heu"); + preventDefault(event); + if (parseInt($("quantityField").value) > 0) { + parent$("reminderQuantity").value = parseInt($("quantityField").value); + parent$("reminderUnit").value = $("unitsList").value; + parent$("reminderRelation").value = $("relationsList").value; + parent$("reminderReference").value = $("referencesList").value; + + window.close(); + } + else + alert("heu"); } function onEditorCancelClick(event) { - preventDefault(event); - window.close(); + preventDefault(event); + window.close(); } function onRecurrenceLoadHandler() { - initializeFormValues(); - initializeWindowButtons(); + initializeFormValues(); + initializeWindowButtons(); } document.observe("dom:loaded", onRecurrenceLoadHandler);