aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Ryujinx.Ava/Ui/Models/FileSizeSortComparer.cs45
-rw-r--r--Ryujinx.Ava/Ui/Models/Generic/FileSizeSortComparer.cs50
-rw-r--r--Ryujinx.Ava/Ui/Models/Generic/TimePlayedSortComparer.cs66
-rw-r--r--Ryujinx.Ava/Ui/Models/LastPlayedSortComparer.cs27
-rw-r--r--Ryujinx.Ava/Ui/Models/TimePlayedSortComparer.cs61
-rw-r--r--Ryujinx.Ava/Ui/ViewModels/MainWindowViewModel.cs6
-rw-r--r--Ryujinx.Ui.Common/App/ApplicationData.cs2
-rw-r--r--Ryujinx.Ui.Common/App/ApplicationLibrary.cs2
-rw-r--r--Ryujinx/Ui/Helper/SortHelper.cs38
9 files changed, 32 insertions, 265 deletions
diff --git a/Ryujinx.Ava/Ui/Models/FileSizeSortComparer.cs b/Ryujinx.Ava/Ui/Models/FileSizeSortComparer.cs
deleted file mode 100644
index d4ac1412..00000000
--- 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 08b1754c..00000000
--- 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<ApplicationData>
- {
- 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 da26d195..00000000
--- 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<ApplicationData>
- {
- 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 c5c22fb2..00000000
--- 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 3613c8c7..00000000
--- 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 0db20792..f81afd2e 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<ApplicationData>.Ascending(app => app.FileSizeBytes)
+ : SortExpressionComparer<ApplicationData>.Descending(app => app.FileSizeBytes),
+ ApplicationSort.TotalTimePlayed => IsAscending ? SortExpressionComparer<ApplicationData>.Ascending(app => app.TimePlayedNum)
+ : SortExpressionComparer<ApplicationData>.Descending(app => app.TimePlayedNum),
ApplicationSort.Title => IsAscending ? SortExpressionComparer<ApplicationData>.Ascending(app => app.TitleName)
: SortExpressionComparer<ApplicationData>.Descending(app => app.TitleName),
ApplicationSort.Favorite => !IsAscending ? SortExpressionComparer<ApplicationData>.Ascending(app => app.Favorite)
diff --git a/Ryujinx.Ui.Common/App/ApplicationData.cs b/Ryujinx.Ui.Common/App/ApplicationData.cs
index 758a03ba..ba430172 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<ApplicationControlProperty> ControlHolder { get; set; }
}
diff --git a/Ryujinx.Ui.Common/App/ApplicationLibrary.cs b/Ryujinx.Ui.Common/App/ApplicationLibrary.cs
index 466b2b95..1af7dc06 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 33ae1bb2..4def8932 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;
}