Defines the RecurrenceData class.
        /// <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;
        }
Ejemplo n.º 2
0
        /// <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);
        }