/// <summary> /// Evaulates the RRule component, and adds each specified Period /// to the <see cref="Periods"/> collection. /// </summary> /// <param name="FromDate">The beginning date of the range to evaluate.</param> /// <param name="ToDate">The end date of the range to evaluate.</param> virtual protected void EvaluateRRule(IDateTime referenceDate, DateTime periodStart, DateTime periodEnd, bool includeReferenceDateInResults) { // Handle RRULEs if (Recurrable.RecurrenceRules != null && Recurrable.RecurrenceRules.Count > 0) { foreach (IRecurrencePattern rrule in Recurrable.RecurrenceRules) { IEvaluator evaluator = rrule.GetService(typeof(IEvaluator)) as IEvaluator; if (evaluator != null) { IList<IPeriod> periods = evaluator.Evaluate(referenceDate, periodStart, periodEnd, includeReferenceDateInResults); foreach (IPeriod p in periods) { if (!Periods.Contains(p)) Periods.Add(p); } } } } else if (includeReferenceDateInResults) { // If no RRULEs were found, then we still need to add // the initial reference date to the results. IPeriod p = new Period(referenceDate.Copy<IDateTime>()); if (!Periods.Contains(p)) Periods.Add(p); } }
public override IList<IPeriod> Evaluate(IDateTime referenceDate, DateTime periodStart, DateTime periodEnd, bool includeReferenceDateInResults) { Dictionary<IPeriod , bool> periodLookup = new Dictionary<IPeriod, bool>(); List<IPeriod> periods = new List<IPeriod>(); if (includeReferenceDateInResults) { IPeriod p = new Period(referenceDate); if (!periodLookup.ContainsKey(p)) { periodLookup.Add(p , true); periods.Add(p); } } if (periodEnd < periodStart) return periods; foreach (IPeriod p in m_PeriodList) { if (!periodLookup.ContainsKey(p)) { periodLookup.Add(p, true); periods.Add(p); } } return periods; }
public override HashSet<IPeriod> Evaluate(IDateTime referenceDate, DateTime periodStart, DateTime periodEnd, bool includeReferenceDateInResults) { var periods = new HashSet<IPeriod>(); if (includeReferenceDateInResults) { IPeriod p = new Period(referenceDate); if (!periods.Contains(p)) { periods.Add(p); } } if (periodEnd < periodStart) return periods; periods.UnionWith(m_PeriodList); return periods; }
public override IList<IPeriod> Evaluate(IDateTime referenceDate, DateTime periodStart, DateTime periodEnd, bool includeReferenceDateInResults) { List<IPeriod> periods = new List<IPeriod>(); if (includeReferenceDateInResults) { IPeriod p = new Period(referenceDate); if (!periods.Contains(p)) periods.Add(p); } if (periodEnd < periodStart) return periods; foreach (IPeriod p in m_PeriodList) { if (!periods.Contains(p)) periods.Add(p); } return periods; }
/// <summary> /// Gets the calendar content from controls. /// </summary> /// <returns></returns> internal string GetCalendarContentFromControls() { EnsureChildControls(); if ( _dpStartDateTime.SelectedDateTimeIsBlank ) { return iCalendarContentEmptyEvent; } DDay.iCal.Event calendarEvent = new DDay.iCal.Event(); calendarEvent.DTStart = new DDay.iCal.iCalDateTime( _dpStartDateTime.SelectedDateTime.Value ); calendarEvent.DTStart.HasTime = true; int durationHours = TextBoxToPositiveInteger( _tbDurationHours, 0 ); int durationMins = TextBoxToPositiveInteger( _tbDurationMinutes, 0 ); if ( (durationHours == 0 && durationMins == 0) || this.ShowDuration == false ) { // make a one second duration since a zero duration won't be included in occurrences calendarEvent.Duration = new TimeSpan( 0, 0, 1); } else { calendarEvent.Duration = new TimeSpan( durationHours, durationMins, 0 ); } if ( _radRecurring.Checked ) { if ( _radSpecificDates.Checked ) { #region specific dates PeriodList recurrenceDates = new PeriodList(); List<string> dateStringList = _hfSpecificDateListValues.Value.Split( new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries ).ToList(); foreach ( var dateString in dateStringList ) { DateTime newDate; if ( DateTime.TryParse( dateString, out newDate ) ) { recurrenceDates.Add( new iCalDateTime( newDate.Date ) ); } } calendarEvent.RecurrenceDates.Add( recurrenceDates ); #endregion } else { if ( _radDaily.Checked ) { #region daily if ( _radDailyEveryXDays.Checked ) { RecurrencePattern rruleDaily = new RecurrencePattern( FrequencyType.Daily ); rruleDaily.Interval = TextBoxToPositiveInteger( _tbDailyEveryXDays ); calendarEvent.RecurrenceRules.Add( rruleDaily ); } else { // NOTE: Daily Every Weekday/Weekend Day is actually Weekly on Day(s)OfWeek in iCal RecurrencePattern rruleWeekly = new RecurrencePattern( FrequencyType.Weekly ); if ( _radDailyEveryWeekday.Checked ) { rruleWeekly.ByDay.Add( new WeekDay( DayOfWeek.Monday ) ); rruleWeekly.ByDay.Add( new WeekDay( DayOfWeek.Tuesday ) ); rruleWeekly.ByDay.Add( new WeekDay( DayOfWeek.Wednesday ) ); rruleWeekly.ByDay.Add( new WeekDay( DayOfWeek.Thursday ) ); rruleWeekly.ByDay.Add( new WeekDay( DayOfWeek.Friday ) ); } else if ( _radDailyEveryWeekendDay.Checked ) { rruleWeekly.ByDay.Add( new WeekDay( DayOfWeek.Saturday ) ); rruleWeekly.ByDay.Add( new WeekDay( DayOfWeek.Sunday ) ); } calendarEvent.RecurrenceRules.Add( rruleWeekly ); } #endregion } else if ( _radWeekly.Checked ) { #region weekly RecurrencePattern rruleWeekly = new RecurrencePattern( FrequencyType.Weekly ); rruleWeekly.Interval = TextBoxToPositiveInteger( _tbWeeklyEveryX ); if ( _cbWeeklySunday.Checked ) { rruleWeekly.ByDay.Add( new WeekDay( DayOfWeek.Sunday ) ); } if ( _cbWeeklyMonday.Checked ) { rruleWeekly.ByDay.Add( new WeekDay( DayOfWeek.Monday ) ); } if ( _cbWeeklyTuesday.Checked ) { rruleWeekly.ByDay.Add( new WeekDay( DayOfWeek.Tuesday ) ); } if ( _cbWeeklyWednesday.Checked ) { rruleWeekly.ByDay.Add( new WeekDay( DayOfWeek.Wednesday ) ); } if ( _cbWeeklyThursday.Checked ) { rruleWeekly.ByDay.Add( new WeekDay( DayOfWeek.Thursday ) ); } if ( _cbWeeklyFriday.Checked ) { rruleWeekly.ByDay.Add( new WeekDay( DayOfWeek.Friday ) ); } if ( _cbWeeklySaturday.Checked ) { rruleWeekly.ByDay.Add( new WeekDay( DayOfWeek.Saturday ) ); } calendarEvent.RecurrenceRules.Add( rruleWeekly ); #endregion } else if ( _radMonthly.Checked ) { #region monthly RecurrencePattern rruleMonthly = new RecurrencePattern( FrequencyType.Monthly ); if ( _radMonthlyDayX.Checked ) { rruleMonthly.ByMonthDay.Add( TextBoxToPositiveInteger( _tbMonthlyDayX ) ); rruleMonthly.Interval = TextBoxToPositiveInteger( _tbMonthlyXMonths ); } else if ( _radMonthlyNth.Checked ) { WeekDay monthWeekDay = new WeekDay(); monthWeekDay.Offset = _ddlMonthlyNth.SelectedValue.AsIntegerOrNull() ?? 1; monthWeekDay.DayOfWeek = (DayOfWeek)( _ddlMonthlyDayName.SelectedValue.AsIntegerOrNull() ?? 1 ); rruleMonthly.ByDay.Add( monthWeekDay ); } calendarEvent.RecurrenceRules.Add( rruleMonthly ); #endregion } } } if ( calendarEvent.RecurrenceRules.Count > 0 ) { IRecurrencePattern rrule = calendarEvent.RecurrenceRules[0]; // Continue Until if ( _radEndByNone.Checked ) { // intentionally blank } else if ( _radEndByDate.Checked ) { rrule.Until = _dpEndBy.SelectedDate.HasValue ? _dpEndBy.SelectedDate.Value : DateTime.MaxValue; } else if ( _radEndByOccurrenceCount.Checked ) { rrule.Count = TextBoxToPositiveInteger( _tbEndByOccurrenceCount, 0 ); } } // Exclusions List<string> dateRangeStringList = _hfExclusionDateRangeListValues.Value.Split( new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries ).ToList(); PeriodList exceptionDates = new PeriodList(); foreach ( string dateRangeString in dateRangeStringList ) { var dateRangeParts = dateRangeString.Split( new char[] { '-' }, StringSplitOptions.RemoveEmptyEntries ); if ( dateRangeParts.Count() == 2 ) { DateTime beginDate; DateTime endDate; if ( DateTime.TryParse( dateRangeParts[0], out beginDate ) ) { if ( DateTime.TryParse( dateRangeParts[1], out endDate ) ) { DateTime dateToAdd = beginDate.Date; while ( dateToAdd <= endDate ) { Period periodToAdd = new Period( new iCalDateTime( dateToAdd ) ); if ( !exceptionDates.Contains( periodToAdd ) ) { exceptionDates.Add( periodToAdd ); } dateToAdd = dateToAdd.AddDays( 1 ); } } } } } if ( exceptionDates.Count > 0 ) { calendarEvent.ExceptionDates.Add( exceptionDates ); } DDay.iCal.iCalendar calendar = new iCalendar(); calendar.Events.Add( calendarEvent ); iCalendarSerializer s = new iCalendarSerializer( calendar ); return s.SerializeToString( calendar ); }
public override IList<IPeriod> Evaluate(IDateTime referenceDate, DateTime periodStart, DateTime periodEnd, bool includeReferenceDateInResults) { // Create a recurrence pattern suitable for use during evaluation. IRecurrencePattern pattern = ProcessRecurrencePattern(referenceDate); // Enforce evaluation restrictions on the pattern. EnforceEvaluationRestrictions(pattern); Periods.Clear(); foreach (DateTime dt in GetDates(referenceDate, periodStart, periodEnd, -1, pattern, includeReferenceDateInResults)) { // Turn each resulting date/time into an IDateTime and associate it // with the reference date. IDateTime newDt = new iCalDateTime(dt, referenceDate.TZID); // NOTE: fixes bug #2938007 - hasTime missing newDt.HasTime = referenceDate.HasTime; newDt.AssociateWith(referenceDate); // Create a period from the new date/time. IPeriod p = new Period(newDt); if (!Periods.Contains(p)) Periods.Add(p); } return Periods; }
public int CompareTo(AlarmOccurrence other) { return(Period.CompareTo(other.Period)); }