async private Task <IEnumerable <UserEvents.MergeRequestEvent> > updateAllOnTimer() { if (_updating) { traceDetailed("Cannot update the list"); await TaskUtils.WhileAsync(() => _updating); traceDetailed("List update has been skipped"); return(null); } IInternalCache oldDetails = _cache.Clone(); traceDetailed("Ready to update the list"); try { _updating = true; if (_mergeRequestListLoader != null) { await _mergeRequestListLoader.Load(); } MergeRequestListRefreshed?.Invoke(); } catch (BaseLoaderException ex) { ExceptionHandlers.Handle("Cannot update merge requests on timer", ex); return(null); } finally { _updating = false; traceDetailed("Updated the list"); } IEnumerable <UserEvents.MergeRequestEvent> updates = _checker.CheckForUpdates(oldDetails, _cache); int newMergeRequestsCount = updates.Count(x => x.AddedToCache); int mergeRequestsWithUpdatedCommitsCount = updates.Count(x => x.Commits); int mergeRequestsWithUpdatedLabelsCount = updates.Count(x => x.Labels); int mergeRequestsWithUpdatedDetailsCount = updates.Count(x => x.Details); int closedMergeRequestsCount = updates.Count(x => x.RemovedFromCache); if (newMergeRequestsCount > 0 || mergeRequestsWithUpdatedCommitsCount > 0 || mergeRequestsWithUpdatedLabelsCount > 0 || mergeRequestsWithUpdatedDetailsCount > 0 || closedMergeRequestsCount > 0) { traceInformation( String.Format( "Merge Request Updates: " + "New {0}, Updated commits {1}, Updated labels {2}, Updated details {3}, Closed {4}", newMergeRequestsCount, mergeRequestsWithUpdatedCommitsCount, mergeRequestsWithUpdatedLabelsCount, mergeRequestsWithUpdatedDetailsCount, closedMergeRequestsCount)); } return(updates); }
private void onListRefreshed() { _listRefreshTimestamp = DateTime.Now; _mergeRequestRefreshTimestamps.Clear(); MergeRequestListRefreshed?.Invoke(); }