public DataForgeTreeItem(IStreamTreeItem node, unforge.DataForge dataForge) : base(node.Title, () => dataForge.GetStream(), node.LastModifiedUtc, dataForge.OuterXML.Length) { var sw = new Stopwatch { }; sw.Start(); var maxIndex = dataForge.Length - 1; var lastIndex = 0L; var oldProgress = ArchiveExplorer.RegisterProgress(async(ProgressBar barProgress) => { barProgress.Maximum = maxIndex; barProgress.Value = lastIndex; await ArchiveExplorer.UpdateStatus($"Deserializing file {lastIndex:#,##0}/{maxIndex:#,##0} from dataforge"); await Task.CompletedTask; }); foreach ((String FileName, XmlDocument XmlDocument)entry in dataForge) { this.AddStream( entry.FileName, () => entry.XmlDocument.GetStream(), node.LastModifiedUtc, entry.XmlDocument.OuterXml.Length); lastIndex++; } sw.Stop(); ArchiveExplorer.RegisterProgress(oldProgress); ArchiveExplorer.UpdateStatus($"Deserialized {this.Text} in {sw.ElapsedMilliseconds:#,000}ms").Wait(); }
public IStreamTreeItem Handle(IStreamTreeItem node) { if (Path.GetExtension(node.Title).Equals(".dcb", StringComparison.InvariantCultureIgnoreCase)) { using (var dataStream = node.Stream) { dataStream.Seek(0, SeekOrigin.Begin); using (var br = new BinaryReader(dataStream)) { try { var forge = new unforge.DataForge(br); return(new DataForgeTreeItem(node, forge)); } catch (Exception) { } } } } return(node); }