From a70593c5294df134af6b5563df23eec417cfb424 Mon Sep 17 00:00:00 2001 From: solacens Date: Sun, 1 Jan 2023 22:45:10 +1100 Subject: [PATCH 1/3] Support international version game launching --- .../Service/Game/Locator/ManualGameLocator.cs | 16 ++++++++++++---- 1 file changed, 12 insertions(+), 4 deletions(-) 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); + } } } From af4180bdeb58305e3de4d9c0f79986fce6b14958 Mon Sep 17 00:00:00 2001 From: solacens Date: Sun, 1 Jan 2023 23:14:35 +1100 Subject: [PATCH 2/3] Add GenshinImpact.exe to check game running --- src/Snap.Hutao/Snap.Hutao/Service/Game/GameService.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/Snap.Hutao/Snap.Hutao/Service/Game/GameService.cs b/src/Snap.Hutao/Snap.Hutao/Service/Game/GameService.cs index 74d19549..0a7d033a 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(); } /// From bf08ffa89e6f30ec09caa318646edb1d9362e88c Mon Sep 17 00:00:00 2001 From: solacens Date: Tue, 3 Jan 2023 12:20:13 +1100 Subject: [PATCH 3/3] Missing changes --- .../GachaLogUrlWebCacheProvider.cs | 11 ++++- .../Game/Locator/UnityLogGameLocator.cs | 46 +++++++++++++------ 2 files changed, 43 insertions(+), 14 deletions(-) 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 1626fa4c..f7a02c5f 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/Locator/UnityLogGameLocator.cs b/src/Snap.Hutao/Snap.Hutao/Service/Game/Locator/UnityLogGameLocator.cs index 5a61b6bf..c783ee2e 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 (TemporaryFile? tempFile = TemporaryFile.CreateFromFileCopy(logFilePath)) + using (TemporaryFile? tempFile = TemporaryFile.CreateFromFileCopy(logFilePath), tempFileIntl = TemporaryFile.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