UserSaveManagerViewModel.cs 3.3 KB

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