Esempio n. 1
0
        /// <summary>
        /// Creates an <see cref="ExcludeMatchDateEntity"/> from an <see cref="Ical.Net.CalendarComponents.CalendarEvent"/> if plausibility criteria are met.
        /// The <see cref="ExcludeMatchDateEntity.DateFrom"/> and <see cref="ExcludeMatchDateEntity.DateTo"/> are in UTC.
        /// </summary>
        /// <param name="calendarEvent"></param>
        /// <param name="defaultTimeZoneId">The time zone to use, if the it is not included in the start and end date/time of the event.</param>
        /// <returns>Returns the <see cref="ExcludeMatchDateEntity"/> created from the <see cref="Ical.Net.CalendarComponents.CalendarEvent"/>.</returns>
        private static ExcludeMatchDateEntity CreateEntity(Ical.Net.CalendarComponents.CalendarEvent calendarEvent, string defaultTimeZoneId)
        {
            var excludeMatchDate = new ExcludeMatchDateEntity();
            
            if (calendarEvent.Start == null)
            {
                throw new ArgumentException($"Could not create {nameof(ExcludeMatchDateEntity)} from {nameof(Ical.Net.CalendarComponents.CalendarEvent)} Start={calendarEvent.Start}, End={calendarEvent.End}, Name={calendarEvent.Description}", nameof(calendarEvent));
            }

            calendarEvent.Start.TzId ??= defaultTimeZoneId;
            var start = calendarEvent.Start.AsUtc;

            DateTime end;
            if (calendarEvent.End != null)
            {
                calendarEvent.End.TzId ??= defaultTimeZoneId;
                end = calendarEvent.End.AsUtc;
            }
            else
            {
                end = start.Date;
            }

            // Swap if necessary
            if (start > end) (start, end) = (end, start);

            excludeMatchDate.DateFrom = start;
            excludeMatchDate.DateTo = end;
            excludeMatchDate.Reason = calendarEvent.Summary;

            return excludeMatchDate;
        }
Esempio n. 2
0
        public static BaseEvent ConvertEvent(Ical.Net.CalendarComponents.CalendarEvent eventObj)
        {
            if (eventObj == null)
            {
                return(null);
            }

            var result = new BusinessObjects.Event();

            result.Name = eventObj.Summary;

            result.Description = eventObj.Description;

            result.AllDayLong = eventObj.IsAllDay;

            result.Uid = eventObj.Uid;

            result.UtcStartDate = ToUtc(eventObj.Start);

            result.UtcEndDate = ToUtc(eventObj.End);

            result.UtcUpdateDate = ToUtc(eventObj.Created);

            var recurrenceRuleStr = string.Empty;

            if (eventObj.RecurrenceRules != null && eventObj.RecurrenceRules.Any())
            {
                var recurrenceRules = eventObj.RecurrenceRules.ToList();

                recurrenceRuleStr = SerializeRecurrencePattern(recurrenceRules.First());
            }

            result.RecurrenceRule = RecurrenceRule.Parse(recurrenceRuleStr);

            if (eventObj.ExceptionDates != null && eventObj.ExceptionDates.Any())
            {
                result.RecurrenceRule.ExDates = new List <RecurrenceRule.ExDate>();

                var exceptionDates = eventObj.ExceptionDates.ToList();

                foreach (var periodList in exceptionDates.First())
                {
                    var start = ToUtc(periodList.StartTime);

                    result.RecurrenceRule.ExDates.Add(new RecurrenceRule.ExDate
                    {
                        Date       = start,
                        isDateTime = start != start.Date
                    });
                }
            }

            result.Status = ConvertEventStatus(eventObj.Status);

            return(result);
        }
Esempio n. 3
0
        private CalendarEventViewModel CreateCalendarEventViewModel(IcalCalendarEvent item)
        {
            // Name.

            var fullname = item.Summary.Split(" - ")[0];
            var names    = fullname.Split(" ");

            // Duration.

            var durationSuffix = " days";

            if (item.Duration.Days < 2)
            {
                durationSuffix = (item.Duration.Days == 0) ? durationSuffix = ".5 day" : " day";
                if (item.Duration.Days == 0)
                {
                    durationSuffix += (item.Start.Value.TimeOfDay.Hours > 12) ? " (PM)" : " (AM)";
                }
            }

            // Returns.

            var returnDays = item.End.Value.Subtract(DateTime.Today).Days;
            var returns    = returnDays + " days";

            if (returnDays < 2)
            {
                returns = (returnDays == 0) ? "Tomorrow" : "1 day";
            }

            return(new CalendarEventViewModel
            {
                Uid = item.Uid,

                FullName = fullname,
                FirstName = names[0],
                LastName = names[1],

                Summary = item.Summary,
                Description = item.Description,

                Start = item.Start.Value,
                End = item.End.Value,
                Duration = item.Duration,

                IsAllDay = item.IsAllDay,

                StartFormatted = String.Format("{0:dd/MM/yyyy}", item.Start.Value),
                EndFormatted = String.Format("{0:dd/MM/yyyy}", item.End.Value),
                DurationFormatted = item.Duration.Days + durationSuffix,
                ReturnsFormatted = returns
            });
        }
