From cdaf0dfd2fee124740182451e552ba4bb7199ce1 Mon Sep 17 00:00:00 2001 From: PopSlime Date: Sat, 21 Jun 2025 02:23:34 +0800 Subject: [PATCH] fix: Fix update checker by adding user agent --- Assets/Cryville/Crtr/Game.cs | 29 +++++++++++++++++++ Assets/Cryville/Crtr/Network/UpdateChecker.cs | 4 +-- 2 files changed, 31 insertions(+), 2 deletions(-) diff --git a/Assets/Cryville/Crtr/Game.cs b/Assets/Cryville/Crtr/Game.cs index 9366c61..8dbfe35 100644 --- a/Assets/Cryville/Crtr/Game.cs +++ b/Assets/Cryville/Crtr/Game.cs @@ -19,6 +19,7 @@ using Newtonsoft.Json; using System; using System.Globalization; using System.IO; +using System.Runtime.InteropServices; using System.Text; using System.Xml; using System.Xml.Linq; @@ -47,6 +48,8 @@ namespace Cryville.Crtr { static FileStream _logFileStream; static StreamLoggerListener _logWriter; + public static string UnityUserAgent { get; private set; } + static bool _init; public static void Init() { if (_init) return; @@ -177,6 +180,32 @@ namespace Cryville.Crtr { Settings.Default.LastRunVersion = Application.version; Settings.Default.Save(); +#if UNITY_EDITOR_WIN || UNITY_STANDALONE_WIN + UnityUserAgent = string.Format( + CultureInfo.InvariantCulture, + "CosmoResona/{0} (Windows NT {1}; {2})", + Application.version, + Environment.OSVersion.Version, + RuntimeInformation.OSArchitecture.ToString().ToLowerInvariant() + ); +#elif UNITY_ANDROID + var androidClassBuildVersion = AndroidJNI.FindClass("android/os/Build$VERSION"); + var androidRelease = AndroidJNI.GetStaticStringField(androidClassBuildVersion, AndroidJNI.GetStaticFieldID(androidClassBuildVersion, "RELEASE", "Ljava/lang/String;")); + var androidClassBuild = AndroidJNI.FindClass("android/os/Build"); + var androidModel = AndroidJNI.GetStaticStringField(androidClassBuild, AndroidJNI.GetStaticFieldID(androidClassBuild, "MODEL", "Ljava/lang/String;")); + var androidID = AndroidJNI.GetStaticStringField(androidClassBuild, AndroidJNI.GetStaticFieldID(androidClassBuild, "ID", "Ljava/lang/String;")); + UnityUserAgent = string.Format( + CultureInfo.InvariantCulture, + "CosmoResona/{0} (Linux; Android {1}; {2} Build/{3})", + Application.version, + androidRelease ?? "12.0.99", + androidModel, + androidID + ); +#else +#error No Unity User Agent +#endif + MainLogger.Log(1, "UI", "Initializing font manager"); foreach (var res in Resources.LoadAll("cldr/common/validity")) { IdValidity.Load(LoadXmlDocument(res)); diff --git a/Assets/Cryville/Crtr/Network/UpdateChecker.cs b/Assets/Cryville/Crtr/Network/UpdateChecker.cs index 1aafab8..2b1fc73 100644 --- a/Assets/Cryville/Crtr/Network/UpdateChecker.cs +++ b/Assets/Cryville/Crtr/Network/UpdateChecker.cs @@ -47,7 +47,7 @@ namespace Cryville.Crtr.Network { } void CheckVersion() { using (var client = new HttpClient()) { - client.Connect(); + client.DefaultRequestHeaders.UserAgent.ParseAdd(Game.UnityUserAgent); using var response = client.GetAsync(new Uri(BaseUri, "versions")).Result; var data = response.Content.ReadAsStringAsync().Result; _versions = JsonConvert.DeserializeObject>(data, Game.GlobalJsonSerializerSettings); @@ -132,7 +132,7 @@ namespace Cryville.Crtr.Network { void Download(VersionResourceInfo diff, string path) { var uri = new Uri(diff.url); using var client = new HttpClient(); - client.Connect(); + client.DefaultRequestHeaders.UserAgent.ParseAdd(Game.UnityUserAgent); using var response = client.GetAsync(uri).Result; using var stream = response.Content.ReadAsStreamAsync().Result; using var file = new FileStream(path, FileMode.Create, FileAccess.Write, FileShare.None);