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