diff --git a/LibX4/FileSystem/CatFile.cs b/LibX4/FileSystem/CatFile.cs index 5e54721c..a6862120 100644 --- a/LibX4/FileSystem/CatFile.cs +++ b/LibX4/FileSystem/CatFile.cs @@ -76,6 +76,7 @@ private static readonly Regex _ParseModRegex /// コンストラクタ /// /// X4インストール先ディレクトリパス + /// cat ファイルの読み込みオプション /// Mod の依存関係の解決に失敗した場合 public CatFile(string gameRoot, CatLoadOption option = CatLoadOption.All) { @@ -92,7 +93,7 @@ public CatFile(string gameRoot, CatLoadOption option = CatLoadOption.All) } } - var modInfo = GetModInfo(gameRoot); + var modInfo = GetModInfo(gameRoot, option); _loadedMods = new HashSet(modInfo.Select(x => $"extensions/{Path.GetFileName(x.Directory)}".Replace('\\', '/'))); @@ -111,8 +112,9 @@ public CatFile(string gameRoot, CatLoadOption option = CatLoadOption.All) /// Mod の情報を で返す /// /// X4 インストール先ディレクトリパス + /// cat ファイルの読み込みオプション /// Mod の情報を表す - private static IReadOnlyList GetModInfo(string gameRoot) + private static IReadOnlyList GetModInfo(string gameRoot, CatLoadOption option) { var entensionsPath = Path.Combine(gameRoot, "extensions"); @@ -127,7 +129,7 @@ private static IReadOnlyList GetModInfo(string gameRoot) var unloadedMods = Directory.GetDirectories(entensionsPath) .Select(x => new ModInfo(userContentXml, x)) - .Where(x => x.Enabled) + .Where(x => x.CanLoad(option)) .OrderBy(x => x.Name) .ToList(); diff --git a/LibX4/FileSystem/ModInfo.cs b/LibX4/FileSystem/ModInfo.cs index 69e23d1a..d2fa131c 100644 --- a/LibX4/FileSystem/ModInfo.cs +++ b/LibX4/FileSystem/ModInfo.cs @@ -102,6 +102,24 @@ public ModInfo(XDocument? userContentXml, string modDirPath) } + /// + /// Mod を読み込めるか判定する + /// + /// cat ファイルの読み込みオプション + /// Mod を読み込んでも良い場合、true; それ以外の場合 false; + /// が無効な場合 + public bool CanLoad(CatLoadOption option) + { + return Enabled && option switch + { + CatLoadOption.All => true, + CatLoadOption.Official => Author == "Egosoft GmbH", + CatLoadOption.Vanilla => false, + _ => throw new NotImplementedException() + }; + } + + /// /// Mod が有効化されているかを取得する /// diff --git a/X4_DataExporterWPF/ExportWindow/DataExportModel.cs b/X4_DataExporterWPF/ExportWindow/DataExportModel.cs index a6af7b1a..a269cefd 100644 --- a/X4_DataExporterWPF/ExportWindow/DataExportModel.cs +++ b/X4_DataExporterWPF/ExportWindow/DataExportModel.cs @@ -24,11 +24,14 @@ class DataExportModel /// /// 言語一覧を更新 /// - public static async Task<(bool success, IReadOnlyList languages)> GetLanguages(string inDirPath, Window owner) + /// X4のインストール先フォルダ + /// cat ファイルの読み込みオプション + /// 親ウィンドウハンドル(メッセージボックス表示用) + public static async Task<(bool success, IReadOnlyList languages)> GetLanguages(string x4Dir, CatLoadOption catLoadOption, Window owner) { try { - var catFiles = new CatFile(inDirPath); + var catFiles = new CatFile(x4Dir, catLoadOption); var xml = await catFiles.OpenXmlAsync("libraries/languages.xml", CancellationToken.None); var languages = xml.XPathSelectElements("/languages/language") .Select(x => (ID: x.Attribute("id")?.Value, Name: x.Attribute("name")?.Value)) @@ -60,6 +63,7 @@ await owner.Dispatcher.BeginInvoke((Action)(() => /// 抽出実行 /// /// 入力元フォルダパス + /// cat ファイルの読み込みオプション /// 出力先ファイルパス /// 選択された言語 /// 親ウィンドウハンドル(メッセージボックス表示用) @@ -68,12 +72,13 @@ public static async Task Export( IProgress<(int currentStep, int maxSteps)> progress, IProgress<(int currentStep, int maxSteps)> progressSub, string inDirPath, + CatLoadOption catLoadOption, string outFilePath, LangComboboxItem language, Window owner ) { - var catFile = new CatFile(inDirPath); + var catFile = new CatFile(inDirPath, catLoadOption); // 抽出に失敗した場合、例外設定で「Common Languate Runtime Exceptions」にチェックを入れるとどこで例外が発生したか分かる try diff --git a/X4_DataExporterWPF/ExportWindow/DataExportViewModel.cs b/X4_DataExporterWPF/ExportWindow/DataExportViewModel.cs index 8ed6426d..8e1f4fd9 100644 --- a/X4_DataExporterWPF/ExportWindow/DataExportViewModel.cs +++ b/X4_DataExporterWPF/ExportWindow/DataExportViewModel.cs @@ -182,7 +182,7 @@ private async Task UpdateLangList(string x4InstallDirectory) _unableToGetLanguages.Value = false; Languages.ClearOnScheduler(); - var (success, languages) = await Task.Run(async () => await DataExportModel.GetLanguages(x4InstallDirectory, _ownerWindow)); + var (success, languages) = await Task.Run(async () => await DataExportModel.GetLanguages(x4InstallDirectory, CatLoadOption.Value, _ownerWindow)); _unableToGetLanguages.Value = !success; Languages.AddRangeOnScheduler(languages); @@ -251,6 +251,7 @@ await Task.Run(() => DataExportModel.Export( progress, progressSub, InDirPath.Value, + CatLoadOption.Value, _outFilePath, SelectedLanguage.Value, _ownerWindow