public List <ReferenceModel> ReconcileReferences(IAddRemoveReferencesModel model) { if (model?.NewReferences is null || !model.NewReferences.Any()) { return(new List <ReferenceModel>()); } return(ReconcileReferences(model, model.NewReferences.ToList())); }
//TODO test for simple adds. public List <ReferenceModel> ReconcileReferences(IAddRemoveReferencesModel model, List <ReferenceModel> allReferences) { if (model is null || allReferences is null || !allReferences.Any()) { return(new List <ReferenceModel>()); } var project = _projectsProvider.Project(model.Project.ProjectId); if (project == null) { return(new List <ReferenceModel>()); } var selected = allReferences.Where(reference => !reference.IsBuiltIn && reference.Priority.HasValue) .ToDictionary(reference => reference.FullPath); var output = selected.Values.Where(reference => reference.IsBuiltIn).ToList(); using (var references = project.References) { foreach (var reference in references) { try { if (!reference.IsBuiltIn) { references.Remove(reference); } } finally { reference.Dispose(); } } output.AddRange(selected.Values.OrderBy(selection => selection.Priority) .Select(reference => TryAddReference(project, reference)).Where(added => added != null)); } UpdateSettings(model, true); return(output); }
public void UpdateSettings(IAddRemoveReferencesModel model, bool recent = false) { if (model?.Settings is null || model.References is null) { return; } if (recent) { model.Settings.UpdateRecentReferencesForHost(model.HostApplication, model.References.Where(reference => reference.IsReferenced && !reference.IsBuiltIn) .Select(reference => reference.ToReferenceInfo()).ToList()); } model.Settings.UpdatePinnedReferencesForHost(model.HostApplication, model.References.Where(reference => reference.IsPinned).Select(reference => reference.ToReferenceInfo()) .ToList()); _settings.Save(model.Settings); }