示例#1
0
 public UiDataTableNode(ArchiveListing listing, UiArchiveExtension extension, ArchiveEntry indices)
     : base(indices.Name, UiNodeType.DataTable)
 {
     _listing = listing;
     _extension = extension;
     _indices = indices;
 }
示例#2
0
 public UiDataTableNode(ArchiveListing listing, UiArchiveExtension extension, ArchiveEntry indices)
     : base(indices.Name, UiNodeType.DataTable)
 {
     _listing   = listing;
     _extension = extension;
     _indices   = indices;
 }
示例#3
0
 public UiFileTableNode(ArchiveListing listing, UiArchiveExtension extension, ArchiveEntry indices, ArchiveEntry binary)
     : base(indices.Name, UiNodeType.FileTable)
 {
     _listing   = listing;
     _extension = extension;
     _indices   = indices;
     _binary    = binary;
 }
示例#4
0
 public UiFileTableNode(ArchiveListing listing, UiArchiveExtension extension, ArchiveEntry indices, ArchiveEntry binary)
     : base(indices.Name, UiNodeType.FileTable)
 {
     _listing = listing;
     _extension = extension;
     _indices = indices;
     _binary = binary;
 }
示例#5
0
        private UiContainerNode BuildExtensionNode(UiArchiveExtension key, ConcurrentBag <UiNode> entries)
        {
            string separator = Path.AltDirectorySeparatorChar.ToString();

            UiContainerNode extensionNode             = new UiContainerNode(key.ToString().ToUpper(), UiNodeType.Group);
            Dictionary <string, UiContainerNode> dirs = new Dictionary <string, UiContainerNode>(entries.Count);

            foreach (UiNode leaf in entries)
            {
                UiNode   parent = extensionNode;
                string[] path   = leaf.Name.ToLowerInvariant().Split(Path.AltDirectorySeparatorChar);
                for (int i = 0; i < path.Length - 1; i++)
                {
                    UiContainerNode directory;
                    string          directoryName = path[i];
                    string          directoryPath = String.Join(separator, path, 0, i + 1);
                    if (!dirs.TryGetValue(directoryPath, out directory))
                    {
                        directory = new UiContainerNode(directoryName, UiNodeType.Directory)
                        {
                            Parent = parent
                        };
                        dirs.Add(directoryPath, directory);
                    }
                    parent = directory;
                }
                leaf.Parent = parent;
                leaf.Name   = path[path.Length - 1];
            }

            //foreach (IGrouping<UiNode, UiNode> leafs in entries.GroupBy(e => e.Parent))
            //    ((UiContainerNode)leafs.Key).SetChilds(leafs.ToArray());

            UiNode[] childs = null;
            foreach (IGrouping <UiNode, UiNode> leafs in dirs.Values.Union(entries).GroupBy(e => e.Parent))
            {
                if (leafs.Key == extensionNode)
                {
                    childs = leafs.ToArray();
                    continue;
                }

                ((UiContainerNode)leafs.Key).SetChilds(leafs.ToArray());
            }

            foreach (UiContainerNode node in dirs.Values)
            {
                node.AbsorbSingleChildContainer();
            }

            extensionNode.SetChilds(childs);
            return(extensionNode);
        }
        private UiContainerNode BuildExtensionNode(UiArchiveExtension key, ConcurrentBag<UiNode> entries)
        {
            string separator = Path.AltDirectorySeparatorChar.ToString();

            UiContainerNode extensionNode = new UiContainerNode(key.ToString().ToUpper(), UiNodeType.Group);
            Dictionary<string, UiContainerNode> dirs = new Dictionary<string, UiContainerNode>(entries.Count);
            foreach (UiNode leaf in entries)
            {
                UiNode parent = extensionNode;
                string[] path = leaf.Name.ToLowerInvariant().Split(Path.AltDirectorySeparatorChar);
                for (int i = 0; i < path.Length - 1; i++)
                {
                    UiContainerNode directory;
                    string directoryName = path[i];
                    string directoryPath = String.Join(separator, path, 0, i + 1);
                    if (!dirs.TryGetValue(directoryPath, out directory))
                    {
                        directory = new UiContainerNode(directoryName, UiNodeType.Directory) {Parent = parent};
                        dirs.Add(directoryPath, directory);
                    }
                    parent = directory;
                }
                leaf.Parent = parent;
                leaf.Name = path[path.Length - 1];
            }

            //foreach (IGrouping<UiNode, UiNode> leafs in entries.GroupBy(e => e.Parent))
            //    ((UiContainerNode)leafs.Key).SetChilds(leafs.ToArray());

            UiNode[] childs = null;
            foreach (IGrouping<UiNode, UiNode> leafs in dirs.Values.Union(entries).GroupBy(e => e.Parent))
            {
                if (leafs.Key == extensionNode)
                {
                    childs = leafs.ToArray();
                    continue;
                }

                ((UiContainerNode)leafs.Key).SetChilds(leafs.ToArray());
            }

            foreach (UiContainerNode node in dirs.Values)
                node.AbsorbSingleChildContainer();

            extensionNode.SetChilds(childs);
            return extensionNode;
        }
示例#7
0
        private bool TryAddMoviesListing(ArchiveListing parentListing, ArchiveEntry entry, String entryName)
        {
            switch (entryName)
            {
            case "movie_items.win32.wdb":
            case "movie_items_us.win32.wdb":
                break;

            default:
                return(false);
            }

            UiArchiveExtension extension = GetArchiveExtension(entry);

            UiDataTableNode        node      = new UiDataTableNode(parentListing, extension, entry);
            ConcurrentBag <UiNode> container = ProvideRootNodeChilds(extension);

            container.Add(node);

            return(true);
        }
示例#8
0
        private bool SetPairedEntry(ArchiveListing listing, ArchiveEntry entry, string ext, string longName)
        {
            Pair <ArchiveEntry, ArchiveEntry> pair = ProvidePair(longName);

            if (ext == ".win32.imgb")
            {
                pair.Item2 = entry;
            }
            else
            {
                pair.Item1 = entry;
            }

            if (!pair.IsAnyEmpty)
            {
                UiArchiveExtension extension = GetArchiveExtension(pair.Item1);

                UiFileTableNode        node      = new UiFileTableNode(listing, extension, pair.Item1, pair.Item2);
                ConcurrentBag <UiNode> container = ProvideRootNodeChilds(extension);
                container.Add(node);
            }

            return(true);
        }
示例#9
0
 private ConcurrentBag <UiNode> ProvideRootNodeChilds(UiArchiveExtension extension)
 {
     return(_nodes.GetOrAdd(extension, e => new ConcurrentBag <UiNode>()));
 }
 private ConcurrentBag<UiNode> ProvideRootNodeChilds(UiArchiveExtension extension)
 {
     return _nodes.GetOrAdd(extension, e => new ConcurrentBag<UiNode>());
 }