示例#1
0
        public IEnumerable<Week> ParseWeeks(Calendar calendar, DateTime start, DateTime end)
        {
            AssertObject.IsNotNull(calendar, "calendar");

            var weeks = new List<Week>();
            var uri = new Uri(calendar.Url);
            var collection = iCalendar.LoadFromUri(uri);

            if (!collection.Any()) return weeks;

            var icalendar = collection.First();
            var occurrences = icalendar.GetOccurrences(start, end);

            if (!occurrences.Any()) return weeks;

            foreach (var occurrence in occurrences)
            {
                var rc = occurrence.Source as IRecurringComponent;

                if (rc != null)
                {
                    var weekNumber = ExtractWeekNumber(rc);
                    Week week;

                    if (WeekAlreadyExists(weeks, weekNumber))
                    {
                        week = weeks.First(w => w.Number == weekNumber);
                    }
                    else
                    {
                        week = new Week()
                            {
                                Number = weekNumber,
                                Date = occurrence.Period.StartTime.Local
                            };
                    }

                    var teamNames = rc.Summary.Trim().Split(new[] { " - " }, StringSplitOptions.RemoveEmptyEntries);

                    week.Fixtures.Add(new Fixture()
                        {
                            AwayTeam = FindTeam(teamNames[1]),
                            Date = rc.Start.Date,
                            HomeTeam = FindTeam(teamNames[0]),
                        });

                    weeks.Add(week);
                }
            }

            return weeks;
        }
示例#2
0
        public Calendar Parse(string name, string url)
        {
            var uri = new Uri(url);
            var collection = iCalendar.LoadFromUri(uri);

            if (!collection.Any())
            {
                return null;
            }

            var icalendar = collection.First();
            var occurrences = icalendar.GetOccurrences(DateTime.Today.AddDays(-7), DateTime.Today.AddMonths(12));

            if (!occurrences.Any())
            {
                return null;
            }

            var calendar = new Calendar() { Name = name, Url = url };
            var season = new Season() { Name = GetNameFromUri(url) };

            foreach (var occurrence in occurrences)
            {
                var rc = occurrence.Source as IRecurringComponent;

                if (rc != null)
                {
                    var weekNumber = GetWeekNumber(rc);
                    Week week;

                    if (WeekAlreadyExists(season.Weeks, weekNumber))
                    {
                        week = season.Weeks.First(w => w.Number == weekNumber);
                    }
                    else
                    {
                        week = new Week()
                        {
                            Number = weekNumber,
                            Date = occurrence.Period.StartTime.Local
                        };

                        season.Weeks.Add(week);
                    }

                    var teamNames = rc.Summary.Trim().Split(new[] { " - " }, StringSplitOptions.RemoveEmptyEntries);

                    week.Fixtures.Add(new Fixture()
                    {
                        AwayTeam = FindTeam(teamNames[1]),
                        Date = rc.Start.Date,
                        HomeTeam = FindTeam(teamNames[0]),
                    });
                }
            }

            season.FirstWeekDate = season.Weeks.First().Date;
            season.LastWeekDate = season.Weeks.Last().Date;

            calendar.Seasons.Add(season);

            return calendar;
        }