Esempio n. 4
0
        public static Ical.Net.CalendarComponents.CalendarEvent ConvertEvent(BaseEvent eventObj, TimeZoneInfo eventTimeZoneInfo)
        {
            if (eventObj == null)
            {
                return(null);
            }

            var result = new Ical.Net.CalendarComponents.CalendarEvent();

            result.Summary = eventObj.Name;

            result.Location = string.Empty;

            result.Description = eventObj.Description;

            result.IsAllDay = eventObj.AllDayLong;

            result.Uid = eventObj.Uid;

            result.Start = new Ical.Net.DataTypes.CalDateTime(DateTime.SpecifyKind(eventObj.UtcStartDate, DateTimeKind.Utc), TimeZoneInfo.Utc.Id);

            result.End = new Ical.Net.DataTypes.CalDateTime(DateTime.SpecifyKind(eventObj.UtcEndDate, DateTimeKind.Utc), TimeZoneInfo.Utc.Id);

            result.Created = new Ical.Net.DataTypes.CalDateTime(DateTime.SpecifyKind(eventObj.UtcUpdateDate, DateTimeKind.Utc), TimeZoneInfo.Utc.Id);

            result.RecurrenceRules = new List <Ical.Net.DataTypes.RecurrencePattern>();

            var rrule = eventObj.RecurrenceRule.ToString(true);

            if (!string.IsNullOrEmpty(rrule))
            {
                var eventTz   = eventObj.TimeZone ?? eventTimeZoneInfo;
                var eventTzId = TimeZoneConverter.WindowsTzId2OlsonTzId(eventTz.Id);

                if (!eventObj.AllDayLong && eventObj.TimeZone != TimeZoneInfo.Utc)
                {
                    var start = result.Start.Add(eventTz.GetUtcOffset(result.Start.Value)).Value;
                    var end   = result.End.Add(eventTz.GetUtcOffset(result.End.Value)).Value;

                    result.Start = new Ical.Net.DataTypes.CalDateTime(start, eventTzId);
                    result.End   = new Ical.Net.DataTypes.CalDateTime(end, eventTzId);
                }

                result.RecurrenceRules.Add(new Ical.Net.DataTypes.RecurrencePattern(rrule));

                result.ExceptionDates = GetExceptionDates(eventObj, eventTz, eventTzId);
            }

            result.Status = ConvertEventStatus(eventObj.Status);

            return(result);
        }
Esempio n. 5
0
 public string SerializeEvent(Ical.Net.CalendarComponents.CalendarEvent eventObj)
 {
     try
     {
         var serializer = new Ical.Net.Serialization.EventSerializer();
         return(serializer.SerializeToString(eventObj));
     }
     catch (Exception ex)
     {
         Log.Error(ex);
         return(null);
     }
 }
Esempio n. 6
0
        private string generateIcal(List <AppointmentInfo> appointments)
        {
            var calendar = new Ical.Net.Calendar();

            calendar.AddTimeZone(new Ical.Net.CalendarComponents.VTimeZone("Europe/Berlin")); //bringt das was? Muss fast das ical checken...
            foreach (var appointment in appointments)
            {
                var newEvent = new Ical.Net.CalendarComponents.CalendarEvent();
                newEvent.Summary     = appointment.Name;
                newEvent.Location    = appointment.Location;
                newEvent.Start       = new Ical.Net.DataTypes.CalDateTime(appointment.DatStart);
                newEvent.End         = new Ical.Net.DataTypes.CalDateTime(appointment.DatEnd);
                newEvent.Description = appointment.Description;

                calendar.Events.Add(newEvent);
            }

            var calendarSerializer = new Ical.Net.Serialization.CalendarSerializer();
            var icalString         = calendarSerializer.SerializeToString(calendar);

            return(icalString);
        }
