public override void ParseWebsiteOnInterval(ApplicationDbContext dbContext, TimeSpan interval, CompetitionsCache competitionsCache) { _dbContext = dbContext; while (true) { var competitions = AddCompetitions(out bool hasHadErrors); if (competitions == null) { Thread.Sleep(TimeSpan.FromSeconds(10)); continue; } _dbContext.SaveChanges(); if (!hasHadErrors) { var expiredCompetitions = new List <Competition>(); var competitionsInDb = competitionsCache.Values.ToList(); foreach (var competition in competitionsInDb) { if (competitions.All(c => c.Name != competition.Name)) { expiredCompetitions.Add(competition); } } if (expiredCompetitions.Any()) { competitionsCache.BulkRemoveItem(expiredCompetitions); _dbContext.SaveChanges(); } } foreach (var competition in competitions) { try { AddTeamsForCompetition(competition); AddFinishedEventsForCompetition(competition); } catch (Exception ex) { Log.Logger.Error($"Error parsing teams or finished matches", ex); } } _dbContext.SaveChanges(); UpdateDisplayImageIds(); _dbContext.SaveChanges(); Console.WriteLine("Parsing Done"); Thread.Sleep(interval); } }
public CompetitionsChangeService(CompetitionsCache competitionsCache) { _competitionsCache = competitionsCache; _competitionsCache.OnItemRemoved = HandleRemovedCompetition; }