diff --git a/ActiveSync/iCalAlarm+ActiveSync.m b/ActiveSync/iCalAlarm+ActiveSync.m
index f50ec55..a74b707 100644
--- a/ActiveSync/iCalAlarm+ActiveSync.m
+++ b/ActiveSync/iCalAlarm+ActiveSync.m
@@ -45,27 +45,23 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
- (NSString *) activeSyncRepresentationInContext: (WOContext *) context
{
NSMutableString *s;
+ NSCalendarDate *nextAlarmDate;
+ NSInteger delta;
s = [NSMutableString string];
+
+ nextAlarmDate = [self nextAlarmDate];
+ delta = (int)(([[(iCalEvent *)parent startDate] timeIntervalSince1970] - [nextAlarmDate timeIntervalSince1970])/60);
- if ([[self action] caseInsensitiveCompare: @"DISPLAY"] == NSOrderedSame)
+ if ([parent isKindOfClass: [iCalEvent class]])
{
- NSCalendarDate *nextAlarmDate;
- NSInteger delta;
-
- nextAlarmDate = [self nextAlarmDate];
- delta = (int)(([[(iCalEvent *)parent startDate] timeIntervalSince1970] - [nextAlarmDate timeIntervalSince1970])/60);
-
- if ([parent isKindOfClass: [iCalEvent class]])
- {
- // don't send negative reminder - not supported
- if (delta > 0)
- [s appendFormat: @"%d", (int)delta];
- }
- else
- {
- [s appendFormat: @"%@", [nextAlarmDate activeSyncRepresentationInContext: context]];
- }
+ // don't send negative reminder - not supported
+ if (delta > 0)
+ [s appendFormat: @"%d", (int)delta];
+ }
+ else
+ {
+ [s appendFormat: @"%@", [nextAlarmDate activeSyncRepresentationInContext: context]];
}
return s;
@@ -86,7 +82,8 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
trigger = [iCalTrigger elementWithTag: @"TRIGGER"];
[trigger setValueType: @"DURATION"];
[self setTrigger: trigger];
- [self setAction: @"DISPLAY"];
+ if (![self action])
+ [self setAction: @"DISPLAY"];
// SOGo web ui only supports 1w but not 2w (custom reminder only supports min/hours/days)
// 1week = -P1W
@@ -115,8 +112,16 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
trigger = [iCalTrigger elementWithTag: @"TRIGGER"];
[trigger setValueType: @"DATE-TIME"];
[trigger setSingleValue: [NSString stringWithFormat: @"%@Z", [o iCalFormattedDateTimeString]] forKey: @""];
+
+ if ((o = [theValues objectForKey: @"ReminderSet"]))
+ {
+ if ([o intValue] == 0)
+ [trigger setValue: 0 ofAttribute: @"x-webstatus" to: @"triggered"];
+ }
+
[self setTrigger: trigger];
- [self setAction: @"DISPLAY"];
+ if (![self action])
+ [self setAction: @"DISPLAY"];
}
}
diff --git a/ActiveSync/iCalEvent+ActiveSync.m b/ActiveSync/iCalEvent+ActiveSync.m
index 7a66adb..b33d6fa 100644
--- a/ActiveSync/iCalEvent+ActiveSync.m
+++ b/ActiveSync/iCalEvent+ActiveSync.m
@@ -321,7 +321,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
{
iCalAlarm *alarm;
- alarm = [self firstDisplayOrAudioAlarm];
+ alarm = [self firstSupportedAlarm];
[s appendString: [alarm activeSyncRepresentationInContext: context]];
}
@@ -447,6 +447,7 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
NSCalendarDate *oldstart;
NSTimeZone *userTimeZone;
iCalTimeZone *tz;
+ iCalAlarm *alarm;
id o;
int deltasecs;
@@ -582,23 +583,19 @@ SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
}
}
- //
- // If an alarm is deinfed with an action != DISPLAY, we ignore the alarm - don't want to overwrite.
- //
- if ([self hasAlarms] && [[[[self alarms] objectAtIndex: 0] action] caseInsensitiveCompare: @"DISPLAY"] != NSOrderedSame)
- {
- // Ignore the alarm for now
- }
- else if ((o = [theValues objectForKey: @"Reminder"]) && [o length])
+ if ((o = [theValues objectForKey: @"Reminder"]) && [o length])
{
+ if ([self hasAlarms])
+ alarm = [[self firstSupportedAlarm] mutableCopy];
+ else
+ alarm = [[iCalAlarm alloc] init];
+
// NOTE: Outlook sends a 15 min reminder (18 hour for allday) if no reminder is specified
// although no default reminder is defined (File -> Options -> Clendar -> Calendar Options - > Default Reminders)
//
// http://answers.microsoft.com/en-us/office/forum/office_2013_release-outlook/desktop-outlook-calendar-creates-entries-with/9aef72d8-81bb-4a32-a6ab-bf7d216fb811?page=5&tm=1395690285088
//
- iCalAlarm *alarm;
- alarm = [[iCalAlarm alloc] init];
[alarm takeActiveSyncValues: theValues inContext: context];
[self removeAllAlarms];