//creates a tag with all attribute options, returns "200" (status ok) if valid. returns error message is not valid public static string create(string tag_name, string save_dir, bool rule_based, string rule_attr, string rule_comparator, string rule_value, List <CraftData> craft = null) { tag_name = sanitize_name(tag_name); if (String.IsNullOrEmpty(tag_name)) { return("Tag Name cannot be blank"); } else if (names.Contains(tag_name)) { return("A tag with this name already exists"); } else { Tag tag = Tags.find_or_create_by(tag_name, save_dir, false); if (rule_based) { tag.set_rule(rule_attr, rule_comparator, rule_value); } else { if (craft != null) { foreach (CraftData c in craft) { tag.add(c); } } } Tags.save(); return("200"); } }
//Loads Tag data from confignode file for a given save or for all saves if "<all_saves>" is given //If a save does not have a craft.tags file it copies the default.tags file into the save. //Will also instanciate an instance of Tags if one does not already exist. public static void load(string save_name) { if (Tags.instance == null) { new Tags(); } List <string> save_dirs = new List <string> { save_name }; Tags.instance.data.Clear(); if (save_name == CMBrowser.all_saves_ref) { save_dirs = CraftData.save_names; } foreach (string save_dir in save_dirs) { CraftManager.log("loading tags for " + save_dir); if (!File.Exists(tag_file_path(save_dir))) { FileInfo default_tags = new FileInfo(Paths.joined(CraftManager.ksp_root, "GameData", "CraftManager", "default.tags")); //TODO handle case where default.tags file is not present. default_tags.CopyTo(tag_file_path(save_dir)); } ConfigNode raw_data = ConfigNode.Load(tag_file_path(save_dir)); ConfigNode tag_nodes = raw_data.GetNode("TAGS"); foreach (ConfigNode tag_node in tag_nodes.nodes) { string tag_name = tag_node.GetValue("tag_name"); Tag tag = Tags.find_or_create_by(tag_name, save_dir, false); if (tag_node.HasNode("RULE")) { ConfigNode rule_node = tag_node.GetNode("RULE"); bool rule_added = tag.set_rule(rule_node.GetValue("attribute"), rule_node.GetValue("comparator"), rule_node.GetValue("value")); if (!rule_added) { CraftManager.log("failed to load rule for tag: " + tag_name); } } else { string[] craft = tag_node.GetValues("craft"); foreach (string craft_ref in craft) { tag.craft.AddUnique(craft_ref); } } } } Tags.update_lists(); }
//Associate a craft with a tag. Will create a Tag with the given name if it doesn't already exist public static void tag_craft(CraftData craft, string tag_name) { Tag tag = Tags.find_or_create_by(tag_name, craft.save_dir); tag.add(craft); }