/// <summary> /// Processes VTimeZone parts (DayLight, Standard) /// </summary> /// <param name="zone"></param> /// <param name="tkn"></param> private void ProcessZonePart(CalendarTimeZone zone, ComponentToken tkn) { bool isDtStartValue = false; TimeZonePart part = new TimeZonePart(); CalendarEntry entry = GetNextEntry(); while (entry != null) { switch ((PropertyToken) GetToken(_properties, entry.Id)) { case PropertyToken.DtStart: part.StartDate = ProcessDate(entry, ref isDtStartValue); break; case PropertyToken.RDate: part.RecurDate = ProcessRDate(entry, part.RecurDate); break; case PropertyToken.RRule: part.RecurRule = ProcessRRule(entry); break; case PropertyToken.TzOffsetTo: part.OffsetTo = ProcessTzOffset(entry); break; case PropertyToken.End: ProcessZonePartEnd(entry, zone, part, tkn); return; } entry = GetNextEntry(); } ReportError(entry, "Expected \"END:" + _components[(int)tkn].Text.ToUpper() + "\""); }
private void ProcessZonePartEnd(CalendarEntry entry, CalendarTimeZone zone, TimeZonePart part, ComponentToken tkn) { if ((ComponentToken)GetToken(_components, entry.Value) != tkn) ReportError(entry, "Expected \"END:" + _components[(int)tkn].Text.ToUpper() + "\""); if (zone.Part == null) zone.Part = new List<TimeZonePart>(); zone.Part.Add(part); }
/// <summary> /// GetLastPartDate /// </summary> /// <param name="part"></param> /// <param name="date"></param> /// <returns></returns> private DateTime GetLastPartDate(TimeZonePart part, DateTime date) { DateTime pdate = part.StartDate; if (part.Appc == null) { CalendarModel model = new CalendarModel(); Appointment app = new Appointment(); app.StartTime = part.StartDate.Date; app.EndTime = app.StartTime; VEventData evData = new VEventData(); evData.RecurRule = part.RecurRule; ProcessEventEndEx(model, null, app, evData); part.Appc = new AppointmentSubsetCollection(model, part.StartDate, date); } if (part.Appc.Count > 0) { foreach (Appointment app in part.Appc) { if (app.StartTime > pdate && app.StartTime <= date) pdate = app.StartTime; } } return (pdate); }