public void Pack_and_unpack_manifest() { // Arrange string archiveFile = Path.Combine(Path.GetTempPath(), StringUtil.CreateAlphaNumericKey(6)+".zip"); List<XDoc> docs = new List<XDoc>(); docs.Add(new XDoc("doc1").Attr("dataid", "a")); docs.Add(new XDoc("doc2").Attr("dataid", "b")); docs.Add(new XDoc("doc3").Attr("dataid", "c")); List<Tuplet<string, MemoryStream>> data = new List<Tuplet<string, MemoryStream>>(); foreach(XDoc doc in docs) { string id = doc["@dataid"].AsText; data.Add(new Tuplet<string, MemoryStream>(id, new MemoryStream(doc.ToBytes()))); } XDoc manifest = new XDoc("manifest") .Start("page").Attr("dataid", "a").End() .Start("page").Attr("dataid", "b").End() .Start("page").Attr("dataid", "c").End(); // Act using(ArchivePackageWriter packageWriter = new ArchivePackageWriter(archiveFile)) { foreach (Tuplet<string, MemoryStream> tuple in data) { var item = new ExportItem(tuple.Item1, tuple.Item2, tuple.Item2.Length,new XDoc("item").Elem("path","abc")); packageWriter.WriteDataAsync(item, new Result()).Wait(); } packageWriter.WriteManifest(manifest, new Result()).Wait(); } XDoc manifest2 = null; List<XDoc> docs2 = new List<XDoc>(); using(ArchivePackageReader packageReader = new ArchivePackageReader(archiveFile)) { manifest2 = packageReader.ReadManifest(new Result<XDoc>()).Wait(); foreach (XDoc id in manifest2["*/@dataid"]) { using (ImportItem item = packageReader.ReadData(new ImportItem(id.AsText,null,null), new Result<ImportItem>()).Wait()) { using (StreamReader reader = new StreamReader(item.Data)) { docs2.Add(XDocFactory.From(reader, MimeType.TEXT_XML)); } } } } // Asssert Assert.IsTrue(File.Exists(archiveFile)); Assert.AreEqual(manifest, manifest2); Assert.AreEqual(docs.Count, docs2.Count); foreach(var doc in docs) { Assert.IsTrue(docs2.Select(x => x == doc).Any()); } }
public static Result<ExportManager> CreateArchiveExportManagerAsync(Plug dekiApi, XDoc exports, string reltopath, string archiveFilename, Result<ExportManager> result) { ArchivePackageWriter filePackager = new ArchivePackageWriter(archiveFilename); return CreateAsync(dekiApi, exports, reltopath, filePackager, result); }
public static Result <ExportManager> CreateArchiveExportManagerAsync(Plug dekiApi, XDoc exports, string reltopath, string archiveFilename, Result <ExportManager> result) { ArchivePackageWriter filePackager = new ArchivePackageWriter(archiveFilename); return(CreateAsync(dekiApi, exports, reltopath, filePackager, result)); }