private void LoadResources() { GameConfig game = _games[_gameEnum]; _dialogFilePath = Path.Combine(_rootPath, DialogFilename); bool dialogfileExists = File.Exists(_dialogFilePath); if (!dialogfileExists) { _dialogFilePath = Path.Combine(_rootPath, "lang", "en_US", DialogFilename); } _keyResource = _keyResourceService.GetKeyResource(_gameEnum, _keyFilePath); foreach (var resourceEntryResource in _keyResource.ResourceEntries) { var resourceFile = new ResourceFile(); resourceFile.Extension = resourceEntryResource.Extension; resourceFile.Folder = resourceEntryResource.Extension; resourceFile.RootFolder = resourceEntryResource.Extension; resourceFile.File = resourceEntryResource.FileName; resourceFile.ResourceEntry = true; _resourceFiles.Add(resourceFile); } List<string> currentExtraDirs = game.ExtraDirs.Select(GetFullPath).ToList(); if (currentExtraDirs.IsNullOrEmpty()) { // TODO: throw Exception } foreach (var extraDir in currentExtraDirs) { if (Directory.Exists(extraDir)) { _extraDirs.Add(extraDir); LoadResourceFiles(extraDir, currentExtraDirs); } } string overrideFullPath = Path.Combine(_rootPath, OverrideFolder); if (Directory.Exists(overrideFullPath)) { string[] overrideFiles = Directory.GetFiles(overrideFullPath); foreach (var overrideFile in overrideFiles) { string fileName = Path.GetFileName(overrideFile); string fileNameWithoutExtension = Path.GetFileNameWithoutExtension(overrideFile); string extension = Path.GetExtension(overrideFile); ResourceFile resourceFile = _resourceFiles.FirstOrDefault(file => file.File == fileNameWithoutExtension); string overrideFolder = OverrideFolder.Split(Path.DirectorySeparatorChar).Last(); if (resourceFile == null) { resourceFile = new ResourceFile(); resourceFile.File = fileName; resourceFile.FullPath = Path.Combine(OverrideFolder, overrideFile); resourceFile.RootFolder = overrideFolder; resourceFile.Folder = overrideFolder; resourceFile.Extension = string.IsNullOrEmpty(extension) ? string.Empty : extension.ToUpper().Replace(".", string.Empty); _resourceFiles.Add(resourceFile); } else { ResourceEntryResource resourceEntryResource = _keyResource.ResourceEntries.FirstOrDefault(resource => resource.FileName == fileName); if (resourceEntryResource != null) { resourceEntryResource.HasOverride = true; } } } } }
private void LoadResourceFiles(string directory, ICollection<string> extraDirectories) { string[] filePaths = Directory.GetFiles(directory); string[] directoryPaths = Directory.GetDirectories(directory); var filesAndDirectories = new List<string>(); filesAndDirectories.AddRange(filePaths); filesAndDirectories.AddRange(directoryPaths); string parentFolder = GetParentOfExtraSubDirectory(extraDirectories, directory); foreach (var file in filesAndDirectories) { FileAttributes attr = File.GetAttributes(file); if ((attr & FileAttributes.Directory) == FileAttributes.Directory) { LoadResourceFiles(file, extraDirectories); continue; } var resourceFile = new ResourceFile(); string fileName = Path.GetFileName(file); string extension = Path.GetExtension(file); if (string.IsNullOrEmpty(fileName)) { // TODO : throw Exception } resourceFile.RootFolder = parentFolder; resourceFile.File = fileName.ToUpper(); resourceFile.FullPath = file; resourceFile.Folder = directory.Split(Path.DirectorySeparatorChar).Last(); resourceFile.Extension = string.IsNullOrEmpty(extension) ? string.Empty : extension.ToUpper().Replace(".", string.Empty); _resourceFiles.Add(resourceFile); } }