public string ToiCalFormat() { var sb = new StringBuilder(); sb.AppendLine("BEGIN:VCALENDAR"); sb.AppendLine("PRODID:TeamLab Calendar"); sb.AppendLine("VERSION:2.0"); sb.AppendLine("METHOD:PUBLISH"); sb.AppendLine("CALSCALE:GREGORIAN"); sb.AppendLine(String.Format("X-WR-CALNAME:{0}", Name)); sb.AppendLine(String.Format("X-WR-TIMEZONE:{0}", TimeZoneConverter.WindowsTzId2OlsonTzId(TimeZone.Id))); //tz sb.AppendLine("BEGIN:VTIMEZONE"); sb.AppendLine(String.Format("TZID:{0}", TimeZoneConverter.WindowsTzId2OlsonTzId(TimeZone.Id))); sb.AppendLine("END:VTIMEZONE"); //events foreach (var e in LoadEvents(SecurityContext.CurrentAccount.ID, DateTime.MinValue, DateTime.MaxValue)) { if (e is BaseEvent && e.GetType().GetCustomAttributes(typeof(AllDayLongUTCAttribute), true).Length == 0) { (e as BaseEvent).TimeZone = TimeZone; } sb.AppendLine(e.ToiCalFormat()); } sb.Append("END:VCALENDAR"); return(sb.ToString()); }
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 BaseCalendar ConvertCalendar(Ical.Net.Calendar calandarObj) * { * if (calandarObj == null) return null; * * var icalendar = new iCalendar(AuthContext, TimeZoneConverter, TenantManager); * var result = new BusinessObjects.Calendar(AuthContext, TimeZoneConverter, icalendar, DataProvider); * * result.Name = string.IsNullOrEmpty(calandarObj.Name) * ? calandarObj.Properties.ContainsKey("X-WR-CALNAME") * ? calandarObj.Properties["X-WR-CALNAME"].Value.ToString() * : string.Empty * : calandarObj.Name; * * result.Description = calandarObj.Properties.ContainsKey("X-WR-CALDESC") * ? calandarObj.Properties["X-WR-CALDESC"].Value.ToString() * : string.Empty; * * var tzids = calandarObj.TimeZones.Select(x => x.TzId).Where(x => !string.IsNullOrEmpty(x)).ToList(); * * result.TimeZone = tzids.Any() * ? TimeZoneConverter.GetTimeZone(tzids.First()) * : (calandarObj.Properties.ContainsKey("X-WR-TIMEZONE") * ? TimeZoneConverter.GetTimeZone( * calandarObj.Properties["X-WR-TIMEZONE"].Value.ToString()) * : TimeZoneConverter.GetTimeZone(TenantManager.GetCurrentTenant().TimeZone)); * * return result; * }*/ public Ical.Net.Calendar ConvertCalendar(BaseCalendar calandarObj) { if (calandarObj == null) { return(null); } var result = new Ical.Net.Calendar(); result.Method = Ical.Net.CalendarMethods.Publish; result.Scale = Ical.Net.CalendarScales.Gregorian; result.Version = Ical.Net.LibraryMetadata.Version; result.ProductId = "-//Ascensio System//OnlyOffice Calendar//EN"; if (!string.IsNullOrEmpty(calandarObj.Name)) { result.AddProperty("X-WR-CALNAME", calandarObj.Name); } if (!string.IsNullOrEmpty(calandarObj.Description)) { result.AddProperty("X-WR-CALDESC", calandarObj.Description); } if (calandarObj.TimeZone == null) { calandarObj.TimeZone = TimeZoneConverter.GetTimeZone(TenantManager.GetCurrentTenant().TimeZone); } var olsonTzId = TimeZoneConverter.WindowsTzId2OlsonTzId(calandarObj.TimeZone.Id); var olsonTz = olsonTzId == calandarObj.TimeZone.Id ? calandarObj.TimeZone : TimeZoneInfo.CreateCustomTimeZone(olsonTzId, calandarObj.TimeZone.GetOffset(true), calandarObj.TimeZone.DisplayName, calandarObj.TimeZone.StandardName); result.AddTimeZone(Ical.Net.CalendarComponents.VTimeZone.FromSystemTimeZone(olsonTz)); result.AddProperty("X-WR-TIMEZONE", olsonTzId); return(result); }
public static DDay.iCal.IICalendar ConvertCalendar(BaseCalendar calandarObj) { if (calandarObj == null) { return(null); } var result = new DDay.iCal.iCalendar(); result.Method = DDay.iCal.CalendarMethods.Publish; result.Scale = DDay.iCal.CalendarScales.Gregorian; result.Version = DDay.iCal.CalendarVersions.v2_0; result.ProductID = "-//Ascensio System//OnlyOffice Calendar//EN"; if (!string.IsNullOrEmpty(calandarObj.Name)) { result.AddProperty("X-WR-CALNAME", calandarObj.Name); } if (!string.IsNullOrEmpty(calandarObj.Description)) { result.AddProperty("X-WR-CALDESC", calandarObj.Description); } if (calandarObj.TimeZone == null) { calandarObj.TimeZone = CoreContext.TenantManager.GetCurrentTenant().TimeZone; } var olsonTzId = TimeZoneConverter.WindowsTzId2OlsonTzId(calandarObj.TimeZone.Id); var olsonTz = olsonTzId == calandarObj.TimeZone.Id ? calandarObj.TimeZone : TimeZoneInfo.CreateCustomTimeZone(olsonTzId, calandarObj.TimeZone.BaseUtcOffset, calandarObj.TimeZone.DisplayName, calandarObj.TimeZone.StandardName); result.AddTimeZone(olsonTz); result.AddProperty("X-WR-TIMEZONE", olsonTzId); return(result); }