Ejemplo n.º 1
0
        /// <summary>
        /// Merges the with.
        /// </summary>
        /// <param name="googleCalendarItem">The google calendar item.</param>
        /// <param name="outlookCalendarItem">The outlook calendar item.</param>
        /// <returns>True if Changed.</returns>
        public static bool MergeWith(this EventEntry googleCalendarItem, AppointmentItem outlookCalendarItem)
        {
            var result = false;

            result |= googleCalendarItem.Title.ApplyProperty(g => g.Text, outlookCalendarItem.Subject);
            result |= googleCalendarItem.Content.ApplyProperty(g => g.Content, outlookCalendarItem.Body);

            if (googleCalendarItem.EventTransparency == null)
            {
                googleCalendarItem.EventTransparency = new EventEntry.Transparency();
            }
            result |= googleCalendarItem.EventTransparency.ApplyProperty(g => g.Value, outlookCalendarItem.BusyStatus.GetStatus());

            if (googleCalendarItem.EventVisibility == null)
            {
                googleCalendarItem.EventVisibility = new EventEntry.Visibility();
            }
            result |= googleCalendarItem.EventVisibility.ApplyProperty(g => g.Value, outlookCalendarItem.Sensitivity.GetStatus());

            result |= googleCalendarItem.Locations.Merge(outlookCalendarItem.Location);
            result |= googleCalendarItem.Participants.Merge(outlookCalendarItem);

            if (outlookCalendarItem.RecurrenceState == OlRecurrenceState.olApptNotRecurring)
            {
                When time = googleCalendarItem.Times.FirstOrInstance();
                if (!googleCalendarItem.Times.Any())
                {
                    googleCalendarItem.Times.Add(time);
                }

                result |= time.ApplyProperty(t => t.AllDay, outlookCalendarItem.AllDayEvent);
                result |= time.ApplyProperty(t => t.StartTime, outlookCalendarItem.Start);
                result |= time.ApplyProperty(t => t.EndTime, outlookCalendarItem.End);

                if (outlookCalendarItem.ReminderSet)
                {
                    Google.GData.Extensions.Reminder reminder = time.Reminders.FirstOrInstance(t => t.Method == Google.GData.Extensions.Reminder.ReminderMethod.alert);
                    var timespan = TimeSpan.FromMinutes(outlookCalendarItem.ReminderMinutesBeforeStart);
                    result |= reminder.ApplyProperty(r => r.Method, Google.GData.Extensions.Reminder.ReminderMethod.alert);
                    result |= reminder.ApplyProperty(r => r.Minutes, timespan.Minutes);
                    result |= reminder.ApplyProperty(r => r.Hours, timespan.Hours);
                    result |= reminder.ApplyProperty(r => r.Days, timespan.Days);
                }
            }
            else
            {
                if (googleCalendarItem.Recurrence == null)
                {
                    googleCalendarItem.Recurrence = new Recurrence();
                }
                result |= googleCalendarItem.Recurrence.ApplyProperty(r => r.Value, RecurrenceSerializer.Serialize(outlookCalendarItem.GetRecurrencePattern(), outlookCalendarItem.Start, outlookCalendarItem.AllDayEvent));
            }

            return(result);
        }