protected override void AddAccessPointsInternal(AppEntry appEntry, Feed feed, IEnumerable<AccessPoint> accessPoints)
{
#region Sanity checks
if (appEntry == null) throw new ArgumentNullException(nameof(appEntry));
if (feed == null) throw new ArgumentNullException(nameof(feed));
if (accessPoints == null) throw new ArgumentNullException(nameof(accessPoints));
if (appEntry.AccessPoints != null && ReferenceEquals(appEntry.AccessPoints.Entries, accessPoints)) throw new ArgumentException("Must not be equal to appEntry.AccessPoints.Entries", nameof(accessPoints));
#endregion
// Skip entries with mismatching hostname
if (appEntry.Hostname != null && !Regex.IsMatch(Environment.MachineName, appEntry.Hostname)) return;
if (appEntry.AccessPoints == null) appEntry.AccessPoints = new AccessPointList();
AppList.CheckForConflicts(accessPoints, appEntry);
accessPoints.ApplyWithRollback(
accessPoint => accessPoint.Apply(appEntry, feed, Handler, MachineWide),
accessPoint =>
{
// Don't perform rollback if the access point was already applied previously and this was only a refresh
if (!appEntry.AccessPoints.Entries.Contains(accessPoint))
accessPoint.Unapply(appEntry, MachineWide);
});
appEntry.AccessPoints.Entries.RemoveRange(accessPoints); // Replace pre-existing entries
appEntry.AccessPoints.Entries.AddRange(accessPoints);
appEntry.Timestamp = DateTime.UtcNow;
}