namespace OpenArchival.Blazor.FileViewer; using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; public static class FileViewerFactory { private static Dictionary _extensionMapping = []; static FileViewerFactory() { // Image types taken from https://developer.mozilla.org/en-US/docs/Web/Media/Guides/Formats/Image_types RegisterViewerComponent([".apng", ".png", ".avif", ".gif", ".jpg", ".jpeg", ".jfif", ".pjpeg", ".pjp", ".svg", ".webp"]); } public static void RegisterViewerComponent(IEnumerable extensions) where ComponentType : IFileViewer { foreach (var extension in extensions) { _extensionMapping.Add(extension, typeof(ComponentType)); } } public static Type GetViewerComponent(string filename) { if (_extensionMapping.TryGetValue(Path.GetExtension(filename).ToLowerInvariant(), out var componentType)) { return componentType; } else { return typeof(UnsupportedFileViewer); } } }