From 0d7f2a0b81ddd97039e8fd482ae4bb625f14f7d0 Mon Sep 17 00:00:00 2001 From: Drombeys Date: Tue, 30 Apr 2024 18:43:13 +0300 Subject: [PATCH] Add information about loading stage --- .../Manager/InitializerManager.cs | 57 ++++++++++++------- src/ImeSense.Launchers.Belarus/App.axaml.cs | 2 +- .../Assets/Locales/eng.axaml | 4 ++ .../Assets/Locales/rus.axaml | 4 ++ 4 files changed, 47 insertions(+), 20 deletions(-) diff --git a/src/ImeSense.Launchers.Belarus.Core/Manager/InitializerManager.cs b/src/ImeSense.Launchers.Belarus.Core/Manager/InitializerManager.cs index 80a89bc..887d783 100644 --- a/src/ImeSense.Launchers.Belarus.Core/Manager/InitializerManager.cs +++ b/src/ImeSense.Launchers.Belarus.Core/Manager/InitializerManager.cs @@ -29,15 +29,18 @@ public class InitializerManager( public void InitializeLocale() { - var userSettings = _userManager.UserSettings ?? - throw new Exception("Error loading user config!"); - - if (userSettings.Locale is null) { + if (_userManager is null) { + throw new NullReferenceException("User manager object is null"); + } + if (_userManager.UserSettings is null) { + throw new NullReferenceException("User settings object is null"); + } + if (_userManager.UserSettings.Locale is null) { _logger?.LogError("Locale was not set"); - userSettings.Locale = _launcherStorage.Locales[0]; + _userManager.UserSettings.Locale = _launcherStorage.Locales[0]; } - _localeManager.SetLocale(userSettings.Locale.Key); + _localeManager.SetLocale(_userManager.UserSettings.Locale.Key); } public async Task InitializeAsync(ISplashScreenManager splashScreenManager) @@ -71,7 +74,11 @@ public async Task InitializeAsync(ISplashScreenManager splashScreenManager) if (_launcherStorage.IsCheckGitHubConnection) { await HandleOnlineInitializationAsync(splashScreenManager, stopwatch); } else { - await HandleOfflineInitializationAsync(splashScreenManager); + splashScreenManager.UpdateInformation(new InformationMessage( + _localeManager.GetStringByKey("LocalizedStrings.OffineLoading"), + _localeManager.GetStringByKey("LocalizedStrings.LoadLocalData"))); + + await HandleOfflineInitializationAsync(splashScreenManager.CancellationToken); } stopwatch.Stop(); @@ -92,6 +99,10 @@ private async Task HandleOnlineInitializationAsync(ISplashScreenManager splashSc throw new NullReferenceException("User settings object is null"); } + splashScreenManager.UpdateInformation(new InformationMessage( + _localeManager.GetStringByKey("LocalizedStrings.Loading"), + _localeManager.GetStringByKey("LocalizedStrings.CheckLauncherUpdate"))); + var isLauncherReleaseCurrent = await IsLauncherReleaseCurrentAsync(splashScreenManager.CancellationToken); _logger?.LogInformation("Check launcher update time: {Time}", stopwatch.ElapsedMilliseconds); if (!isLauncherReleaseCurrent) { @@ -104,6 +115,9 @@ private async Task HandleOnlineInitializationAsync(ISplashScreenManager splashSc return; } + splashScreenManager.UpdateInformation(new InformationMessage( + _localeManager.GetStringByKey("LocalizedStrings.Loading"), + _localeManager.GetStringByKey("LocalizedStrings.CheckGameUpdate"))); _launcherStorage.GitHubRelease = await _gitStorageApiService.GetLastReleaseAsync(cancellationToken: splashScreenManager.CancellationToken); _logger?.LogInformation("Check last release time: {Time}", stopwatch.ElapsedMilliseconds); @@ -111,14 +125,19 @@ private async Task HandleOnlineInitializationAsync(ISplashScreenManager splashSc _launcherStorage.IsUserAuthorized = File.Exists(PathStorage.LauncherSetting); if (_launcherStorage.IsGameReleaseCurrent) { - await HandleGameReleaseCurrentAsync(splashScreenManager); + splashScreenManager.UpdateInformation(new InformationMessage( + _localeManager.GetStringByKey("LocalizedStrings.Loading"), + _localeManager.GetStringByKey("LocalizedStrings.LoadLocalData"))); + + await HandleGameReleaseCurrentAsync(splashScreenManager.CancellationToken); } else { - await LoadRemoteContent(splashScreenManager, _userManager.UserSettings.Locale); + + await LoadRemoteContent(_userManager.UserSettings.Locale, splashScreenManager.CancellationToken); await Task.Factory.StartNew(() => RemoteLoadWebResourcesAsync(cancellationToken: splashScreenManager.CancellationToken)); } } - private async Task HandleGameReleaseCurrentAsync(ISplashScreenManager splashScreenManager) + private async Task HandleGameReleaseCurrentAsync(CancellationToken cancellationToken) { if (_userManager is null) { throw new NullReferenceException("User manager object is null"); @@ -127,7 +146,7 @@ private async Task HandleGameReleaseCurrentAsync(ISplashScreenManager splashScre throw new NullReferenceException("User settings object is null"); } - var contentNews = await LocaleLoadCacheAsync(PathStorage.NewsCache) ?? []; + var contentNews = await LocaleLoadCacheAsync(PathStorage.NewsCache, cancellationToken) ?? []; var isContentNews = contentNews.Any(x => x.Locale is not null && _userManager.UserSettings.Locale is not null @@ -135,18 +154,18 @@ x.Locale is not null if (isContentNews) { _launcherStorage.NewsContents = new(contentNews); } else { - await LoadRemoteContent(splashScreenManager, _userManager.UserSettings.Locale); + await LoadRemoteContent(_userManager.UserSettings.Locale, cancellationToken); } - var contentRes = await LocaleLoadCacheAsync(PathStorage.WebResourcesCache); + var contentRes = await LocaleLoadCacheAsync(PathStorage.WebResourcesCache, cancellationToken); if (contentRes is not null && contentRes.Count != 0) { _launcherStorage.WebResources = new(contentRes); } else { - await Task.Factory.StartNew(() => RemoteLoadWebResourcesAsync(cancellationToken: splashScreenManager.CancellationToken)); + await Task.Factory.StartNew(() => RemoteLoadWebResourcesAsync(cancellationToken: cancellationToken)); } } - private async Task HandleOfflineInitializationAsync(ISplashScreenManager splashScreenManager) + private async Task HandleOfflineInitializationAsync(CancellationToken cancellationToken = default) { if (_userManager is null) { throw new NullReferenceException("User manager object is null"); @@ -161,15 +180,15 @@ private async Task HandleOfflineInitializationAsync(ISplashScreenManager splashS _launcherStorage.NewsContents = new(LoadErrorNews() ?? []); } - _launcherStorage.GitHubRelease = await FileDataHelper.LoadDataAsync(PathStorage.CurrentRelease, splashScreenManager.CancellationToken); + _launcherStorage.GitHubRelease = await FileDataHelper.LoadDataAsync(PathStorage.CurrentRelease, cancellationToken); } - private async Task LoadRemoteContent(ISplashScreenManager splashScreenManager, Locale? locale) + private async Task LoadRemoteContent(Locale? locale, CancellationToken cancellationToken = default) { if (_launcherStorage.IsUserAuthorized) { - await Task.Factory.StartNew(() => RemoteLoadNewsAsync(locale, splashScreenManager.CancellationToken), splashScreenManager.CancellationToken); + await Task.Factory.StartNew(() => RemoteLoadNewsAsync(locale, cancellationToken), cancellationToken); } else { - await Task.Factory.StartNew(() => RemoteLoadNewsAsync(cancellationToken: splashScreenManager.CancellationToken), splashScreenManager.CancellationToken); + await Task.Factory.StartNew(() => RemoteLoadNewsAsync(cancellationToken: cancellationToken), cancellationToken); } } diff --git a/src/ImeSense.Launchers.Belarus/App.axaml.cs b/src/ImeSense.Launchers.Belarus/App.axaml.cs index e05ea48..079d190 100644 --- a/src/ImeSense.Launchers.Belarus/App.axaml.cs +++ b/src/ImeSense.Launchers.Belarus/App.axaml.cs @@ -68,7 +68,7 @@ public override async void OnFrameworkInitializationCompleted() var userManager = _serviceProvider.GetRequiredService(); var splashScreenManager = _serviceProvider.GetRequiredService(); - splashScreenManager.MaxProgress = 3; + splashScreenManager.MaxProgress = 4; await userManager.LoadAsync(splashScreenManager.CancellationToken); initializerManager.InitializeLocale(); diff --git a/src/ImeSense.Launchers.Belarus/Assets/Locales/eng.axaml b/src/ImeSense.Launchers.Belarus/Assets/Locales/eng.axaml index 750f408..9aca50c 100644 --- a/src/ImeSense.Launchers.Belarus/Assets/Locales/eng.axaml +++ b/src/ImeSense.Launchers.Belarus/Assets/Locales/eng.axaml @@ -30,6 +30,10 @@ Message Cancel Loading + Offline loading Accessing the repository Data initialization + Checking for launcher updates + Checking for game updates + Loading local data diff --git a/src/ImeSense.Launchers.Belarus/Assets/Locales/rus.axaml b/src/ImeSense.Launchers.Belarus/Assets/Locales/rus.axaml index f84022a..4721d21 100644 --- a/src/ImeSense.Launchers.Belarus/Assets/Locales/rus.axaml +++ b/src/ImeSense.Launchers.Belarus/Assets/Locales/rus.axaml @@ -30,6 +30,10 @@ Сообщение Отменить Загрузка лаунчера + Offline загрузка Обращение к репозиторию Инициализация данных + Проверка обновлений лаунчера + Проверка обновлений игры + Загрузка локальных данных