/// <summary> /// Deserializes the specified recurrence. /// </summary> /// <param name="recurrence">The recurrence.</param> /// <returns>The Recurrence Data.</returns> public static RecurrenceData Deserialize(string recurrence) { var result = new RecurrenceData(); if (StartRegex.IsMatch(recurrence)) { var dateString = StartRegex.Match(recurrence).Groups["Date"].Value; bool allDayEvent; DateTime dateTime; if(dateString.ToDate(out dateTime, out allDayEvent)) { result.StartTime = dateTime; result.AllDayEvent = allDayEvent; } } if (EndRegex.IsMatch(recurrence)) { var dateString = EndRegex.Match(recurrence).Groups["Date"].Value; bool allDayEvent; DateTime dateTime; if (dateString.ToDate(out dateTime, out allDayEvent)) { result.EndTime = dateTime; result.AllDayEvent = allDayEvent; } } if (RuleRegex.IsMatch(recurrence)) { var ruleString = RuleRegex.Match(recurrence).Groups["Rule"].Value; var rules = ruleString.Split(';'); foreach (var rule in rules) { if (FrequenceRegex.IsMatch(rule)) { var value = FrequenceRegex.Match(rule).Groups["Value"].Value; result.RecurrenceType = GetRecurrenceType(value); } if (ByDayRegex.IsMatch(rule)) { var value = ByDayRegex.Match(rule).Groups["Value"].Value; int integer; if (int.TryParse(value, out integer)) { result.DayOfMonth = integer; } } if (ByWeekDayRegex.IsMatch(rule)) { var value = ByWeekDayRegex.Match(rule).Groups["Value"].Value; result.DayOfWeek = GetDayOfWeek(value); } if (ByMonthRegex.IsMatch(rule)) { var value = ByMonthRegex.Match(rule).Groups["Value"].Value; int integer; if (int.TryParse(value, out integer)) { result.MonthOfYear = integer; } } if (IntervalRegex.IsMatch(rule)) { var value = IntervalRegex.Match(rule).Groups["Value"].Value; int integer; if (int.TryParse(value, out integer)) { result.Interval = integer; } } if (UntilRegex.IsMatch(rule)) { var dateString = UntilRegex.Match(rule).Groups["Date"].Value; bool allDayEvent; DateTime dateTime; if (dateString.ToDate(out dateTime, out allDayEvent)) { result.EndPattern = dateTime; } } else if (CountRegex.IsMatch(rule)) { var value = CountRegex.Match(rule).Groups["Value"].Value; int integer; if (int.TryParse(value, out integer)) { result.Count = integer; } } } } return result; }
/// <summary> /// Deserializes the specified recurrence. /// </summary> /// <param name="recurrence">The recurrence.</param> /// <returns>The Recurrence Data.</returns> public static RecurrenceData Deserialize(string recurrence) { var result = new RecurrenceData(); if (StartRegex.IsMatch(recurrence)) { var dateString = StartRegex.Match(recurrence).Groups["Date"].Value; bool allDayEvent; DateTime dateTime; if (dateString.ToDate(out dateTime, out allDayEvent)) { result.StartTime = dateTime; result.AllDayEvent = allDayEvent; } } if (EndRegex.IsMatch(recurrence)) { var dateString = EndRegex.Match(recurrence).Groups["Date"].Value; bool allDayEvent; DateTime dateTime; if (dateString.ToDate(out dateTime, out allDayEvent)) { result.EndTime = dateTime; result.AllDayEvent = allDayEvent; } } if (RuleRegex.IsMatch(recurrence)) { var ruleString = RuleRegex.Match(recurrence).Groups["Rule"].Value; var rules = ruleString.Split(';'); foreach (var rule in rules) { if (FrequenceRegex.IsMatch(rule)) { var value = FrequenceRegex.Match(rule).Groups["Value"].Value; result.RecurrenceType = GetRecurrenceType(value); } if (ByDayRegex.IsMatch(rule)) { var value = ByDayRegex.Match(rule).Groups["Value"].Value; int integer; if (int.TryParse(value, out integer)) { result.DayOfMonth = integer; } } if (ByWeekDayRegex.IsMatch(rule)) { var value = ByWeekDayRegex.Match(rule).Groups["Value"].Value; result.DayOfWeek = GetDayOfWeek(value); } if (ByMonthRegex.IsMatch(rule)) { var value = ByMonthRegex.Match(rule).Groups["Value"].Value; int integer; if (int.TryParse(value, out integer)) { result.MonthOfYear = integer; } } if (IntervalRegex.IsMatch(rule)) { var value = IntervalRegex.Match(rule).Groups["Value"].Value; int integer; if (int.TryParse(value, out integer)) { result.Interval = integer; } } if (UntilRegex.IsMatch(rule)) { var dateString = UntilRegex.Match(rule).Groups["Date"].Value; bool allDayEvent; DateTime dateTime; if (dateString.ToDate(out dateTime, out allDayEvent)) { result.EndPattern = dateTime; } } else if (CountRegex.IsMatch(rule)) { var value = CountRegex.Match(rule).Groups["Value"].Value; int integer; if (int.TryParse(value, out integer)) { result.Count = integer; } } } } return(result); }