39 lines
1.1 KiB
C#
39 lines
1.1 KiB
C#
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<string, Type> _extensionMapping = [];
|
|
|
|
static FileViewerFactory() {
|
|
// Image types taken from https://developer.mozilla.org/en-US/docs/Web/Media/Guides/Formats/Image_types
|
|
RegisterViewerComponent<ImageViewer>([".apng", ".png", ".avif", ".gif", ".jpg", ".jpeg", ".jfif", ".pjpeg", ".pjp", ".svg", ".webp"]);
|
|
}
|
|
|
|
public static void RegisterViewerComponent<ComponentType>(IEnumerable<string> 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);
|
|
}
|
|
}
|
|
}
|