Ejemplo n.º 1
0
        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));
            }
        }