diff --git a/src/Starward.Language/Lang.Designer.cs b/src/Starward.Language/Lang.Designer.cs index a2816bc97..1a8b87fd1 100644 --- a/src/Starward.Language/Lang.Designer.cs +++ b/src/Starward.Language/Lang.Designer.cs @@ -2314,6 +2314,24 @@ public static string SelectGamePage_TheLastStep { } } + /// + /// 查找类似 Are you able to receive updates for Starward? 的本地化字符串。 + /// + public static string SelectLanguagePage_AreYouAbleToReceiveUpdatesForStarward { + get { + return ResourceManager.GetString("SelectLanguagePage_AreYouAbleToReceiveUpdatesForStarward", resourceCulture); + } + } + + /// + /// 查找类似 Network Test 的本地化字符串。 + /// + public static string SelectLanguagePage_NetworkTest { + get { + return ResourceManager.GetString("SelectLanguagePage_NetworkTest", resourceCulture); + } + } + /// /// 查找类似 Account Records 的本地化字符串。 /// diff --git a/src/Starward.Language/Lang.resx b/src/Starward.Language/Lang.resx index 74600415c..eb1ac33bc 100644 --- a/src/Starward.Language/Lang.resx +++ b/src/Starward.Language/Lang.resx @@ -1244,4 +1244,10 @@ Do you accept the risk and continue to use it? Disable red dot reminder for game notices + + Network Test + + + Are you able to receive updates for Starward? + \ No newline at end of file diff --git a/src/Starward.Language/Lang.zh-CN.resx b/src/Starward.Language/Lang.zh-CN.resx index df763c941..2763535f0 100644 --- a/src/Starward.Language/Lang.zh-CN.resx +++ b/src/Starward.Language/Lang.zh-CN.resx @@ -1243,4 +1243,10 @@ 禁用游戏通知的红点提醒 + + 您是否能接收到 Starward 的更新? + + + 网络测试 + \ No newline at end of file diff --git a/src/Starward/AppConfig.cs b/src/Starward/AppConfig.cs index c48dab80c..6a605253b 100644 --- a/src/Starward/AppConfig.cs +++ b/src/Starward/AppConfig.cs @@ -240,7 +240,7 @@ private static void BuildServiceProvider() sc.AddSingleton(); sc.AddSingleton(); sc.AddSingleton(); - sc.AddSingleton(p => new MetadataClient(ApiCDNIndex, p.GetService())); + sc.AddSingleton(); sc.AddSingleton(); sc.AddSingleton(); @@ -289,13 +289,6 @@ public static ILogger GetLogger() - public static int ApiCDNIndex - { - get => GetValue(); - set => SetValue(value); - } - - public static bool EnablePreviewRelease { get => GetValue(); diff --git a/src/Starward/MyWindows/WelcomeWindow.xaml.cs b/src/Starward/MyWindows/WelcomeWindow.xaml.cs index 6ed9bc65d..90d4a336b 100644 --- a/src/Starward/MyWindows/WelcomeWindow.xaml.cs +++ b/src/Starward/MyWindows/WelcomeWindow.xaml.cs @@ -77,8 +77,6 @@ public void NavigateTo(Type page, object parameter, NavigationTransitionInfo inf public int WindowSizeMode { get; set; } - public int ApiCDNIndex { get; set; } - public string UserDataFolder { get; set; } @@ -103,7 +101,6 @@ public void Reset() { TextLanguage = null!; WindowSizeMode = 0; - ApiCDNIndex = 0; UserDataFolder = null!; } @@ -115,7 +112,6 @@ public void ApplySetting() AppConfig.UserDataFolder = UserDataFolder; AppConfig.Language = TextLanguage; AppConfig.WindowSizeMode = WindowSizeMode; - AppConfig.ApiCDNIndex = ApiCDNIndex; } diff --git a/src/Starward/Pages/Welcome/SelectLanguagePage.xaml b/src/Starward/Pages/Welcome/SelectLanguagePage.xaml index 5d9d9a50e..32108ea20 100644 --- a/src/Starward/Pages/Welcome/SelectLanguagePage.xaml +++ b/src/Starward/Pages/Welcome/SelectLanguagePage.xaml @@ -34,18 +34,11 @@ Stretch="Uniform" /> - - - + - + - + - + + + - - + + - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/src/Starward/Pages/Welcome/SelectLanguagePage.xaml.cs b/src/Starward/Pages/Welcome/SelectLanguagePage.xaml.cs index 0431e2393..1e599e14d 100644 --- a/src/Starward/Pages/Welcome/SelectLanguagePage.xaml.cs +++ b/src/Starward/Pages/Welcome/SelectLanguagePage.xaml.cs @@ -7,7 +7,6 @@ using Microsoft.UI.Xaml; using Microsoft.UI.Xaml.Controls; using Microsoft.UI.Xaml.Media.Animation; -using Starward.Core.Metadata; using System; using System.ComponentModel; using System.Diagnostics; @@ -31,8 +30,6 @@ public sealed partial class SelectLanguagePage : PageBase private readonly HttpClient _httpClient = AppConfig.GetService(); - private readonly MetadataClient _metadataClient = AppConfig.GetService(); - public SelectLanguagePage() { @@ -46,33 +43,28 @@ public SelectLanguagePage() private async void Page_Loaded(object sender, RoutedEventArgs e) { - await Task.Delay(480); + await Task.Delay(600); SettingGridLoad = true; InitializeLanguageComboBox(); - WelcomeWindow.Current.ApiCDNIndex = AppConfig.ApiCDNIndex; - switch (AppConfig.ApiCDNIndex) - { - case 1: RadioButton_GH.IsChecked = true; break; - case 2: RadioButton_JD.IsChecked = true; break; - default: RadioButton_CF.IsChecked = true; break; - } - WelcomeWindow.Current.WindowSizeMode = AppConfig.WindowSizeMode; - switch (AppConfig.WindowSizeMode) - { - case 1: RadioButton_WindowSize_Small.IsChecked = true; break; - default: RadioButton_WindowSize_Normal.IsChecked = true; break; - } - TestCDNCommand.Execute(null); + IntializeWindowSize(); + TestSpeedCommand.Execute(null); } - private void Grid_OverMask_Loaded(object sender, RoutedEventArgs e) + [RelayCommand] + private void Next() { - Grid_OverMask.Visibility = Visibility.Collapsed; + WelcomeWindow.Current.NavigateTo(typeof(SelectDirectoryPage), null!, new SlideNavigationTransitionInfo { Effect = SlideNavigationTransitionEffect.FromRight }); } + + + #region Language + + + private bool enableSelectionChanged = false; @@ -104,15 +96,64 @@ private void InitializeLanguageComboBox() } - - [RelayCommand] - private void Next() + private void ComboBox_Language_SelectionChanged(object sender, SelectionChangedEventArgs e) { - WelcomeWindow.Current.NavigateTo(typeof(SelectDirectoryPage), null!, new SlideNavigationTransitionInfo { Effect = SlideNavigationTransitionEffect.FromRight }); + try + { + if (ComboBox_Language.SelectedItem is ComboBoxItem item) + { + if (enableSelectionChanged) + { + var lang = item.Tag as string; + _logger.LogInformation("Language change to {lang}", lang); + WelcomeWindow.Current.TextLanguage = lang!; + if (string.IsNullOrWhiteSpace(lang)) + { + CultureInfo.CurrentUICulture = CultureInfo.InstalledUICulture; + } + else + { + CultureInfo.CurrentUICulture = new CultureInfo(lang); + } + this.Bindings.Update(); + } + } + } + catch (CultureNotFoundException) + { + CultureInfo.CurrentUICulture = CultureInfo.InstalledUICulture; + } + catch (Exception ex) + { + _logger.LogError(ex, "Change Language"); + } } + #endregion + + + + #region Window Size + + + + private void IntializeWindowSize() + { + try + { + WelcomeWindow.Current.WindowSizeMode = AppConfig.WindowSizeMode; + switch (AppConfig.WindowSizeMode) + { + case 1: RadioButton_WindowSize_Small.IsChecked = true; break; + default: RadioButton_WindowSize_Normal.IsChecked = true; break; + } + } + catch { } + } + + private void RadioButton_WindowSize_Click(object sender, RoutedEventArgs e) { try @@ -135,135 +176,58 @@ private void RadioButton_WindowSize_Click(object sender, RoutedEventArgs e) + #endregion + + + + #region Speed Test + + + + [RelayCommand] - private async Task TestCDNAsync() + private async Task TestSpeedAsync() { try { - const string url_cf = "https://starward.scighost.com/metadata/test/test_10kb"; - const string url_gh = "https://raw.githubusercontent.com/Scighost/Starward/metadata/test/test_10kb"; - const string url_jd = "https://cdn.jsdelivr.net/gh/Scighost/Starward@metadata/test/test_10kb"; + const string url = "https://starward.scighost.com/metadata/test/test_100kb"; - TextBlock_TestCND_CF.Text = ""; - TextBlock_TestCDN_GH.Text = ""; - TextBlock_TestCDN_JD.Text = ""; + TextBlock_Delay.Text = ""; + TextBlock_Speed.Text = ""; - ProgressRing_TestCND_CF.Visibility = Visibility.Visible; - ProgressRing_TestCND_GH.Visibility = Visibility.Visible; - ProgressRing_TestCND_JD.Visibility = Visibility.Visible; var sw = Stopwatch.StartNew(); - - var cfTask = async () => + var response = await _httpClient.GetAsync(url, HttpCompletionOption.ResponseHeadersRead); + sw.Stop(); + TextBlock_Delay.Text = $"{sw.ElapsedMilliseconds}ms"; + sw.Start(); + var bytes = await response.Content.ReadAsByteArrayAsync(); + sw.Stop(); + double speed = bytes.Length / 1024.0 / sw.Elapsed.TotalSeconds; + if (speed < 1024) { - try - { - await _httpClient.GetByteArrayAsync(url_cf); - TextBlock_TestCND_CF.Text = $"{sw.ElapsedMilliseconds} ms"; - } - catch (HttpRequestException) - { - TextBlock_TestCND_CF.Text = Lang.Common_NetworkError; - } - finally - { - ProgressRing_TestCND_CF.Visibility = Visibility.Collapsed; - } - }; - - var ghTask = async () => - { - try - { - await _httpClient.GetByteArrayAsync(url_gh); - TextBlock_TestCDN_GH.Text = $"{sw.ElapsedMilliseconds} ms"; - } - catch (HttpRequestException) - { - TextBlock_TestCDN_GH.Text = Lang.Common_NetworkError; - } - finally - { - ProgressRing_TestCND_GH.Visibility = Visibility.Collapsed; - } - }; - - var jdTask = async () => + TextBlock_Speed.Text = $"{speed:0.00}KB/s"; + } + else { - try - { - await _httpClient.GetByteArrayAsync(url_jd); - TextBlock_TestCDN_JD.Text = $"{sw.ElapsedMilliseconds} ms"; - } - catch (HttpRequestException) - { - TextBlock_TestCDN_JD.Text = Lang.Common_NetworkError; - } - finally - { - ProgressRing_TestCND_JD.Visibility = Visibility.Collapsed; - } - }; - - await Task.WhenAll(cfTask(), ghTask(), jdTask()); + TextBlock_Speed.Text = $"{speed / 1024:0.00}MB/s"; + } } catch (Exception ex) { - _logger.LogError(ex, "Test CDN"); + TextBlock_Delay.Text = Lang.Common_NetworkError; + TextBlock_Speed.Text = ""; + _logger.LogError(ex, "Test Speed"); } } - private void RadioButton_CDN_Click(object sender, RoutedEventArgs e) - { - if (sender is FrameworkElement fe) - { - var index = fe.Tag switch - { - "gh" => 1, - "jd" => 2, - _ => 0, - }; - _metadataClient.SetApiPrefix(index); - WelcomeWindow.Current.ApiCDNIndex = index; - } - } + + #endregion - private void ComboBox_Language_SelectionChanged(object sender, SelectionChangedEventArgs e) - { - try - { - if (ComboBox_Language.SelectedItem is ComboBoxItem item) - { - if (enableSelectionChanged) - { - var lang = item.Tag as string; - _logger.LogInformation("Language change to {lang}", lang); - WelcomeWindow.Current.TextLanguage = lang!; - if (string.IsNullOrWhiteSpace(lang)) - { - CultureInfo.CurrentUICulture = CultureInfo.InstalledUICulture; - } - else - { - CultureInfo.CurrentUICulture = new CultureInfo(lang); - } - this.Bindings.Update(); - } - } - } - catch (CultureNotFoundException) - { - CultureInfo.CurrentUICulture = CultureInfo.InstalledUICulture; - } - catch (Exception ex) - { - _logger.LogError(ex, "Change Language"); - } - }