From 071c01c235348a26961ba778ca198674755c6134 Mon Sep 17 00:00:00 2001 From: Isaac Marovitz <42140194+IsaacMarovitz@users.noreply.github.com> Date: Mon, 5 Dec 2022 20:40:06 -0500 Subject: [PATCH] Fix Sorting Regression (#4032) * Fix sorting regression + Remove unsued sort * Fix GTK * Attempt 2 to fix GTK * Whoopsie * Fix whitspace --- Ryujinx.Ava/Ui/Models/FileSizeSortComparer.cs | 45 ------------- .../Ui/Models/Generic/FileSizeSortComparer.cs | 50 -------------- .../Models/Generic/TimePlayedSortComparer.cs | 66 ------------------- .../Ui/Models/LastPlayedSortComparer.cs | 27 -------- .../Ui/Models/TimePlayedSortComparer.cs | 61 ----------------- .../Ui/ViewModels/MainWindowViewModel.cs | 6 +- Ryujinx.Ui.Common/App/ApplicationData.cs | 2 + Ryujinx.Ui.Common/App/ApplicationLibrary.cs | 2 + Ryujinx/Ui/Helper/SortHelper.cs | 38 +++++++---- 9 files changed, 32 insertions(+), 265 deletions(-) delete mode 100644 Ryujinx.Ava/Ui/Models/FileSizeSortComparer.cs delete mode 100644 Ryujinx.Ava/Ui/Models/Generic/FileSizeSortComparer.cs delete mode 100644 Ryujinx.Ava/Ui/Models/Generic/TimePlayedSortComparer.cs delete mode 100644 Ryujinx.Ava/Ui/Models/LastPlayedSortComparer.cs delete mode 100644 Ryujinx.Ava/Ui/Models/TimePlayedSortComparer.cs diff --git a/Ryujinx.Ava/Ui/Models/FileSizeSortComparer.cs b/Ryujinx.Ava/Ui/Models/FileSizeSortComparer.cs deleted file mode 100644 index d4ac1412f3..0000000000 --- a/Ryujinx.Ava/Ui/Models/FileSizeSortComparer.cs +++ /dev/null @@ -1,45 +0,0 @@ -using Ryujinx.Ui.App.Common; -using System.Collections; - -namespace Ryujinx.Ava.Ui.Models -{ - internal class FileSizeSortComparer : IComparer - { - public int Compare(object x, object y) - { - string aValue = (x as ApplicationData).TimePlayed; - string bValue = (y as ApplicationData).TimePlayed; - - if (aValue[^3..] == "GiB") - { - aValue = (float.Parse(aValue[0..^3]) * 1024).ToString(); - } - else - { - aValue = aValue[0..^3]; - } - - if (bValue[^3..] == "GiB") - { - bValue = (float.Parse(bValue[0..^3]) * 1024).ToString(); - } - else - { - bValue = bValue[0..^3]; - } - - if (float.Parse(aValue) > float.Parse(bValue)) - { - return -1; - } - else if (float.Parse(bValue) > float.Parse(aValue)) - { - return 1; - } - else - { - return 0; - } - } - } -} \ No newline at end of file diff --git a/Ryujinx.Ava/Ui/Models/Generic/FileSizeSortComparer.cs b/Ryujinx.Ava/Ui/Models/Generic/FileSizeSortComparer.cs deleted file mode 100644 index 08b1754c2b..0000000000 --- a/Ryujinx.Ava/Ui/Models/Generic/FileSizeSortComparer.cs +++ /dev/null @@ -1,50 +0,0 @@ -using Ryujinx.Ui.App.Common; -using System.Collections.Generic; - -namespace Ryujinx.Ava.Ui.Models.Generic -{ - internal class FileSizeSortComparer : IComparer - { - public FileSizeSortComparer() { } - public FileSizeSortComparer(bool isAscending) { _order = isAscending ? 1 : -1; } - - private int _order; - - public int Compare(ApplicationData x, ApplicationData y) - { - string aValue = x.FileSize; - string bValue = y.FileSize; - - if (aValue[^3..] == "GiB") - { - aValue = (float.Parse(aValue[0..^3]) * 1024).ToString(); - } - else - { - aValue = aValue[0..^3]; - } - - if (bValue[^3..] == "GiB") - { - bValue = (float.Parse(bValue[0..^3]) * 1024).ToString(); - } - else - { - bValue = bValue[0..^3]; - } - - if (float.Parse(aValue) > float.Parse(bValue)) - { - return -1 * _order; - } - else if (float.Parse(bValue) > float.Parse(aValue)) - { - return 1 * _order; - } - else - { - return 0; - } - } - } -} \ No newline at end of file diff --git a/Ryujinx.Ava/Ui/Models/Generic/TimePlayedSortComparer.cs b/Ryujinx.Ava/Ui/Models/Generic/TimePlayedSortComparer.cs deleted file mode 100644 index da26d1950a..0000000000 --- a/Ryujinx.Ava/Ui/Models/Generic/TimePlayedSortComparer.cs +++ /dev/null @@ -1,66 +0,0 @@ -using Ryujinx.Ui.App.Common; -using System.Collections.Generic; - -namespace Ryujinx.Ava.Ui.Models.Generic -{ - internal class TimePlayedSortComparer : IComparer - { - public TimePlayedSortComparer() { } - public TimePlayedSortComparer(bool isAscending) { _order = isAscending ? 1 : -1; } - - private int _order; - - public int Compare(ApplicationData x, ApplicationData y) - { - string aValue = x.TimePlayed; - string bValue = y.TimePlayed; - - if (aValue.Length > 4 && aValue[^4..] == "mins") - { - aValue = (float.Parse(aValue[0..^5]) * 60).ToString(); - } - else if (aValue.Length > 3 && aValue[^3..] == "hrs") - { - aValue = (float.Parse(aValue[0..^4]) * 3600).ToString(); - } - else if (aValue.Length > 4 && aValue[^4..] == "days") - { - aValue = (float.Parse(aValue[0..^5]) * 86400).ToString(); - } - else - { - aValue = aValue[0..^1]; - } - - if (bValue.Length > 4 && bValue[^4..] == "mins") - { - bValue = (float.Parse(bValue[0..^5]) * 60).ToString(); - } - else if (bValue.Length > 3 && bValue[^3..] == "hrs") - { - bValue = (float.Parse(bValue[0..^4]) * 3600).ToString(); - } - else if (bValue.Length > 4 && bValue[^4..] == "days") - { - bValue = (float.Parse(bValue[0..^5]) * 86400).ToString(); - } - else - { - bValue = bValue[0..^1]; - } - - if (float.Parse(aValue) > float.Parse(bValue)) - { - return -1 * _order; - } - else if (float.Parse(bValue) > float.Parse(aValue)) - { - return 1 * _order; - } - else - { - return 0; - } - } - } -} \ No newline at end of file diff --git a/Ryujinx.Ava/Ui/Models/LastPlayedSortComparer.cs b/Ryujinx.Ava/Ui/Models/LastPlayedSortComparer.cs deleted file mode 100644 index c5c22fb26f..0000000000 --- a/Ryujinx.Ava/Ui/Models/LastPlayedSortComparer.cs +++ /dev/null @@ -1,27 +0,0 @@ -using Ryujinx.Ui.App.Common; -using System; -using System.Collections; - -namespace Ryujinx.Ava.Ui.Models -{ - internal class LastPlayedSortComparer : IComparer - { - public int Compare(object x, object y) - { - string aValue = (x as ApplicationData).LastPlayed; - string bValue = (y as ApplicationData).LastPlayed; - - if (aValue == "Never") - { - aValue = DateTime.UnixEpoch.ToString(); - } - - if (bValue == "Never") - { - bValue = DateTime.UnixEpoch.ToString(); - } - - return DateTime.Compare(DateTime.Parse(bValue), DateTime.Parse(aValue)); - } - } -} \ No newline at end of file diff --git a/Ryujinx.Ava/Ui/Models/TimePlayedSortComparer.cs b/Ryujinx.Ava/Ui/Models/TimePlayedSortComparer.cs deleted file mode 100644 index 3613c8c7ca..0000000000 --- a/Ryujinx.Ava/Ui/Models/TimePlayedSortComparer.cs +++ /dev/null @@ -1,61 +0,0 @@ -using Ryujinx.Ui.App.Common; -using System.Collections; - -namespace Ryujinx.Ava.Ui.Models -{ - internal class TimePlayedSortComparer : IComparer - { - public int Compare(object x, object y) - { - string aValue = (x as ApplicationData).TimePlayed; - string bValue = (y as ApplicationData).TimePlayed; - - if (aValue.Length > 4 && aValue[^4..] == "mins") - { - aValue = (float.Parse(aValue[0..^5]) * 60).ToString(); - } - else if (aValue.Length > 3 && aValue[^3..] == "hrs") - { - aValue = (float.Parse(aValue[0..^4]) * 3600).ToString(); - } - else if (aValue.Length > 4 && aValue[^4..] == "days") - { - aValue = (float.Parse(aValue[0..^5]) * 86400).ToString(); - } - else - { - aValue = aValue[0..^1]; - } - - if (bValue.Length > 4 && bValue[^4..] == "mins") - { - bValue = (float.Parse(bValue[0..^5]) * 60).ToString(); - } - else if (bValue.Length > 3 && bValue[^3..] == "hrs") - { - bValue = (float.Parse(bValue[0..^4]) * 3600).ToString(); - } - else if (bValue.Length > 4 && bValue[^4..] == "days") - { - bValue = (float.Parse(bValue[0..^5]) * 86400).ToString(); - } - else - { - bValue = bValue[0..^1]; - } - - if (float.Parse(aValue) > float.Parse(bValue)) - { - return -1; - } - else if (float.Parse(bValue) > float.Parse(aValue)) - { - return 1; - } - else - { - return 0; - } - } - } -} \ No newline at end of file diff --git a/Ryujinx.Ava/Ui/ViewModels/MainWindowViewModel.cs b/Ryujinx.Ava/Ui/ViewModels/MainWindowViewModel.cs index 0db20792a0..f81afd2ebd 100644 --- a/Ryujinx.Ava/Ui/ViewModels/MainWindowViewModel.cs +++ b/Ryujinx.Ava/Ui/ViewModels/MainWindowViewModel.cs @@ -502,8 +502,10 @@ namespace Ryujinx.Ava.Ui.ViewModels return SortMode switch { ApplicationSort.LastPlayed => new Models.Generic.LastPlayedSortComparer(IsAscending), - ApplicationSort.FileSize => new Models.Generic.FileSizeSortComparer(IsAscending), - ApplicationSort.TotalTimePlayed => new Models.Generic.TimePlayedSortComparer(IsAscending), + ApplicationSort.FileSize => IsAscending ? SortExpressionComparer.Ascending(app => app.FileSizeBytes) + : SortExpressionComparer.Descending(app => app.FileSizeBytes), + ApplicationSort.TotalTimePlayed => IsAscending ? SortExpressionComparer.Ascending(app => app.TimePlayedNum) + : SortExpressionComparer.Descending(app => app.TimePlayedNum), ApplicationSort.Title => IsAscending ? SortExpressionComparer.Ascending(app => app.TitleName) : SortExpressionComparer.Descending(app => app.TitleName), ApplicationSort.Favorite => !IsAscending ? SortExpressionComparer.Ascending(app => app.Favorite) diff --git a/Ryujinx.Ui.Common/App/ApplicationData.cs b/Ryujinx.Ui.Common/App/ApplicationData.cs index 758a03babb..ba430172fd 100644 --- a/Ryujinx.Ui.Common/App/ApplicationData.cs +++ b/Ryujinx.Ui.Common/App/ApplicationData.cs @@ -12,9 +12,11 @@ namespace Ryujinx.Ui.App.Common public string Developer { get; set; } public string Version { get; set; } public string TimePlayed { get; set; } + public double TimePlayedNum { get; set; } public string LastPlayed { get; set; } public string FileExtension { get; set; } public string FileSize { get; set; } + public double FileSizeBytes { get; set; } public string Path { get; set; } public BlitStruct ControlHolder { get; set; } } diff --git a/Ryujinx.Ui.Common/App/ApplicationLibrary.cs b/Ryujinx.Ui.Common/App/ApplicationLibrary.cs index 466b2b9521..1af7dc064a 100644 --- a/Ryujinx.Ui.Common/App/ApplicationLibrary.cs +++ b/Ryujinx.Ui.Common/App/ApplicationLibrary.cs @@ -465,9 +465,11 @@ namespace Ryujinx.Ui.App.Common Developer = developer, Version = version, TimePlayed = ConvertSecondsToReadableString(appMetadata.TimePlayed), + TimePlayedNum = appMetadata.TimePlayed, LastPlayed = appMetadata.LastPlayed, FileExtension = Path.GetExtension(applicationPath).ToUpper().Remove(0, 1), FileSize = (fileSize < 1) ? (fileSize * 1024).ToString("0.##") + " MiB" : fileSize.ToString("0.##") + " GiB", + FileSizeBytes = fileSize, Path = applicationPath, ControlHolder = controlHolder }; diff --git a/Ryujinx/Ui/Helper/SortHelper.cs b/Ryujinx/Ui/Helper/SortHelper.cs index 33ae1bb284..4def89323d 100644 --- a/Ryujinx/Ui/Helper/SortHelper.cs +++ b/Ryujinx/Ui/Helper/SortHelper.cs @@ -9,46 +9,56 @@ namespace Ryujinx.Ui.Helper { string aValue = model.GetValue(a, 5).ToString(); string bValue = model.GetValue(b, 5).ToString(); + float aFloat; + float bFloat; - if (aValue.Length > 4 && aValue[^4..] == "mins") + if (aValue.Length > 7 && aValue[^7..] == "minutes") { - aValue = (float.Parse(aValue[0..^5]) * 60).ToString(); + aValue = aValue.Replace("minutes", ""); + aFloat = (float.Parse(aValue) * 60); } - else if (aValue.Length > 3 && aValue[^3..] == "hrs") + else if (aValue.Length > 5 && aValue[^5..] == "hours") { - aValue = (float.Parse(aValue[0..^4]) * 3600).ToString(); + aValue = aValue.Replace("hours", ""); + aFloat = (float.Parse(aValue) * 3600); } else if (aValue.Length > 4 && aValue[^4..] == "days") { - aValue = (float.Parse(aValue[0..^5]) * 86400).ToString(); + aValue = aValue.Replace("days", ""); + aFloat = (float.Parse(aValue) * 86400); } else { - aValue = aValue[0..^1]; + aValue = aValue.Replace("seconds", ""); + aFloat = float.Parse(aValue); } - if (bValue.Length > 4 && bValue[^4..] == "mins") + if (bValue.Length > 7 && bValue[^7..] == "minutes") { - bValue = (float.Parse(bValue[0..^5]) * 60).ToString(); + bValue = bValue.Replace("minutes", ""); + bFloat = (float.Parse(bValue) * 60); } - else if (bValue.Length > 3 && bValue[^3..] == "hrs") + else if (bValue.Length > 5 && bValue[^5..] == "hours") { - bValue = (float.Parse(bValue[0..^4]) * 3600).ToString(); + bValue = bValue.Replace("hours", ""); + bFloat = (float.Parse(bValue) * 3600); } else if (bValue.Length > 4 && bValue[^4..] == "days") { - bValue = (float.Parse(bValue[0..^5]) * 86400).ToString(); + bValue = bValue.Replace("days", ""); + bFloat = (float.Parse(bValue) * 86400); } else { - bValue = bValue[0..^1]; + bValue = bValue[0..^8]; + bFloat = float.Parse(bValue); } - if (float.Parse(aValue) > float.Parse(bValue)) + if (aFloat > bFloat) { return -1; } - else if (float.Parse(bValue) > float.Parse(aValue)) + else if (bFloat > aFloat) { return 1; }