示例#1
0
        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());
        }
示例#2
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);
        }
示例#3
0
        /* 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);
        }