ZeroInstall.DesktopIntegration.ViewModel.IntegrationState.CollectCommandAccessPointChanges C# (CSharp) Method

CollectCommandAccessPointChanges() private method

private CollectCommandAccessPointChanges ( ICollection toAdd, ICollection toRemove ) : void
toAdd ICollection
toRemove ICollection
return void
        private void CollectCommandAccessPointChanges(ICollection<AccessPoint> toAdd, ICollection<AccessPoint> toRemove)
        {
            // Build lists with current integration state
            var currentMenuEntries = new List<MenuEntry>();
            var currentDesktopIcons = new List<DesktopIcon>();
            var currentSendTo = new List<SendTo>();
            var currentAliases = new List<AppAlias>();
            var currentAutoStarts = new List<AutoStart>();
            if (AppEntry.AccessPoints != null)
            {
                new PerTypeDispatcher<AccessPoint>(ignoreMissing: true)
                {
                    (Action<MenuEntry>)currentMenuEntries.Add,
                    (Action<DesktopIcon>)currentDesktopIcons.Add,
                    (Action<SendTo>)currentSendTo.Add,
                    (Action<AppAlias>)currentAliases.Add,
                    (Action<AutoStart>)currentAutoStarts.Add
                }.Dispatch(AppEntry.AccessPoints.Entries);
            }

            // Remove incomplete entries
            MenuEntries.RemoveAll(x => string.IsNullOrEmpty(x.Name));
            DesktopIcons.RemoveAll(x => string.IsNullOrEmpty(x.Name));
            SendTo.RemoveAll(x => string.IsNullOrEmpty(x.Name));
            Aliases.RemoveAll(x => string.IsNullOrEmpty(x.Name));
            AutoStarts.RemoveAll(x => string.IsNullOrEmpty(x.Name));

            // Determine differences between current and desired state
            Merge.TwoWay(theirs: MenuEntries, mine: currentMenuEntries, added: toAdd.Add, removed: toRemove.Add);
            Merge.TwoWay(theirs: DesktopIcons, mine: currentDesktopIcons, added: toAdd.Add, removed: toRemove.Add);
            Merge.TwoWay(theirs: SendTo, mine: currentSendTo, added: toAdd.Add, removed: toRemove.Add);
            Merge.TwoWay(theirs: Aliases, mine: currentAliases, added: toAdd.Add, removed: toRemove.Add);
            Merge.TwoWay(theirs: AutoStarts, mine: currentAutoStarts, added: toAdd.Add, removed: toRemove.Add);
        }
    }