diff --git a/Ryujinx.Ava/UI/ViewModels/DownloadableContentManagerViewModel.cs b/Ryujinx.Ava/UI/ViewModels/DownloadableContentManagerViewModel.cs index d2fed435c..c8cd90f3c 100644 --- a/Ryujinx.Ava/UI/ViewModels/DownloadableContentManagerViewModel.cs +++ b/Ryujinx.Ava/UI/ViewModels/DownloadableContentManagerViewModel.cs @@ -33,8 +33,11 @@ namespace Ryujinx.Ava.UI.ViewModels private VirtualFileSystem _virtualFileSystem; private AvaloniaList _downloadableContents = new(); + private AvaloniaList _views = new(); private AvaloniaList _selectedDownloadableContents = new(); + private string _search; + private ulong _titleId; private string _titleName; @@ -46,6 +49,17 @@ namespace Ryujinx.Ava.UI.ViewModels _downloadableContents = value; OnPropertyChanged(); OnPropertyChanged(nameof(UpdateCount)); + Sort(); + } + } + + public AvaloniaList Views + { + get => _views; + set + { + _views = value; + OnPropertyChanged(); } } @@ -59,6 +73,17 @@ namespace Ryujinx.Ava.UI.ViewModels } } + public string Search + { + get => _search; + set + { + _search = value; + OnPropertyChanged(); + Sort(); + } + } + public string UpdateCount { get => string.Format(LocaleManager.Instance[LocaleKeys.DlcWindowHeading], DownloadableContents.Count); @@ -126,6 +151,28 @@ namespace Ryujinx.Ava.UI.ViewModels // NOTE: Save the list again to remove leftovers. Save(); + Sort(); + } + + public void Sort() + { + DownloadableContents.AsObservableChangeSet() + .Filter(Filter) + .Bind(out var view).AsObservableList(); + + _views.Clear(); + _views.AddRange(view); + OnPropertyChanged(nameof(Views)); + } + + private bool Filter(object arg) + { + if (arg is DownloadableContentModel content) + { + return string.IsNullOrWhiteSpace(_search) || content.FileName.ToLower().Contains(_search.ToLower()); + } + + return false; } private Nca TryOpenNca(IStorage ncaStorage, string containerPath) @@ -212,6 +259,7 @@ namespace Ryujinx.Ava.UI.ViewModels SelectedDownloadableContents.Add(content); OnPropertyChanged(nameof(UpdateCount)); + Sort(); containsDownloadableContent = true; } @@ -227,12 +275,14 @@ namespace Ryujinx.Ava.UI.ViewModels { DownloadableContents.Remove(model); OnPropertyChanged(nameof(UpdateCount)); + Sort(); } public void RemoveAll() { DownloadableContents.Clear(); OnPropertyChanged(nameof(UpdateCount)); + Sort(); } public void EnableAll() diff --git a/Ryujinx.Ava/UI/Windows/DownloadableContentManagerWindow.axaml b/Ryujinx.Ava/UI/Windows/DownloadableContentManagerWindow.axaml index 79401644a..f5ccaf29b 100644 --- a/Ryujinx.Ava/UI/Windows/DownloadableContentManagerWindow.axaml +++ b/Ryujinx.Ava/UI/Windows/DownloadableContentManagerWindow.axaml @@ -23,29 +23,42 @@ - - - - - - - + + + + + + + + + + + + + + Items="{Binding Views}">