private void CreateAppointment( IntervalTree <Appointment> result, ExchangeUser user, OlsonTimeZone srcTimeZone, EventEntry googleAppsEvent) { Appointment appt = new Appointment(); if (googleAppsEvent.Times != null && googleAppsEvent.Times.Count > 0) { When eventTime = googleAppsEvent.Times[0]; appt.StartDate = DateTime.SpecifyKind(eventTime.StartTime.ToUniversalTime(), DateTimeKind.Unspecified); appt.EndDate = DateTime.SpecifyKind(eventTime.EndTime.ToUniversalTime(), DateTimeKind.Unspecified); log.DebugFormat("Create - [{0}] {1}", appt.Range, appt.Range.Start.Kind); appt.AllDayEvent = googleAppsEvent.Times[0].AllDay; } if (ConfigCache.SyncAppointmentDetails && googleAppsEvent.Locations != null && googleAppsEvent.Locations.Count > 0) { appt.Location = googleAppsEvent.Locations[0].ValueString ?? string.Empty; } else { appt.Location = String.Empty; } string subject = ConfigCache.PlaceHolderMessage; if (ConfigCache.SyncAppointmentDetails) { subject += ": " + ConversionsUtil.SafeGetText(googleAppsEvent.Title); if (subject.Length > 255) { subject = subject.Remove(255); } } appt.Subject = subject; if (ConfigCache.SyncAppointmentDetails) { appt.Body = ConversionsUtil.SafeGetContent(googleAppsEvent.Content); } appt.MeetingStatus = ConversionsUtil.ConvertGoogleEventStatus(googleAppsEvent.Status); appt.BusyStatus = ConversionsUtil.GetUserStatusForEvent(user, googleAppsEvent); appt.Created = DateUtil.NowUtc; appt.InstanceType = InstanceType.Single; AssignOwnership(appt); result.Insert(appt.Range, appt); }
private static void ConvertEventToFreeBusy( ExchangeUser user, EventEntry googleAppsEvent, DateTimeRange coveredRange, List <DateTimeRange> busyTimes, List <DateTimeRange> tentativeTimes) { DateTime startDate = DateTime.MinValue; DateTime endDate = DateTime.MinValue; DateTime utcStartDate = DateTime.MinValue; DateTime utcEndDate = DateTime.MinValue; BusyStatus userStatus = BusyStatus.Free; userStatus = ConversionsUtil.GetUserStatusForEvent(user, googleAppsEvent); // If the user is free, do not put this meeting in the free busy if (userStatus == BusyStatus.Free) { return; } startDate = googleAppsEvent.Times[0].StartTime; utcStartDate = DateTime.SpecifyKind(startDate.ToUniversalTime(), DateTimeKind.Unspecified); endDate = googleAppsEvent.Times[0].EndTime; utcEndDate = DateTime.SpecifyKind(endDate.ToUniversalTime(), DateTimeKind.Unspecified); if (utcStartDate < coveredRange.Start) { coveredRange.Start = utcStartDate; } if (utcEndDate > coveredRange.End) { coveredRange.End = utcEndDate; } if (_log.IsDebugEnabled) { _log.DebugFormat("Read GData FB event {0} - {1}", startDate, endDate); _log.DebugFormat("Write FB event {0} - {1} in UTC", utcStartDate, utcEndDate); _log.DebugFormat("The FB status is {0}", userStatus.ToString()); } if (userStatus == BusyStatus.Tentative) { tentativeTimes.Add(new DateTimeRange(utcStartDate, utcEndDate)); } else { Debug.Assert(userStatus == BusyStatus.Busy); busyTimes.Add(new DateTimeRange(utcStartDate, utcEndDate)); } }