public void TestCreateFile__Extension(string extension, UrlDir.FileType fileType) { UrlDir.UrlFile file = UrlBuilder.CreateFile("someFile." + extension); Assert.Equal("someFile", file.name); Assert.Equal(extension, file.fileExtension); Assert.Equal(fileType, file.fileType); UrlDir root = file.parent; Assert.NotNull(root); Assert.Equal("root", root.name); Assert.Null(root.parent); Assert.Contains(file, root.files); Assert.Same(root, file.root); }
public static UrlDir.UrlFile CreateFile(string path, UrlDir parent = null) { int sepIndex = path.LastIndexOf('/'); string name = path; if (sepIndex != -1) { parent = CreateDir(path.Substring(0, sepIndex), parent); name = path.Substring(sepIndex + 1); } else if (parent == null) { parent = CreateRoot(); } string nameWithoutExtension = Path.GetFileNameWithoutExtension(name); string extension = Path.GetExtension(name); if (!string.IsNullOrEmpty(extension)) { extension = extension.Substring(1); } UrlDir.UrlFile existingFile = parent.files.FirstOrDefault(f => f.name == nameWithoutExtension && f.fileExtension == extension); if (existingFile != null) { return(existingFile); } bool cfg = false; string newName = name; UrlDir.FileType fileType = UrlDir.FileType.Unknown; switch (extension) { case "dll": fileType = UrlDir.FileType.Assembly; break; case "ksp": fileType = UrlDir.FileType.AssetBundle; break; case "wav": case "ogg": fileType = UrlDir.FileType.Audio; break; case "cfg": fileType = UrlDir.FileType.Config; break; case "dae": case "mu": fileType = UrlDir.FileType.Model; break; case "dds": case "jpg": case "jpeg": case "mbm": case "png": case "tga": case "truecolor": fileType = UrlDir.FileType.Texture; break; } // KSP tries to load .cfg files so need to have special handling if (extension == "cfg") { cfg = true; newName = name + ".not_cfg"; } UrlDir.UrlFile file = new UrlDir.UrlFile(parent, new FileInfo(newName)); UrlFile__field__fileType.SetValue(file, fileType); if (cfg) { UrlFile__field__name.SetValue(file, nameWithoutExtension); UrlFile__field__fileExtension.SetValue(file, "cfg"); } parent.files.Add(file); return(file); }