Procházet zdrojové kódy

Fix Sorting Regression (#4032)

* Fix sorting regression + Remove unsued sort

* Fix GTK

* Attempt 2 to fix GTK

* Whoopsie

* Fix whitspace
Isaac Marovitz před 3 roky
rodič
revize
071c01c235

+ 0 - 45
Ryujinx.Ava/Ui/Models/FileSizeSortComparer.cs

@@ -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;
-            }
-        }
-    }
-}

+ 0 - 50
Ryujinx.Ava/Ui/Models/Generic/FileSizeSortComparer.cs

@@ -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;
-            }
-        }
-    }
-}

+ 0 - 66
Ryujinx.Ava/Ui/Models/Generic/TimePlayedSortComparer.cs

@@ -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;
-            }
-        }
-    }
-}

+ 0 - 27
Ryujinx.Ava/Ui/Models/LastPlayedSortComparer.cs

@@ -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));
-        }
-    }
-}

+ 0 - 61
Ryujinx.Ava/Ui/Models/TimePlayedSortComparer.cs

@@ -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;
-            }
-        }
-    }
-}

+ 4 - 2
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)

+ 2 - 0
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; }
     }

+ 2 - 0
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
                     };

+ 24 - 14
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;
             }