public TreeNode NodeToTreeNode(GGPKNode node) { return NodeToTreeNode(node, this.OffsetsToNodes); }
public static TreeNode NodeToTreeNode(GGPKNode node, IDictionary<ulong, GGPKNode> offsets) { if (node is FileNode) { return new TreeNode { Element = (node as FileNode).ToLeft<FileNode, DirectoryTreeNode>() }; } else if (node is DirectoryNode) { var dnode = node as DirectoryNode; var children = dnode.FileNodeEntries.Select(nodeEntry => { var offset = offsets[nodeEntry.Offset]; var newNode = NodeToTreeNode(offset, offsets); return newNode; }).Where(tn => tn != null); return new TreeNode { Element = new DirectoryTreeNode { Node = dnode, Children = children }.ToRight<FileNode, DirectoryTreeNode>() }; } return null; }