Esempio n. 7
0
        /*public BaseEvent ConvertEvent(Ical.Net.CalendarComponents.CalendarEvent eventObj)
         * {
         *  if (eventObj == null) return null;
         *
         *  var result = new BusinessObjects.Event(AuthContext, TimeZoneConverter, ICalendar, DataProvider);
         *
         *  result.Name = eventObj.Summary;
         *
         *  result.Description = eventObj.Description;
         *
         *  result.AllDayLong = eventObj.IsAllDay;
         *
         *  result.Uid = eventObj.Uid;
         *
         *  result.UtcStartDate = ToUtc(eventObj.Start);
         *
         *  result.UtcEndDate = ToUtc(eventObj.End);
         *
         *  result.UtcUpdateDate = ToUtc(eventObj.Created);
         *
         *  var recurrenceRuleStr = string.Empty;
         *
         *  if (eventObj.RecurrenceRules != null && eventObj.RecurrenceRules.Any())
         *  {
         *      var recurrenceRules = eventObj.RecurrenceRules.ToList();
         *
         *      recurrenceRuleStr = SerializeRecurrencePattern(recurrenceRules.First());
         *  }
         *
         *  result.RecurrenceRule = RecurrenceRule.Parse(recurrenceRuleStr);
         *
         *  if (eventObj.ExceptionDates != null && eventObj.ExceptionDates.Any())
         *  {
         *      result.RecurrenceRule.ExDates = new List<RecurrenceRule.ExDate>();
         *
         *      var exceptionDates = eventObj.ExceptionDates.ToList();
         *
         *      foreach (var periodList in exceptionDates.First())
         *      {
         *          var start = ToUtc(periodList.StartTime);
         *
         *          result.RecurrenceRule.ExDates.Add(new RecurrenceRule.ExDate
         *              {
         *                  Date = start,
         *                  isDateTime = start != start.Date
         *              });
         *      }
         *  }
         *
         *  result.Status = ConvertEventStatus(eventObj.Status);
         *
         *  return result;
         * }*/

        public Ical.Net.CalendarComponents.CalendarEvent ConvertEvent(BaseEvent eventObj)
        {
            if (eventObj == null)
            {
                return(null);
            }

            var result = new Ical.Net.CalendarComponents.CalendarEvent();

            result.Summary = eventObj.Name;

            result.Location = string.Empty;

            result.Description = eventObj.Description;

            result.IsAllDay = eventObj.AllDayLong;

            result.Uid = eventObj.Uid;

            result.Start = new Ical.Net.DataTypes.CalDateTime(DateTime.SpecifyKind(eventObj.UtcStartDate, DateTimeKind.Utc), TimeZoneInfo.Utc.Id);

            result.End = new Ical.Net.DataTypes.CalDateTime(DateTime.SpecifyKind(eventObj.UtcEndDate, DateTimeKind.Utc), TimeZoneInfo.Utc.Id);

            result.Created = new Ical.Net.DataTypes.CalDateTime(DateTime.SpecifyKind(eventObj.UtcUpdateDate, DateTimeKind.Utc), TimeZoneInfo.Utc.Id);

            result.RecurrenceRules = new List <Ical.Net.DataTypes.RecurrencePattern>();

            var rrule = eventObj.RecurrenceRule.ToString(true);

            if (!string.IsNullOrEmpty(rrule))
            {
                result.RecurrenceRules.Add(new Ical.Net.DataTypes.RecurrencePattern(rrule));
            }

            result.Status = ConvertEventStatus(eventObj.Status);

            return(result);
        }
Esempio n. 8
0
        public Ical.Net.CalendarComponents.CalendarEvent CreateEvent(string name, string description, DateTime startUtcDate, DateTime endUtcDate, string repeatType, bool isAllDayLong, EventStatus status)
        {
            var evt = new Ical.Net.CalendarComponents.CalendarEvent
            {
                Summary         = name,
                Location        = string.Empty,
                Description     = description,
                IsAllDay        = isAllDayLong,
                DtStamp         = new Ical.Net.DataTypes.CalDateTime(DateTime.SpecifyKind(DateTime.UtcNow, DateTimeKind.Utc), TimeZoneInfo.Utc.Id),
                Start           = new Ical.Net.DataTypes.CalDateTime(DateTime.SpecifyKind(startUtcDate, DateTimeKind.Utc), TimeZoneInfo.Utc.Id),
                End             = new Ical.Net.DataTypes.CalDateTime(DateTime.SpecifyKind(endUtcDate, DateTimeKind.Utc), TimeZoneInfo.Utc.Id),
                RecurrenceRules = new List <Ical.Net.DataTypes.RecurrencePattern>(),
                Status          = ConvertEventStatus(status)
            };

            var rrule = RecurrenceRule.Parse(repeatType).ToString(true);

            if (!string.IsNullOrEmpty(rrule))
            {
                evt.RecurrenceRules.Add(new Ical.Net.DataTypes.RecurrencePattern(rrule));
            }

            return(evt);
        }