using OpenArchival.Blazor.Components.Pages.ArchiveDisplay; using System.Collections.Generic; using System.Collections.Specialized; namespace OpenArchival.Blazor; public class FileDisplayComponentFactory { private Dictionary _extensionToComponents { get; set; } = []; public FileDisplayComponentFactory() { // Supported image file types taken from https://developer.mozilla.org/en-US/docs/Web/Media/Guides/Formats/Image_types RegisterComponent(".apng"); RegisterComponent(".png"); RegisterComponent(".avif"); RegisterComponent(".gif"); RegisterComponent(".jpg"); RegisterComponent(".jpeg"); RegisterComponent(".jfif"); RegisterComponent(".pjpeg"); RegisterComponent(".pjg"); RegisterComponent(".png"); RegisterComponent(".svg"); RegisterComponent(".webp"); } private string GetExtensionKey(string pathOrExtension) { return Path.GetExtension(pathOrExtension).ToUpperInvariant(); } public bool RegisterComponent(string filenameOrExtension) where ComponentType : IFileDisplayComponent { string extensionString = GetExtensionKey(filenameOrExtension); _extensionToComponents.Add(extensionString, typeof(ComponentType)); return true; } public Type? GetDisplayComponentType(string filenameOrExtension) { var result = _extensionToComponents.TryGetValue(GetExtensionKey(filenameOrExtension), out var component); return (result) ? component : null; } }