diff --git a/ECommons b/ECommons index 1ee7e6583..ee1f83685 160000 --- a/ECommons +++ b/ECommons @@ -1 +1 @@ -Subproject commit 1ee7e658387e70f21596f920cfdd74e943194db5 +Subproject commit ee1f8368541e5f82e820bebae40731ee79862397 diff --git a/RotationSolver/Helpers/DownloadHelper.cs b/RotationSolver/Helpers/DownloadHelper.cs index c1694bfcf..28920260f 100644 --- a/RotationSolver/Helpers/DownloadHelper.cs +++ b/RotationSolver/Helpers/DownloadHelper.cs @@ -27,8 +27,8 @@ private static async Task DownloadOneAsync(string url) using var client = new HttpClient(); try { - var bts = await client.GetByteArrayAsync(url); - return JsonConvert.DeserializeObject(Encoding.Default.GetString(bts)); + var str = await client.GetStringAsync(url); + return JsonConvert.DeserializeObject(str); } catch (Exception ex) { diff --git a/RotationSolver/Localization/LocalizationManager.cs b/RotationSolver/Localization/LocalizationManager.cs index 929f8e126..eac0b5209 100644 --- a/RotationSolver/Localization/LocalizationManager.cs +++ b/RotationSolver/Localization/LocalizationManager.cs @@ -10,26 +10,15 @@ internal class LocalizationManager : IDisposable private readonly Dictionary _translations = new(); public LocalizationManager() { - var assembly = Assembly.GetCallingAssembly(); - - foreach (var lang in Dalamud.Localization.ApplicableLangCodes) - { - ReadFile(lang, assembly); - } - SetLanguage(Svc.PluginInterface.UiLanguage); Svc.PluginInterface.LanguageChanged += OnLanguageChange; - } +#if DEBUG + ExportLocalization(); +#endif - private void ReadFile(string lang, Assembly assembly) - { - Stream manifestResourceStream = assembly.GetManifestResourceStream("RotationSolver.Localization." + lang + ".json"); - if (manifestResourceStream == null) return; - using StreamReader streamReader = new(manifestResourceStream); - _translations[lang] = JsonConvert.DeserializeObject(streamReader.ReadToEnd()); } - private void SetLanguage(string lang) + private async void SetLanguage(string lang) { if (_translations.TryGetValue(lang, out var value)) { @@ -37,14 +26,29 @@ private void SetLanguage(string lang) } else { - RightLang = new Strings(); + try + { + var url = $"https://raw.githubusercontent.com/{Service.USERNAME}/{Service.REPO}/main/RotationSolver/Localization/{lang}.json"; + using var client = new HttpClient(); + RightLang = _translations[lang] = JsonConvert.DeserializeObject(await client.GetStringAsync(url)); + } + catch (HttpRequestException ex) when (ex?.StatusCode == System.Net.HttpStatusCode.NotFound) + { + Svc.Log.Information(ex, $"No language {lang}"); + RightLang = new Strings(); + } + catch (Exception ex) + { + Svc.Log.Warning(ex, $"Failed to download the language {lang}"); + RightLang = new Strings(); + } } RotationSolverPlugin.ChangeUITranslation(); } #if DEBUG - public static void ExportLocalization() + private static void ExportLocalization() { var directory = @"E:\OneDrive - stu.zafu.edu.cn\PartTime\FFXIV\RotationSolver\RotationSolver\Localization"; if (!Directory.Exists(directory)) return; diff --git a/RotationSolver/RotationSolver.csproj b/RotationSolver/RotationSolver.csproj index 50c6d2436..5dde2864b 100644 --- a/RotationSolver/RotationSolver.csproj +++ b/RotationSolver/RotationSolver.csproj @@ -13,11 +13,9 @@ - - diff --git a/RotationSolver/RotationSolverPlugin.cs b/RotationSolver/RotationSolverPlugin.cs index bcee98f27..7f5d422d2 100644 --- a/RotationSolver/RotationSolverPlugin.cs +++ b/RotationSolver/RotationSolverPlugin.cs @@ -81,9 +81,6 @@ public RotationSolverPlugin(DalamudPluginInterface pluginInterface) Watcher.Enable(); OtherConfiguration.Init(); _dis.Add(new LocalizationManager()); -#if DEBUG - LocalizationManager.ExportLocalization(); -#endif ChangeUITranslation(); OpenLinkPayload = pluginInterface.AddChatLinkHandler(0, (id, str) =>