public void CacheRssResults(IIndexer indexer, IEnumerable<ReleaseInfo> releases) { lock (cache) { var trackerCache = cache.Where(c => c.TrackerId == indexer.ID).FirstOrDefault(); if (trackerCache == null) { trackerCache = new TrackerCache(); trackerCache.TrackerId = indexer.ID; trackerCache.TrackerName = indexer.DisplayName; cache.Add(trackerCache); } foreach(var release in releases.OrderByDescending(i=>i.PublishDate)) { var existingItem = trackerCache.Results.Where(i => i.Result.Guid == release.Guid).FirstOrDefault(); if (existingItem == null) { existingItem = new CachedResult(); existingItem.Created = DateTime.Now; trackerCache.Results.Add(existingItem); } existingItem.Result = release; } // Prune cache foreach(var tracker in cache) { tracker.Results = tracker.Results.OrderByDescending(i => i.Created).Take(MAX_RESULTS_PER_TRACKER).ToList(); } } }
public void CacheRssResults(string trackerId, IEnumerable<ReleaseInfo> releases) { lock (cache) { var trackerCache = cache.Where(c => c.TrackerId == trackerId).FirstOrDefault(); if (trackerCache == null) { trackerCache = new TrackerCache(); trackerCache.TrackerId = trackerId; cache.Add(trackerCache); } foreach(var release in releases.OrderByDescending(i=>i.PublishDate)) { // Skip old releases if(release.PublishDate-DateTime.Now> AGE_LIMIT) { continue; } var existingItem = trackerCache.Results.Where(i => i.Result.Guid == release.Guid).FirstOrDefault(); if (existingItem == null) { existingItem = new CachedResult(); existingItem.Created = DateTime.Now; trackerCache.Results.Add(existingItem); } existingItem.Result = release; } // Prune cache foreach(var tracker in cache) { tracker.Results = tracker.Results.OrderByDescending(i => i.Created).Take(MAX_RESULTS_PER_TRACKER).ToList(); } } }