/// <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; }
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); }
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 }); }
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); }
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); } }
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); }
/*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); }
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); }