コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }