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; }
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; }