/// <summary> /// Merges the recurrence. /// </summary> /// <param name="outlookCalendarItem">The outlook calendar item.</param> /// <param name="recurrence">The recurrence.</param> /// <returns>True if Change.</returns> public static bool MergeRecurrence(this AppointmentItem outlookCalendarItem, Recurrence recurrence) { if (recurrence != null && !string.IsNullOrWhiteSpace(recurrence.Value)) { var result = false; var outlookRecurrencePattern = outlookCalendarItem.GetRecurrencePattern(); var googleRecurrencePattern = RecurrenceSerializer.Deserialize(recurrence.Value); try { result |= outlookCalendarItem.ApplyProperty(r => r.AllDayEvent, googleRecurrencePattern.AllDayEvent); } catch (TargetInvocationException) { } result |= outlookRecurrencePattern.ApplyProperty(r => r.RecurrenceType, googleRecurrencePattern.RecurrenceType); result |= outlookRecurrencePattern.ApplyProperty(r => r.PatternStartDate, googleRecurrencePattern.StartPattern.HasValue ? googleRecurrencePattern.StartPattern.Value.Date : DateTime.Today); if (googleRecurrencePattern.EndPattern.HasValue) { result |= outlookRecurrencePattern.ApplyProperty(r => r.PatternEndDate, googleRecurrencePattern.EndPattern.Value.Date); } else { result |= outlookRecurrencePattern.ApplyProperty(r => r.NoEndDate, true); } result |= outlookRecurrencePattern.ApplyProperty(r => r.DayOfMonth, googleRecurrencePattern.DayOfMonth); result |= outlookRecurrencePattern.ApplyProperty(r => r.DayOfWeekMask, googleRecurrencePattern.DayOfWeek); result |= outlookRecurrencePattern.ApplyProperty(r => r.MonthOfYear, googleRecurrencePattern.MonthOfYear); if (outlookRecurrencePattern.StartTime.TimeOfDay.Ticks != googleRecurrencePattern.StartTime.TimeOfDay.Ticks) { result |= outlookRecurrencePattern.ApplyProperty(r => r.StartTime, googleRecurrencePattern.StartTime); } if (outlookRecurrencePattern.EndTime.TimeOfDay.Ticks != googleRecurrencePattern.EndTime.TimeOfDay.Ticks) { result |= outlookRecurrencePattern.ApplyProperty(r => r.EndTime, googleRecurrencePattern.EndTime); } if (googleRecurrencePattern.Count.HasValue) { result |= outlookRecurrencePattern.ApplyProperty(r => r.Occurrences, googleRecurrencePattern.Count.Value); } if (googleRecurrencePattern.Interval.HasValue) { result |= outlookRecurrencePattern.ApplyProperty(r => r.Interval, googleRecurrencePattern.Interval.Value); } return(result); } if (outlookCalendarItem.RecurrenceState == OlRecurrenceState.olApptNotRecurring) { outlookCalendarItem.ClearRecurrencePattern(); return(true); } return(false); }
/// <summary> /// Merges the with. /// </summary> /// <param name="outlookCalendarItem">The outlook calendar item.</param> /// <param name="googleCalendarItem">The google calendar item.</param> /// <returns>True if Changed.</returns> public static bool MergeWith(this AppointmentItem outlookCalendarItem, EventEntry googleCalendarItem) { var result = false; result |= outlookCalendarItem.ApplyProperty(c => c.Subject, googleCalendarItem.Title.Text); result |= outlookCalendarItem.ApplyProperty(c => c.Body, googleCalendarItem.Content.Content); result |= outlookCalendarItem.ApplyProperty(c => c.Location, googleCalendarItem.Locations.FirstOrInstance(l => l.Rel == Where.RelType.EVENT).ValueString); result |= outlookCalendarItem.ApplyProperty(c => c.BusyStatus, googleCalendarItem.EventTransparency.GetStatus()); result |= outlookCalendarItem.ApplyProperty(c => c.Sensitivity, googleCalendarItem.EventVisibility.GetStatus()); result |= outlookCalendarItem.MergeRecipients(googleCalendarItem.Participants); if (googleCalendarItem.Times.Any()) { var time = googleCalendarItem.Times.First(); result |= outlookCalendarItem.ApplyProperty(c => c.AllDayEvent, time.AllDay); result |= outlookCalendarItem.ApplyProperty(c => c.Start, time.StartTime); result |= outlookCalendarItem.ApplyProperty(c => c.End, time.EndTime); if (time.Reminders.Any(r => r.Method == Google.GData.Extensions.Reminder.ReminderMethod.alert)) { var reminder = time.Reminders.First(r => r.Method == Google.GData.Extensions.Reminder.ReminderMethod.alert); result |= outlookCalendarItem.ApplyProperty(c => c.ReminderSet, true); result |= outlookCalendarItem.ApplyProperty(c => c.ReminderOverrideDefault, true); result |= outlookCalendarItem.ApplyProperty(c => c.ReminderMinutesBeforeStart, reminder.GetMinutes()); } else { result |= outlookCalendarItem.ApplyProperty(c => c.ReminderSet, false); result |= outlookCalendarItem.ApplyProperty(c => c.ReminderOverrideDefault, false); } } result |= outlookCalendarItem.MergeRecurrence(googleCalendarItem.Recurrence); return(result); }