private void CopyFiles(XElement xe, DirectoryInfo dir, ZipArchive zip) { foreach (var e in xe.Elements()) { string name = e.Attribute("Name").Value; switch (e.Name.LocalName) { case "Directory": CopyFiles(e, dir.GetDirectory(name), zip); break; case "Plugin": var plugin = PluginBase.GetPlugin(name); using (var stream = zip.CreateEntry(name).Open()) { using (var pzip = new ZipArchive(stream, ZipArchiveMode.Update)) { var pdir = plugin.Info.Directory; int len = pdir.FullName.Length; foreach (var file in pdir.GetAllFiles()) { using (var target = pzip.CreateEntry(file.FullName.Substring(len + 1)).Open()) { using (var source = file.OpenRead()) source.CopyTo(target); } } } } break; case "Module": using (var stream = zip.CreateEntry($"{name}.dll").Open()) Support.Packages[name].Build(stream); break; case "Extension": using (var stream = zip.CreateEntry($"extensions\\{name}").Open()) Extensions[name].Build(stream); break; case "File": using (var stream = zip.CreateEntry(name).Open()) { var file = dir.GetFile(name); using (FileStream source = file.OpenRead()) source.CopyTo(stream); } break; } } }
public void Remove(PluginBase p) { Children.Remove(p.Name); }
public void Add(PluginBase p) { p.Parent = this; Children.Add(p.Name, p); }