diff --git a/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/UrlProvider/GachaLogUrlWebCacheProvider.cs b/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/UrlProvider/GachaLogUrlWebCacheProvider.cs index dee7caf6..4b0263f0 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/UrlProvider/GachaLogUrlWebCacheProvider.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/GachaLog/UrlProvider/GachaLogUrlWebCacheProvider.cs @@ -36,7 +36,16 @@ internal class GachaLogUrlWebCacheProvider : IGachaLogUrlProvider public static string GetCacheFile(string path) { string folder = Path.GetDirectoryName(path) ?? string.Empty; - return Path.Combine(folder, @"YuanShen_Data\webCaches\Cache\Cache_Data\data_2"); + var cacheDataPath = Path.Combine(folder, @"YuanShen_Data\webCaches\Cache\Cache_Data\data_2"); + var cacheDataPathIntl = Path.Combine(folder, @"GenshinImpact_Data\webCaches\Cache\Cache_Data\data_2"); + if (File.Exists(cacheDataPath)) + { + return cacheDataPath; + } + else + { + return cacheDataPathIntl; + } } /// diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Game/GameService.cs b/src/Snap.Hutao/Snap.Hutao/Service/Game/GameService.cs index bc2261b6..4ca0e9b4 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Game/GameService.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Game/GameService.cs @@ -207,7 +207,7 @@ internal class GameService : IGameService, IDisposable return true; } - return Process.GetProcessesByName("YuanShen.exe").Any(); + return Process.GetProcessesByName("YuanShen.exe").Any() || Process.GetProcessesByName("GenshinImpact.exe").Any(); } /// diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Game/Locator/ManualGameLocator.cs b/src/Snap.Hutao/Snap.Hutao/Service/Game/Locator/ManualGameLocator.cs index d9d741cd..90320f2b 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Game/Locator/ManualGameLocator.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Game/Locator/ManualGameLocator.cs @@ -30,18 +30,26 @@ internal class ManualGameLocator : IGameLocator /// public Task> LocateGamePathAsync() { - return LocateInternalAsync("YuanShen.exe"); + List filenames = new List() + { + "YuanShen.exe", + "GenshinImpact.exe", + }; + return LocateInternalAsync(filenames); } - private async Task> LocateInternalAsync(string fileName) + private async Task> LocateInternalAsync(List fileNames) { FileOpenPicker picker = pickerFactory.GetFileOpenPicker(PickerLocationId.Desktop, "选择游戏本体", ".exe"); if (await picker.PickSingleFileAsync() is StorageFile file) { string path = file.Path; - if (path.Contains(fileName)) + foreach (string fileName in fileNames) { - return new(true, path); + if (path.Contains(fileName)) + { + return new(true, path); + } } } diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Game/Locator/UnityLogGameLocator.cs b/src/Snap.Hutao/Snap.Hutao/Service/Game/Locator/UnityLogGameLocator.cs index e66f4645..b8a99764 100644 --- a/src/Snap.Hutao/Snap.Hutao/Service/Game/Locator/UnityLogGameLocator.cs +++ b/src/Snap.Hutao/Snap.Hutao/Service/Game/Locator/UnityLogGameLocator.cs @@ -22,28 +22,48 @@ internal partial class UnityLogGameLocator : IGameLocator await ThreadHelper.SwitchToBackgroundAsync(); string appDataPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); string logFilePath = Path.Combine(appDataPath, @"..\LocalLow\miHoYo\原神\output_log.txt"); + string logFilePathIntl = Path.Combine(appDataPath, @"..\LocalLow\miHoYo\Genshin Impact\output_log.txt"); - using (TempFile? tempFile = TempFile.CreateFromFileCopy(logFilePath)) + using (TempFile? tempFile = TempFile.CreateFromFileCopy(logFilePath), tempFileIntl = TempFile.CreateFromFileCopy(logFilePathIntl)) { - if (tempFile == null) + if (tempFile != null) { - return new(false, $"找不到 Unity 日志文件:\n{logFilePath}"); + string content = File.ReadAllText(tempFile.Path); + + Match matchResult = WarmupFileLine().Match(content); + if (!matchResult.Success) + { + return new(false, $"在 Unity 日志文件中找不到游戏路径"); + } + + string entryName = matchResult.Groups[0].Value.Replace("_Data", ".exe"); + string fullPath = Path.GetFullPath(Path.Combine(matchResult.Value, "..", entryName)); + return new(true, fullPath); } - - string content = File.ReadAllText(tempFile.Path); - - Match matchResult = WarmupFileLine().Match(content); - if (!matchResult.Success) + else if (tempFileIntl != null) { - return new(false, $"在 Unity 日志文件中找不到游戏路径"); - } + string content = File.ReadAllText(tempFileIntl.Path); - string entryName = matchResult.Groups[0].Value.Replace("_Data", ".exe"); - string fullPath = Path.GetFullPath(Path.Combine(matchResult.Value, "..", entryName)); - return new(true, fullPath); + Match matchResult = WarmupFileLineIntl().Match(content); + if (!matchResult.Success) + { + return new(false, $"在 Unity 日志文件中找不到游戏路径"); + } + + string entryName = matchResult.Groups[0].Value.Replace("_Data", ".exe"); + string fullPath = Path.GetFullPath(Path.Combine(matchResult.Value, "..", entryName)); + return new(true, fullPath); + } + else + { + return new(false, $"找不到 Unity 日志文件:\n{logFilePath}\n{logFilePathIntl}"); + } } } [GeneratedRegex(@"(?m).:/.+YuanShen_Data")] private static partial Regex WarmupFileLine(); + + [GeneratedRegex(@"(?m).:/.+GenshinImpact_Data")] + private static partial Regex WarmupFileLineIntl(); } \ No newline at end of file