From 251246fd74d069a9f3ea28e9c2e83bc926873bb9 Mon Sep 17 00:00:00 2001 From: HolographicHat Date: Fri, 2 Sep 2022 20:24:05 +0800 Subject: [PATCH] Fix --- res/App.Designer.cs | 9 +++++++ res/App.en.resx | 3 +++ res/App.resx | 3 +++ src/Utils.cs | 62 +++++++++++++++++++++++++++------------------ 4 files changed, 52 insertions(+), 25 deletions(-) diff --git a/res/App.Designer.cs b/res/App.Designer.cs index c3e21fd..96fa8f7 100644 --- a/res/App.Designer.cs +++ b/res/App.Designer.cs @@ -229,6 +229,15 @@ namespace YaeAchievement.res { } } + /// + /// Looks up a localized string similar to 网络错误: {0}. + /// + internal static string NetworkError { + get { + return ResourceManager.GetString("NetworkError", resourceCulture); + } + } + /// /// Looks up a localized string similar to 按任意键退出. /// diff --git a/res/App.en.resx b/res/App.en.resx index 266fe9b..ed8ea5f 100644 --- a/res/App.en.resx +++ b/res/App.en.resx @@ -124,4 +124,7 @@ Input a number (0-5): To fetch new data, Restart the application after delete cache\d1a8ef40a67a5929.miko. + + Network error: + \ No newline at end of file diff --git a/res/App.resx b/res/App.resx index 7696055..e9b573c 100644 --- a/res/App.resx +++ b/res/App.resx @@ -132,4 +132,7 @@ 要重新获取数据,手动删除 cache\d1a8ef40a67a5929.miko 后重新启动 YaeAchievement + + 网络错误: {0} + \ No newline at end of file diff --git a/src/Utils.cs b/src/Utils.cs index 31100b4..599148e 100644 --- a/src/Utils.cs +++ b/src/Utils.cs @@ -29,25 +29,31 @@ public static class Utils { }); public static byte[] GetBucketFileAsByteArray(string path, bool cache = true) { - using var msg = new HttpRequestMessage { - Method = HttpMethod.Get, - RequestUri = new Uri($"{GlobalVars.BucketHost}/{path}") - }; - var cacheFile = new CacheFile(path); - if (cache && cacheFile.Exists()) { - msg.Headers.TryAddWithoutValidation("If-None-Match", $"{cacheFile.Read().Etag}"); + try { + using var msg = new HttpRequestMessage { + Method = HttpMethod.Get, + RequestUri = new Uri($"{GlobalVars.BucketHost}/{path}") + }; + var cacheFile = new CacheFile(path); + if (cache && cacheFile.Exists()) { + msg.Headers.TryAddWithoutValidation("If-None-Match", $"{cacheFile.Read().Etag}"); + } + using var response = CHttpClient.Value.Send(msg); + if (cache && response.StatusCode == HttpStatusCode.NotModified) { + return cacheFile.Read().Content.ToByteArray(); + } + response.EnsureSuccessStatusCode(); + var responseBytes = response.Content.ReadAsByteArrayAsync().Result; + if (cache) { + var etag = response.Headers.ETag!.Tag; + cacheFile.Write(responseBytes, etag); + } + return responseBytes; + } catch (Exception e) { + Console.WriteLine(App.NetworkError, e.Message); + Environment.Exit(-1); + return null!; } - using var response = CHttpClient.Value.Send(msg); - if (cache && response.StatusCode == HttpStatusCode.NotModified) { - return cacheFile.Read().Content.ToByteArray(); - } - response.EnsureSuccessStatusCode(); - var responseBytes = response.Content.ReadAsByteArrayAsync().Result; - if (cache) { - var etag = response.Headers.ETag!.Tag; - cacheFile.Write(responseBytes, etag); - } - return responseBytes; } public static void CopyToClipboard(string text) { @@ -101,12 +107,16 @@ public static class Utils { } public static bool ShellOpen(string path) { - return new Process { - StartInfo = { - FileName = path, - UseShellExecute = true - } - }.Start(); + try { + return new Process { + StartInfo = { + FileName = path, + UseShellExecute = true + } + }.Start(); + } catch (Exception) { + return false; + } } public static bool CheckGamePathValid(string? path) { @@ -197,7 +207,9 @@ public static class Utils { var lib = Path.Combine(dataDir, "yae.dll"); File.Copy(Path.GetFullPath(GlobalVars.LibName), lib, true); AppDomain.CurrentDomain.ProcessExit += (_, _) => { - File.Delete(lib); + try { + File.Delete(lib); + } catch (Exception) { /* ignored */ } }; if (!Injector.CreateProcess(exePath, out var hProcess, out var hThread, out var pid)) { Environment.Exit(new Win32Exception().PrintMsgAndReturnErrCode("ICreateProcess fail"));