Exemple #1
0
        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;
                }
            }
        }
Exemple #2
0
 public void Remove(PluginBase p)
 {
     Children.Remove(p.Name);
 }
Exemple #3
0
 public void Add(PluginBase p)
 {
     p.Parent = this;
     Children.Add(p.Name, p);
 }