public static async Task InstallpackageAsync(string manifestFilePath, InstallablePackage entry, InstallSettings settings) { _files.Clear(); await VSPackage.Manager.Install(manifestFilePath, entry, settings); var project = ProjectHelpers.GetActiveProject(); project.AddFilesToProject(_files); }
private void RebuildPackageTree(InstallablePackage package) { if (package != Package) { return; } DisplayRoots = null; if (package == null) { return; } bool canUpdateInstallStatusValue = false; Func <bool> canUpdateInstallStatus = () => canUpdateInstallStatusValue; HashSet <string> selectedFiles = new HashSet <string>(StringComparer.OrdinalIgnoreCase); PackageItem root = new PackageItem(this, null, selectedFiles) { CanUpdateInstallStatus = canUpdateInstallStatus, ItemType = PackageItemType.Folder, Name = RootFolderName, IsChecked = false }; PackageItem packageItem = new PackageItem(this, root, selectedFiles) { CanUpdateInstallStatus = canUpdateInstallStatus, Name = package.Name, ItemType = PackageItemType.Folder, IsChecked = false }; //The node that children will be added to PackageItem realParent = root; //The node that will be set as the parent of the child nodes PackageItem virtualParent = packageItem; if (IncludePackageName) { realParent = packageItem; root.Children = new[] { packageItem }; } foreach (string file in package.Files) { string[] parts = file.Split('/'); PackageItem currentRealParent = realParent; PackageItem currentVirtualParent = virtualParent; for (int i = 0; i < parts.Length; ++i) { bool isFolder = i != parts.Length - 1; if (isFolder) { PackageItem next = currentRealParent.Children.FirstOrDefault(x => x.ItemType == PackageItemType.Folder && string.Equals(x.Name, parts[i])); if (next == null) { next = new PackageItem(this, currentVirtualParent, selectedFiles) { CanUpdateInstallStatus = canUpdateInstallStatus, Name = parts[i], ItemType = PackageItemType.Folder, IsChecked = false }; List <PackageItem> children = new List <PackageItem>(currentRealParent.Children) { next }; children.Sort((x, y) => x.ItemType == y.ItemType ? StringComparer.OrdinalIgnoreCase.Compare(x.Name, y.Name) : y.ItemType == PackageItemType.Folder ? 1 : -1); currentRealParent.Children = children; if (currentVirtualParent != currentRealParent) { currentVirtualParent.Children = children; } } currentRealParent = next; currentVirtualParent = next; } else { PackageItem next = new PackageItem(this, currentVirtualParent, selectedFiles) { CanUpdateInstallStatus = canUpdateInstallStatus, FullPath = file, Name = parts[i], ItemType = PackageItemType.File, IsChecked = false, }; List <PackageItem> children = new List <PackageItem>(currentRealParent.Children) { next }; children.Sort((x, y) => x.ItemType == y.ItemType ? StringComparer.OrdinalIgnoreCase.Compare(x.Name, y.Name) : y.ItemType == PackageItemType.Folder ? -1 : 1); currentRealParent.Children = children; if (currentVirtualParent != currentRealParent) { currentVirtualParent.Children = children; } next.IsMain = string.Equals(package.MainFile, file, StringComparison.OrdinalIgnoreCase); } } } SetNodeOpenStates(root); Dispatcher.Invoke(() => { if (package == Package) { canUpdateInstallStatusValue = true; _packageItem = packageItem; DisplayRoots = new[] { root }; SelectedFiles = selectedFiles; InstallPackageCommand.CanExecute(null); } }); }