internal static IEnumerable <SharpTreeNode> LoadChildrenForFolder(PackageFolder root) { foreach (var folder in root.Folders.OrderBy(f => f.Name)) { string newName = folder.Name; var subfolder = folder; while (subfolder.Folders.Count == 1 && subfolder.Entries.Count == 0) { // special case: a folder that only contains a single sub-folder subfolder = subfolder.Folders[0]; newName = $"{newName}/{subfolder.Name}"; } yield return(new PackageFolderTreeNode(subfolder, newName)); } foreach (var entry in root.Entries.OrderBy(e => e.Name)) { if (entry.Name.EndsWith(".dll", StringComparison.OrdinalIgnoreCase)) { var asm = root.ResolveFileName(entry.Name); if (asm != null) { yield return(new AssemblyTreeNode(asm, entry)); } else { yield return(ResourceTreeNode.Create(entry)); } } else { yield return(ResourceTreeNode.Create(entry)); } } }
private void OnTreeViewItemDrop(object sender, DragEventArgs e) { PackageFolder folder = null; TreeViewItem item = sender as TreeViewItem; if (item != null) { folder = item.DataContext as PackageFolder; } var data = e.Data; if (data.GetDataPresent(DataFormats.FileDrop)) { object value = data.GetData(DataFormats.FileDrop); string[] filenames = value as string[]; if (filenames != null && filenames.Length > 0) { var viewModel = DataContext as PackageViewModel; viewModel.AddDraggedAndDroppedFiles(folder, filenames); e.Handled = true; } } }
private void OnTreeViewItemCanPaste(object sender, CanExecuteRoutedEventArgs e) { PackageFolder folder = null; if (sender is TreeView treeView) { folder = treeView.SelectedItem as PackageFolder; } e.CanExecute = CanHandleDataObject(folder, Clipboard.GetDataObject()); }
private bool HandleDataObject(PackageFolder folder, IDataObject data, bool copy) { if (!CanHandleDataObject(folder, data)) { return(false); } if (data.GetDataPresent(PackageFileDataFormat)) { if (data.GetData(PackageFileDataFormat) is string packagePartPath) { var packagePart = RootFolder.GetPackageParts().FirstOrDefault(part => part.Path == packagePartPath); if (packagePart != null) { folder = folder ?? RootFolder; if (packagePart is PackageFile file) { folder.AddFile(file, copy); } else { if (packagePart is PackageFolder childFolder && !folder.IsDescendantOf(childFolder)) { folder.AddFolder(childFolder, copy); } } return(true); } } } if (data.GetDataPresent(NativeDragDrop.FileGroupDescriptorW)) { folder = folder ?? RootFolder; var viewModel = DataContext as PackageViewModel; viewModel.AddDraggedAndDroppedFileDescriptors(folder, NativeDragDrop.GetFileGroupDescriptorW(data)); return(true); } if (data.GetDataPresent(DataFormats.FileDrop)) { var value = data.GetData(DataFormats.FileDrop); if (value is string[] filenames && filenames.Length > 0) { var viewModel = DataContext as PackageViewModel; viewModel.AddDraggedAndDroppedFiles(folder, filenames); return(true); } } return(false); }
private void Write(DirectoryInfo directory, PackageFolder folder) { foreach (PackageEntry entry in folder.GetEntries()) { if (!this.FilterEntry(entry)) { if (entry is PackageFolder) this.Write(directory.CreateSubdirectory(entry.Name), (PackageFolder)entry); if (entry is PackageFile) File.WriteAllBytes(Path.Combine(directory.FullName, entry.Name), ((PackageFile)entry).Data); } } }
public LoadedPackage(PackageKind kind, IEnumerable<PackageEntry> entries) { this.Kind = kind; this.Entries = entries.ToArray(); var topLevelEntries = new List<PackageEntry>(); var folders = new Dictionary<string, PackageFolder>(); var rootFolder = new PackageFolder(this, null, ""); folders.Add("", rootFolder); foreach (var entry in this.Entries) { var (dirname, filename) = SplitName(entry.Name); GetFolder(dirname).Entries.Add(new FolderEntry(filename, entry)); } this.RootFolder = rootFolder;
PackageFolder GetFolder(string name) { if (folders.TryGetValue(name, out var result)) { return(result); } var(dirname, basename) = SplitName(name); PackageFolder parent = GetFolder(dirname); result = new PackageFolder(this, parent, basename); parent.Folders.Add(result); folders.Add(name, result); return(result); }
private void OnTreeViewItemDrop(object sender, DragEventArgs e) { PackageFolder folder = null; var item = sender as TreeViewItem; if (item != null) { folder = item.DataContext as PackageFolder; } IDataObject data = e.Data; if (data.GetDataPresent(DataFormats.FileDrop)) { object value = data.GetData(DataFormats.FileDrop); var filenames = value as string[]; if (filenames != null && filenames.Length > 0) { var viewModel = DataContext as PackageViewModel; viewModel.AddDraggedAndDroppedFiles(folder, filenames); e.Handled = true; } } else if (data.GetDataPresent(PackageFileDataFormat)) { var packagePart = data.GetData(PackageFileDataFormat) as PackagePart; if (packagePart != null) { folder = folder ?? RootFolder; var file = packagePart as PackageFile; if (file != null) { bool copying = (e.KeyStates & DragDropKeyStates.ControlKey) == DragDropKeyStates.ControlKey; folder.AddFile(file, copying); } else { var childFolder = packagePart as PackageFolder; if (childFolder != null && !folder.IsDescendantOf(childFolder)) { folder.AddFolder(childFolder); } } e.Handled = true; } } }
private void OnTreeViewItemPaste(object sender, ExecutedRoutedEventArgs e) { PackageFolder folder = null; if (sender is TreeView treeView) { folder = treeView.SelectedItem as PackageFolder; } if (HandleDataObject(folder, Clipboard.GetDataObject(), true)) { e.Handled = true; } }
private void WriteFolder(ZipOutputStream zipStream, string path, PackageFolder folder) { foreach (PackageEntry packageEntry in (IEnumerable<PackageEntry>) folder.GetEntries()) { if (packageEntry is PackageFile) { zipStream.PutNextEntry(new ZipEntry(this.CombinePath(path, packageEntry.Name))); byte[] data = ((PackageFile)packageEntry).Data; ((Stream)zipStream).Write(data, 0, data.Length); zipStream.CloseEntry(); } if (packageEntry is PackageFolder) this.WriteFolder(zipStream, this.CombinePath(path, packageEntry.Name), (PackageFolder)packageEntry); } }
private void OnTreeViewItemDrop(object sender, DragEventArgs e) { PackageFolder folder = null; if (sender is TreeViewItem item) { folder = item.DataContext as PackageFolder; } var copying = (e.KeyStates & DragDropKeyStates.ControlKey) == DragDropKeyStates.ControlKey; if (HandleDataObject(folder, e.Data, copying)) { e.Handled = true; } }
private ApiAvailabilityContext(ApiCatalogModel catalog) { Catalog = catalog; _frameworkIds = new Dictionary <NuGetFramework, int>(); _frameworkAssemblies = catalog.Frameworks.Select(fx => (fx.Id, Assemblies: fx.Assemblies.Select(a => a.Id).ToHashSet())) .ToDictionary(t => t.Id, t => t.Assemblies); _packageFolders = new Dictionary <int, IReadOnlyList <PackageFolder> >(); var nugetFrameworks = new Dictionary <int, NuGetFramework>(); foreach (var fx in catalog.Frameworks) { var nugetFramework = NuGetFramework.Parse(fx.Name); if (nugetFramework.IsPCL || fx.Name is "monotouch" or "xamarinios10") { continue; } nugetFrameworks.Add(fx.Id, nugetFramework); _frameworkIds.Add(nugetFramework, fx.Id); } foreach (var package in catalog.Packages) { var folders = new Dictionary <NuGetFramework, PackageFolder>(); foreach (var(framework, assembly) in package.Assemblies) { if (nugetFrameworks.TryGetValue(framework.Id, out var targetFramework)) { if (!folders.TryGetValue(targetFramework, out var folder)) { folder = new PackageFolder(targetFramework, framework); folders.Add(targetFramework, folder); } folder.Assemblies.Add(assembly); } } if (folders.Count > 0) { _packageFolders.Add(package.Id, folders.Values.ToArray()); } } }
private void OnTreeViewItemDrop(object sender, DragEventArgs e) { PackageFolder folder = null; if (sender is TreeViewItem item) { folder = item.DataContext as PackageFolder; } var data = e.Data; if (data.GetDataPresent(DataFormats.FileDrop)) { var value = data.GetData(DataFormats.FileDrop); if (value is string[] filenames && filenames.Length > 0) { var viewModel = DataContext as PackageViewModel; viewModel.AddDraggedAndDroppedFiles(folder, filenames); e.Handled = true; } } else if (data.GetDataPresent(PackageFileDataFormat)) { if (data.GetData(PackageFileDataFormat) is PackagePart packagePart) { folder = folder ?? RootFolder; if (packagePart is PackageFile file) { var copying = (e.KeyStates & DragDropKeyStates.ControlKey) == DragDropKeyStates.ControlKey; folder.AddFile(file, copying); } else { if (packagePart is PackageFolder childFolder && !folder.IsDescendantOf(childFolder)) { folder.AddFolder(childFolder); } } e.Handled = true; } } }
/// <summary> /// Creates the task execution context for use in the Package installation actions /// </summary> /// <param name="nugetPackage"></param> /// <param name="packageFolderName"></param> /// <param name="state"></param> /// <param name="controller"></param> /// <returns></returns> internal TaskExecutionContext GetTaskExecutionContext( IPackage nugetPackage, string packageFolderName, PackageInstallationState state, Controller controller) { var package = new PackageFolder { IsNugetInstalled = nugetPackage.IsInstalled(_backOfficeRequestContext.PackageContext.LocalPackageManager.LocalRepository), Name = packageFolderName }; return(new TaskExecutionContext { EventSource = controller, EventArgs = new TaskEventArgs(_backOfficeRequestContext.Application.FrameworkContext, new PackageInstallEventArgs(nugetPackage.Id, package, state)) }); }
private bool CanHandleDataObject(PackageFolder folder, IDataObject data) { if (folder == null) { return(false); } if (DataContext is PackageViewModel model) { if (model.IsSigned || model.IsInEditFileMode || model.IsInEditMetadataMode) { return(false); } } if (data.GetDataPresent(PackageFileDataFormat)) { if (data.GetData(PackageFileDataFormat) is string packagePartPath) { var packagePart = RootFolder.GetPackageParts().FirstOrDefault(part => part.Path == packagePartPath); // make sure we don't drag a file or folder into the same parent if (packagePart != null && !folder.Contains(packagePart) && !folder.ContainsFile(packagePart.Name) && !folder.ContainsFolder(packagePart.Name) && !folder.IsDescendantOf(packagePart)) { return(true); } } } if (data.GetDataPresent(NativeDragDrop.FileGroupDescriptorW)) { return(true); } if (data.GetDataPresent(DataFormats.FileDrop)) { return(true); } return(false); }
public PackageInstallEventArgs(string nugetPackageId, PackageFolder packageFolder, PackageInstallationState state) { NugetPackageId = nugetPackageId; PackageFolder = packageFolder; State = state; }
public PackageFolderTreeNode(PackageFolder folder, string text = null) { this.folder = folder; this.Text = text ?? folder.Name; this.LazyLoading = true; }