diff --git a/assets/locales.json b/assets/locales.json index e8ede7844..e76ea9e9f 100644 --- a/assets/locales.json +++ b/assets/locales.json @@ -3197,6 +3197,31 @@ "zh_TW": "正在修剪 XCI 檔案 '{0}'" } }, + { + "ID": "StatusBarXCIFileScanning", + "Translations": { + "ar_SA": "", + "de_DE": "", + "el_GR": "", + "en_US": "Scanning XCI Files...", + "es_ES": "", + "fr_FR": "", + "he_IL": "", + "it_IT": "", + "ja_JP": "", + "ko_KR": "", + "no_NO": "", + "pl_PL": "", + "pt_BR": "", + "ru_RU": "", + "sv_SE": "", + "th_TH": "", + "tr_TR": "", + "uk_UA": "", + "zh_CN": "", + "zh_TW": "" + } + }, { "ID": "LinuxVmMaxMapCountDialogTitle", "Translations": { diff --git a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs index b0cd6a556..3f1393b47 100644 --- a/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/MainWindowViewModel.cs @@ -1845,7 +1845,7 @@ namespace Ryujinx.Ava.UI.ViewModels } } - public async void ProcessTrimResult(String filename, XCIFileTrimmer.OperationOutcome operationOutcome) + public async Task ProcessTrimResult(String filename, XCIFileTrimmer.OperationOutcome operationOutcome) { string notifyUser = operationOutcome.ToLocalisedText(); diff --git a/src/Ryujinx/UI/ViewModels/XciTrimmerViewModel.cs b/src/Ryujinx/UI/ViewModels/XciTrimmerViewModel.cs index ec9561896..f2a1bcc65 100644 --- a/src/Ryujinx/UI/ViewModels/XciTrimmerViewModel.cs +++ b/src/Ryujinx/UI/ViewModels/XciTrimmerViewModel.cs @@ -10,7 +10,6 @@ using Ryujinx.Ava.Systems.AppLibrary; using Ryujinx.Common.Utilities; using System.Collections.Generic; using System.Collections.ObjectModel; -using System.Globalization; using System.Linq; using System.Threading; using static Ryujinx.Common.Utilities.XCIFileTrimmer; @@ -57,11 +56,34 @@ namespace Ryujinx.Ava.UI.ViewModels private void LoadXCIApplications() { - IEnumerable apps = ApplicationLibrary.Applications.Items - .Where(app => app.FileExtension == _FileExtXCI); + try + { + _mainWindowViewModel.StatusBarProgressStatusText = LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.StatusBarXCIFileScanning); + _mainWindowViewModel.StatusBarProgressStatusVisible = true; + _mainWindowViewModel.StatusBarProgressMaximum = 1; + _mainWindowViewModel.StatusBarProgressValue = 0; + _mainWindowViewModel.StatusBarVisible = true; - foreach (ApplicationData xciApp in apps) - AddOrUpdateXCITrimmerFile(CreateXCITrimmerFile(xciApp.Path)); + IEnumerable apps = ApplicationLibrary.Applications.Items + .Where(app => app.FileExtension == _FileExtXCI).ToArray(); + + _mainWindowViewModel.StatusBarProgressMaximum = apps.Count(); + _mainWindowViewModel.StatusBarProgressValue = 0; + + int appsProcessed = 0; + foreach (ApplicationData xciApp in apps) + { + AddOrUpdateXCITrimmerFile(CreateXCITrimmerFile(xciApp.Path)); + _mainWindowViewModel.StatusBarProgressValue = ++appsProcessed; + Dispatcher.UIThread.InvokeAsync(() => { }, DispatcherPriority.Render).Wait(); + } + } + finally + { + _mainWindowViewModel.StatusBarProgressStatusVisible = false; + _mainWindowViewModel.StatusBarProgressStatusText = string.Empty; + _mainWindowViewModel.StatusBarVisible = false; + } ApplicationsChanged(); }