コード例 #1
0
        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();
        }
コード例 #2
0
        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);
        }