Procházet zdrojové kódy

UI: Show play time in one time unit, maxing out at hours.

Evan Husted před 1 rokem
rodič
revize
d75ce52bd4

+ 3 - 2
src/Ryujinx/UI/Controls/ApplicationListView.axaml

@@ -133,12 +133,13 @@
                                     Spacing="5">
                                     <TextBlock
                                         HorizontalAlignment="Stretch"
-                                        Text="{Binding TimePlayedString}"
+                                        Text="{Binding LastPlayedString}"
                                         TextAlignment="End"
                                         TextWrapping="Wrap" />
                                     <TextBlock
                                         HorizontalAlignment="Stretch"
-                                        Text="{Binding LastPlayedString}"
+                                        Text="{Binding TimePlayedString}"
+                                        IsVisible="{Binding HasPlayedPreviously}"
                                         TextAlignment="End"
                                         TextWrapping="Wrap" />
                                     <TextBlock

+ 7 - 0
src/Ryujinx/UI/Windows/SettingsWindow.axaml.cs

@@ -1,4 +1,6 @@
+using Avalonia;
 using Avalonia.Controls;
+using Avalonia.Input;
 using FluentAvalonia.Core;
 using FluentAvalonia.UI.Controls;
 using Ryujinx.Ava.Common.Locale;
@@ -23,6 +25,11 @@ namespace Ryujinx.Ava.UI.Windows
 
             InitializeComponent();
             Load();
+
+#if DEBUG
+            this.AttachDevTools(new KeyGesture(Key.F12, KeyModifiers.Alt));
+#endif
+            
         }
 
         public SettingsWindow()

+ 2 - 0
src/Ryujinx/Utilities/AppLibrary/ApplicationData.cs

@@ -37,6 +37,8 @@ namespace Ryujinx.Ava.Utilities.AppLibrary
 
         public string TimePlayedString => ValueFormatUtils.FormatTimeSpan(TimePlayed);
 
+        public bool HasPlayedPreviously => TimePlayedString != string.Empty;
+
         public string LastPlayedString => ValueFormatUtils.FormatDateTime(LastPlayed)?.Replace(" ", "\n");
 
         public string FileSizeString => ValueFormatUtils.FormatFileSize(FileSize);

+ 21 - 17
src/Ryujinx/Utilities/ValueFormatUtils.cs

@@ -1,3 +1,5 @@
+using Humanizer;
+using Humanizer.Localisation;
 using Ryujinx.Ava.Common.Locale;
 using System;
 using System.Globalization;
@@ -31,7 +33,7 @@ namespace Ryujinx.Ava.Utilities
             Gigabytes = 9,
             Terabytes = 10,
             Petabytes = 11,
-            Exabytes = 12,
+            Exabytes = 12
         }
 
         private const double SizeBase10 = 1000;
@@ -48,22 +50,24 @@ namespace Ryujinx.Ava.Utilities
         public static string FormatTimeSpan(TimeSpan? timeSpan)
         {
             if (!timeSpan.HasValue || timeSpan.Value.TotalSeconds < 1)
-            {
-                // Game was never played
-                return TimeSpan.Zero.ToString("c", CultureInfo.InvariantCulture);
-            }
-
-            if (timeSpan.Value.TotalDays < 1)
-            {
-                // Game was played for less than a day
-                return timeSpan.Value.ToString("c", CultureInfo.InvariantCulture);
-            }
-
-            // Game was played for more than a day
-            TimeSpan onlyTime = timeSpan.Value.Subtract(TimeSpan.FromDays(timeSpan.Value.Days));
-            string onlyTimeString = onlyTime.ToString("c", CultureInfo.InvariantCulture);
-
-            return $"{timeSpan.Value.Days}d, {onlyTimeString}";
+                return string.Empty;
+            
+            if (timeSpan.Value.TotalSeconds < 60)
+                return timeSpan.Value.Humanize(1, 
+                    countEmptyUnits: false, 
+                    maxUnit: TimeUnit.Second,
+                    minUnit: TimeUnit.Second);
+
+            if (timeSpan.Value.TotalMinutes < 60)
+                return timeSpan.Value.Humanize(1, 
+                    countEmptyUnits: false, 
+                    maxUnit: TimeUnit.Minute,
+                    minUnit: TimeUnit.Minute);
+            
+            return timeSpan.Value.Humanize(1, 
+                countEmptyUnits: false, 
+                maxUnit: TimeUnit.Hour, 
+                minUnit: TimeUnit.Hour);
         }
 
         /// <summary>