public RefreshReleaseResults Execute(bool force) { var results = new RefreshReleaseResults(); results.LastRefresh = _lastDetails; if (force || DateTime.Now > _nextUpdate) { lock (_lock) { if (force || DateTime.Now > _nextUpdate) { // Trigger the repository to update the database var repositoryResults = _refreshRepositoryService.Execute(); // Transform the data into a format that the cache is expecting var groupedResult = repositoryResults.Results.GroupBy(x => x.Name, StringComparer.OrdinalIgnoreCase).ToDictionary(g => g.Key, g => g.Select(x => new ReleaseQueryItem { Created = x.Created, IsAbsoluteLatestVersion = x.IsAbsoluteLatestVersion, IsLatestVersion = x.IsLatestVersion, IsPrerelease = x.IsPrerelease, Name = x.Name, ReleaseNotes = x.ReleaseNotes, Version = x.Version, Description = x.Description, IconUrl = x.IconUrl, Authors = x.Authors, DownloadCount = x.DownloadCount, VersionDownloadCount = x.VersionDownloadCount }), StringComparer.OrdinalIgnoreCase); _queryProvider.UpdateCache(groupedResult); // Setup when we can update again _nextUpdate = DateTime.Now.AddMilliseconds(_settings.MinServiceTriggerInterval); // Copy over results var details = new RefreshReleaseResultsDetail(); details.ReleaseDetails = repositoryResults.ReleaseDetails; details.StatisticReleaseDetails = repositoryResults.StatisticReleaseDetails; details.TimeOccured = DateTime.Now; details.UpdateWasForced = force; details.NextUpdateCanOccur = _nextUpdate; results.UpdateOccured = true; results.LastRefresh = details; _lastDetails = details; } } } return(results); }
public RefreshReleaseResults Execute(bool force) { var results = new RefreshReleaseResults(); results.LastRefresh = _lastDetails; if (force || DateTime.Now > _nextUpdate) { lock (_lock) { if (force || DateTime.Now > _nextUpdate) { // Trigger the repository to update the database var repositoryResults = _refreshRepositoryService.Execute(); // Transform the data into a format that the cache is expecting var groupedResult = repositoryResults.Results.GroupBy(x => x.Name, StringComparer.OrdinalIgnoreCase).ToDictionary(g => g.Key, g => g.Select(x => new ReleaseQueryItem { Created = x.Created, IsAbsoluteLatestVersion = x.IsAbsoluteLatestVersion, IsLatestVersion = x.IsLatestVersion, IsPrerelease = x.IsPrerelease, Name = x.Name, ReleaseNotes = x.ReleaseNotes, Version = x.Version, Description = x.Description, IconUrl = x.IconUrl }), StringComparer.OrdinalIgnoreCase); _queryProvider.UpdateCache(groupedResult); // Setup when we can update again _nextUpdate = DateTime.Now.AddMilliseconds(_settings.MinServiceTriggerInterval); // Copy over results var details = new RefreshReleaseResultsDetail(); details.ReleaseDetails = repositoryResults.ReleaseDetails; details.StatisticReleaseDetails = repositoryResults.StatisticReleaseDetails; details.TimeOccured = DateTime.Now; details.UpdateWasForced = force; details.NextUpdateCanOccur = _nextUpdate; results.UpdateOccured = true; results.LastRefresh = details; _lastDetails = details; } } } return results; }