using Microsoft.UI.Dispatching;
using Microsoft.UI.Xaml.Media;
namespace FluidExplorer.Services.Icons;
///
/// 图标/缩略图服务:全部来自 Windows 外壳(imageres.dll 等系统图标库、IShellItemImageFactory),
/// 也就是资源管理器本身显示的那批原版图标,不做自制图标。
///
public interface IIconService
{
/// 系统小图标(16/32/48px 的多尺寸 HICON),用于列表与侧边栏。目录、驱动器、特殊文件夹同样走外壳。
Task GetIconAsync(string path, bool isDirectory, int size, CancellationToken cancellationToken);
/// 大缩略图(SIIGBF_THUMBNAILONLY + 图标回退),用于网格/磁贴视图。失败返回 null。
Task GetThumbnailAsync(string path, int size, CancellationToken cancellationToken);
/// 按扩展名取通用图标(同类型文件共用一个位图,命中率极高)。
Task GetExtensionIconAsync(string extension, int size, CancellationToken cancellationToken);
/// 取某个已知外壳文件夹(如 "shell:RecycleBinFolder"、"::{20D04FE0-3AEA-1069-A2D8-08002B30309D}")的图标。
ImageSource? GetSpecialFolderIcon(string parsingName, int size);
void ClearCache();
}
/// 图标服务需要在 UI 线程创建 ImageSource,构造时注入 DispatcherQueue。
public interface IIconServiceHost
{
DispatcherQueue DispatcherQueue { get; }
}