Пример #1
0
        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();
 }