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);
            }
        }
示例#3
0
        public CompetitionsChangeService(CompetitionsCache competitionsCache)
        {
            _competitionsCache = competitionsCache;

            _competitionsCache.OnItemRemoved = HandleRemovedCompetition;
        }