public static CAGCategory Load() { var root = new CAGCategory("Add Menu"); var path = Path.Combine(Core.BaseDirectory, "Data/categorization.json"); var list = JsonConfig.Deserialize <List <CAGJson> >(path); if (list == null) { throw new JsonException($"Failed to deserialize {path}."); } // Not an optimized solution foreach (var cag in list) { var parent = root; // Navigate through the dot notation categories until we find the last one var categories = cag.Category.Split("."); for (var i = 0; i < categories.Length; i++) { var category = categories[i]; // No children, so let's make one if (parent.Nodes == null) { var cat = new CAGCategory(category, parent); parent.Nodes = new CAGNode[] { cat }; parent = cat; continue; } var oldParent = parent; for (var j = 0; j < parent.Nodes.Length; j++) { var node = parent.Nodes[j]; if (category == node.Title && node is CAGCategory cat) { parent = cat; break; } } // Didn't find the child, let's add it if (oldParent == parent) { var nodes = parent.Nodes; parent.Nodes = new CAGNode[nodes.Length + 1]; Array.Copy(nodes, parent.Nodes, nodes.Length); var cat = new CAGCategory(category, parent); parent.Nodes[^ 1] = cat;
public static CAGCategory Load() { var root = new CAGCategory("Add Menu"); var path = Path.Combine(Core.BaseDirectory, "Data/objects.json"); var list = JsonConfig.Deserialize <List <CAGJson> >(path); // Not an optimized solution foreach (var cag in list) { var parent = root; // Navigate through the dot notation categories until we find the last one var categories = cag.Category.Split("."); for (var i = 0; i < categories.Length; i++) { var category = categories[i]; var oldParent = parent; for (var j = 0; j < parent.Nodes.Length; j++) { var node = parent.Nodes[i]; if (category == node.Title && node is CAGCategory cat) { parent = cat; break; } } if (parent == oldParent) { parent = new CAGCategory(category, parent); } } // Set the objects associated with the child most node parent.Nodes = new CAGNode[cag.Objects.Length]; for (var i = 0; i < cag.Objects.Length; i++) { var obj = cag.Objects[i]; obj.Parent = parent; parent.Nodes[i] = obj; } } return(root); }
public CAGCategory(string title, CAGCategory parent = null) { Title = title; Parent = parent; }