JustAProgrammer.TeamPilgrim.VisualStudio.Model.VersionControl.ShelveServiceModel.RefreshPendingChanges C# (CSharp) Method

RefreshPendingChanges() private method

private RefreshPendingChanges ( ) : void
return void
        private void RefreshPendingChanges()
        {
            this.Logger().Trace("RefreshPendingChanges");

            PendingChange[] currentPendingChanges;

            var filterItems = SolutionIsOpen && FilterSolution;
            string[] solutionFilePaths = null;

            if (filterItems)
            {
                try
                {
                    solutionFilePaths = teamPilgrimVsService.GetSolutionFilePaths();
                }
                catch (Exception)
                {
                    filterItems = false;
                }
            }

            if (filterItems
                ? teamPilgrimServiceModelProvider.TryGetPendingChanges(out currentPendingChanges, _workspaceServiceModel.Workspace, solutionFilePaths)
                : teamPilgrimServiceModelProvider.TryGetPendingChanges(out currentPendingChanges, _workspaceServiceModel.Workspace))
            {
                var intersections = PendingChanges
                    .Join(currentPendingChanges, model => model.Change.ItemId, change => change.ItemId, (model, change) => new { model, change })
                    .ToArray();

                var intersectedModels =
                    intersections
                    .Select(arg => arg.model)
                    .ToArray();

                var modelsToRemove = PendingChanges.Where(model => !intersectedModels.Contains(model)).ToArray();

                var modelsToAdd = currentPendingChanges
                    .Where(pendingChange => !intersectedModels.Select(model => model.Change.ItemId).Contains(pendingChange.ItemId))
                    .Select(change => new PendingChangeModel(change)).ToArray();

                _backgroundFunctionPreventDataUpdate = true;

                foreach (var intersection in intersections)
                {
                    intersection.model.Change = intersection.change;
                }

                foreach (var modelToAdd in modelsToAdd)
                {
                    PendingChanges.Add(modelToAdd);
                }

                foreach (var modelToRemove in modelsToRemove)
                {
                    PendingChanges.Remove(modelToRemove);
                }

                _backgroundFunctionPreventDataUpdate = false;

                PopulateSelectedPendingChangesSummary();
                EvaluateCheckInCommand.Execute(null);
            }
        }