Exemplo n.º 1
0
 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));
         }
     }
 }
Exemplo n.º 2
0
        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;
                }
            }
        }
Exemplo n.º 3
0
        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());
        }
Exemplo n.º 4
0
        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);
        }
Exemplo n.º 5
0
		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);
				}
			}
		}
Exemplo n.º 6
0
		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;
Exemplo n.º 7
0
            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;
                }
            }
        }
Exemplo n.º 9
0
        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;
            }
        }
Exemplo n.º 10
0
		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);
			}
		}
Exemplo n.º 11
0
        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());
            }
        }
    }
Exemplo n.º 13
0
        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))
            });
        }
Exemplo n.º 15
0
        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);
        }
Exemplo n.º 16
0
 public PackageInstallEventArgs(string nugetPackageId, PackageFolder packageFolder, PackageInstallationState state)
 {
     NugetPackageId = nugetPackageId;
     PackageFolder  = packageFolder;
     State          = state;
 }
Exemplo n.º 17
0
 public PackageFolderTreeNode(PackageFolder folder, string text = null)
 {
     this.folder      = folder;
     this.Text        = text ?? folder.Name;
     this.LazyLoading = true;
 }