- add: Sorting in content viewer

This commit is contained in:
2025-03-16 09:44:54 +03:00
parent b76481bac9
commit 51741595c6

View File

@@ -97,7 +97,7 @@ public sealed partial class ContentBrowserViewModel : ViewModelBase , IViewModel
if(SearchText.Length > oldSearchText.Length)
AppendHistory(oldSearchText);
foreach (var (_, entryCh) in value.Childs) Entries.Add(entryCh);
foreach (var entryCh in value.Childs) Entries.Add(entryCh);
}
}
@@ -239,6 +239,7 @@ public sealed partial class ContentBrowserViewModel : ViewModelBase , IViewModel
public class ContentEntry
{
private readonly Dictionary<string, ContentEntry> _childs = new();
private readonly ContentBrowserViewModel _viewModel;
private HashApi _fileApi;
@@ -263,13 +264,8 @@ public class ContentEntry
public ContentEntry? Parent { get; private set; }
public bool IsRoot => Parent == null;
public IReadOnlyDictionary<string, ContentEntry> Childs => _childs.ToFrozenDictionary();
public Stream Open()
{
_fileApi.TryOpen(Item!.Value, out var stream);
return stream!;
}
//TODO: Remove LINQ later...
public IReadOnlyList<ContentEntry> Childs => _childs.Values.OrderBy(v => v,new ContentComparer()).ToList();
public bool TryOpen([NotNullWhen(true)] out Stream? stream,[NotNullWhen(true)] out RobustManifestItem? item){
stream = null;
@@ -424,4 +420,19 @@ public struct ContentPath
{
return Path;
}
}
public sealed class ContentComparer : IComparer<ContentEntry>
{
public int Compare(ContentEntry? x, ContentEntry? y)
{
if (ReferenceEquals(x, y)) return 0;
if (y is null) return 1;
if (x is null) return -1;
var iconComparison = string.Compare(x.IconPath, y.IconPath, StringComparison.Ordinal);
if (iconComparison != 0) return -iconComparison;
var nameComparison = string.Compare(x.Name, y.Name, StringComparison.Ordinal);
if (nameComparison != 0) return nameComparison;
return string.Compare(x.ServerName, y.ServerName, StringComparison.Ordinal);
}
}