blob: e80984508ed14095be4c6d906e9a2db9d5c6634d (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
|
using Ryujinx.UI.App.Common;
using System;
namespace Ryujinx.Ava.UI.ViewModels
{
/// <summary>
/// Implements a custom comparer which is used for sorting titles by favorite on a UI.
/// Returns a sorted list of favorites in alphabetical order, followed by all non-favorites sorted alphabetical.
/// </summary>
public readonly struct AppListFavoriteComparable : IComparable
{
/// <summary>
/// The application data being compared.
/// </summary>
private readonly ApplicationData app;
/// <summary>
/// Constructs a new <see cref="AppListFavoriteComparable"/> with the specified application data.
/// </summary>
/// <param name="app">The app data being compared.</param>
public AppListFavoriteComparable(ApplicationData app)
{
ArgumentNullException.ThrowIfNull(app, nameof(app));
this.app = app;
}
/// <inheritdoc/>
public readonly int CompareTo(object o)
{
if (o is AppListFavoriteComparable other)
{
if (app.Favorite == other.app.Favorite)
{
return string.Compare(app.Name, other.app.Name, StringComparison.OrdinalIgnoreCase);
}
return app.Favorite ? -1 : 1;
}
throw new InvalidCastException($"Cannot cast {o.GetType()} to {nameof(AppListFavoriteComparable)}");
}
}
}
|