UserSaveManagerViewModel.cs
1 using DynamicData; 2 using DynamicData.Binding; 3 using Ryujinx.Ava.Common.Locale; 4 using Ryujinx.Ava.UI.Models; 5 using Ryujinx.HLE.HOS.Services.Account.Acc; 6 using System.Collections.Generic; 7 using System.Collections.ObjectModel; 8 9 namespace Ryujinx.Ava.UI.ViewModels 10 { 11 public class UserSaveManagerViewModel : BaseModel 12 { 13 private int _sortIndex; 14 private int _orderIndex; 15 private string _search; 16 private ObservableCollection<SaveModel> _saves = new(); 17 private ObservableCollection<SaveModel> _views = new(); 18 private readonly AccountManager _accountManager; 19 20 public string SaveManagerHeading => LocaleManager.Instance.UpdateAndGetDynamicValue(LocaleKeys.SaveManagerHeading, _accountManager.LastOpenedUser.Name, _accountManager.LastOpenedUser.UserId); 21 22 public int SortIndex 23 { 24 get => _sortIndex; 25 set 26 { 27 _sortIndex = value; 28 OnPropertyChanged(); 29 Sort(); 30 } 31 } 32 33 public int OrderIndex 34 { 35 get => _orderIndex; 36 set 37 { 38 _orderIndex = value; 39 OnPropertyChanged(); 40 Sort(); 41 } 42 } 43 44 public string Search 45 { 46 get => _search; 47 set 48 { 49 _search = value; 50 OnPropertyChanged(); 51 Sort(); 52 } 53 } 54 55 public ObservableCollection<SaveModel> Saves 56 { 57 get => _saves; 58 set 59 { 60 _saves = value; 61 OnPropertyChanged(); 62 Sort(); 63 } 64 } 65 66 public ObservableCollection<SaveModel> Views 67 { 68 get => _views; 69 set 70 { 71 _views = value; 72 OnPropertyChanged(); 73 } 74 } 75 76 public UserSaveManagerViewModel(AccountManager accountManager) 77 { 78 _accountManager = accountManager; 79 } 80 81 public void Sort() 82 { 83 Saves.AsObservableChangeSet() 84 .Filter(Filter) 85 .Sort(GetComparer()) 86 .Bind(out var view).AsObservableList(); 87 88 _views.Clear(); 89 _views.AddRange(view); 90 OnPropertyChanged(nameof(Views)); 91 } 92 93 private bool Filter(object arg) 94 { 95 if (arg is SaveModel save) 96 { 97 return string.IsNullOrWhiteSpace(_search) || save.Title.ToLower().Contains(_search.ToLower()); 98 } 99 100 return false; 101 } 102 103 private IComparer<SaveModel> GetComparer() 104 { 105 return SortIndex switch 106 { 107 0 => OrderIndex == 0 108 ? SortExpressionComparer<SaveModel>.Ascending(save => save.Title) 109 : SortExpressionComparer<SaveModel>.Descending(save => save.Title), 110 1 => OrderIndex == 0 111 ? SortExpressionComparer<SaveModel>.Ascending(save => save.Size) 112 : SortExpressionComparer<SaveModel>.Descending(save => save.Size), 113 _ => null, 114 }; 115 } 116 } 117 }