Editor/AssetBrowserAddon/locations/ModelLocation.cs
using System.IO;
using System;
using System.Collections.Generic;
using System.Linq;
using Editor;
using Sandbox;

namespace Editor;

public record ModelLocation : LocalAssetBrowser.Location
{
    public override bool IsAggregate => true;

    public ModelLocation() : base("Models", "view_in_ar")
    {
        Path = "@models";
    }

    public override bool CanGoUp() => false;
    public override IEnumerable<LocalAssetBrowser.Location> GetDirectories() => Enumerable.Empty<LocalAssetBrowser.Location>();

    public override IEnumerable<FileInfo> GetFiles()
    {
        var materialExtensions = new HashSet<string>(StringComparer.OrdinalIgnoreCase)
        {
            ".vmdl"
        };

        return AssetSystem.All
            .Where(asset =>
            {
                var ext = System.IO.Path.GetExtension(asset.AbsolutePath);
                return materialExtensions.Contains(ext);
            })
            .OrderBy(asset => System.IO.Path.GetFileNameWithoutExtension(asset.AbsolutePath),
                StringComparer.OrdinalIgnoreCase)
            .Select(asset => new FileInfo(asset.AbsolutePath));
    }
}