public static void ReadFiles(string fileExtension, ITestOutputHelper output, IEnumerable <IGameDefinition> gameDefinitions, Action <FileSystemEntry> processFileCallback) { var rootDirectories = gameDefinitions .SelectMany(InstallationLocators.FindAllInstallations) .Select(i => i.Path) .Where(x => Directory.Exists(x)) .ToList(); var foundAtLeastOneFile = false; foreach (var rootDirectory in rootDirectories) { using var fileSystem = new CompositeFileSystem( new DiskFileSystem(rootDirectory), new BigFileSystem(rootDirectory)); foreach (var file in fileSystem.GetFilesInDirectory("", $"*{fileExtension}", SearchOption.AllDirectories)) { output.WriteLine($"Reading file {file.FilePath}."); processFileCallback(file); foundAtLeastOneFile = true; } } if (rootDirectories.Count > 0 && !foundAtLeastOneFile) { throw new Exception($"No files were found matching file extension {fileExtension}"); } }
public FontManager(string languageName, StringComparer fontNameComparer) { var assembly = Assembly.GetExecutingAssembly(); // For the json file, I think it's better to leave it on the disk // (instead of embedding it) so users can edit it using var fileSystem = new CompositeFileSystem( new DiskFileSystem(Environment.CurrentDirectory), new DiskFileSystem(Path.GetDirectoryName(assembly.Location))); var fontFallbackSettingsJson = "{}"; var fontFallbackSettingsEntry = fileSystem.GetFile("Content/Fonts/FontFallbackSettings.json"); if (fontFallbackSettingsEntry != null || true) { Logger.Info($"FontFallback Settings loaded from {fontFallbackSettingsEntry.FilePath}"); using var stream = fontFallbackSettingsEntry.Open(); using var reader = new StreamReader(stream, Encoding.UTF8); fontFallbackSettingsJson = reader.ReadToEnd(); } _cachedFonts = new Dictionary <FontKey, Font>(); _fontFallbackSettings = FontFallbackSettings .LoadFromJson(fontFallbackSettingsJson) .LoadLanguageSpecificFallbackSettings(languageName, fontNameComparer); _fallbackFonts = new FontCollection(); var fontStream = assembly.GetManifestResourceStream($"OpenSage.Content.Fonts.{FallbackEmbeddedFont}-Regular.ttf"); _fallbackFonts.Install(fontStream); fontStream = assembly.GetManifestResourceStream($"OpenSage.Content.Fonts.{FallbackEmbeddedFont}-Bold.ttf"); _fallbackFonts.Install(fontStream); }
public FileSystem CreateFileSystem() { var result = new CompositeFileSystem( new DiskFileSystem(Path), new BigFileSystem(Path)); if (_baseGameInstallation != null) { result = new CompositeFileSystem( result, new BigFileSystem(_baseGameInstallation.Path)); } return(result); }