diff --git a/app/MindWork AI Studio/Tools/MIME/Builder.cs b/app/MindWork AI Studio/Tools/MIME/Builder.cs index 3a45b8db..97f86fef 100644 --- a/app/MindWork AI Studio/Tools/MIME/Builder.cs +++ b/app/MindWork AI Studio/Tools/MIME/Builder.cs @@ -8,6 +8,68 @@ public class Builder public static Builder Create() => new(); + public static MIMEType FromFilename(string filenameOrPath) + { + var extension = Path.GetExtension(filenameOrPath); + if (string.IsNullOrEmpty(extension)) + throw new ArgumentException("Filename or path does not have a valid extension.", nameof(filenameOrPath)); + + extension = extension.TrimStart('.').ToLowerInvariant(); + + var builder = Create(); + return extension switch + { + // Application types + "pdf" => builder.UseApplication().UseSubtype(ApplicationSubtype.PDF).Build(), + "zip" => builder.UseApplication().UseSubtype(ApplicationSubtype.ZIP).Build(), + "doc" => builder.UseApplication().UseSubtype(ApplicationSubtype.WORD_OLD).Build(), + "docx" => builder.UseApplication().UseSubtype(ApplicationSubtype.WORD).Build(), + "xls" => builder.UseApplication().UseSubtype(ApplicationSubtype.EXCEL_OLD).Build(), + "xlsx" => builder.UseApplication().UseSubtype(ApplicationSubtype.EXCEL).Build(), + "ppt" => builder.UseApplication().UseSubtype(ApplicationSubtype.POWERPOINT_OLD).Build(), + "pptx" => builder.UseApplication().UseSubtype(ApplicationSubtype.POWERPOINT).Build(), + "json" => builder.UseApplication().UseSubtype(ApplicationSubtype.JSON).Build(), + "xml" => builder.UseApplication().UseSubtype(ApplicationSubtype.XML).Build(), + + // Text types + "txt" => builder.UseText().UseSubtype(TextSubtype.PLAIN).Build(), + "html" or "htm" => builder.UseText().UseSubtype(TextSubtype.HTML).Build(), + "css" => builder.UseText().UseSubtype(TextSubtype.CSS).Build(), + "csv" => builder.UseText().UseSubtype(TextSubtype.CSV).Build(), + "js" => builder.UseText().UseSubtype(TextSubtype.JAVASCRIPT).Build(), + "md" or "markdown" => builder.UseText().UseSubtype(TextSubtype.MARKDOWN).Build(), + + // Audio types + "wav" => builder.UseAudio().UseSubtype(AudioSubtype.WAV).Build(), + "mp3" => builder.UseAudio().UseSubtype(AudioSubtype.MP3).Build(), + "ogg" => builder.UseAudio().UseSubtype(AudioSubtype.OGG).Build(), + "aac" => builder.UseAudio().UseSubtype(AudioSubtype.AAC).Build(), + "flac" => builder.UseAudio().UseSubtype(AudioSubtype.FLAC).Build(), + "m4a" => builder.UseAudio().UseSubtype(AudioSubtype.M4A).Build(), + "aiff" or "aif" => builder.UseAudio().UseSubtype(AudioSubtype.AIFF).Build(), + "mpga" => builder.UseAudio().UseSubtype(AudioSubtype.MPEG).Build(), + "webm" => builder.UseAudio().UseSubtype(AudioSubtype.WEBM).Build(), + + // Image types + "jpg" or "jpeg" => builder.UseImage().UseSubtype(ImageSubtype.JPEG).Build(), + "png" => builder.UseImage().UseSubtype(ImageSubtype.PNG).Build(), + "gif" => builder.UseImage().UseSubtype(ImageSubtype.GIF).Build(), + "tiff" or "tif" => builder.UseImage().UseSubtype(ImageSubtype.TIFF).Build(), + "webp" => builder.UseImage().UseSubtype(ImageSubtype.WEBP).Build(), + "svg" => builder.UseImage().UseSubtype(ImageSubtype.SVG).Build(), + "heic" => builder.UseImage().UseSubtype(ImageSubtype.HEIC).Build(), + + // Video types + "mp4" => builder.UseVideo().UseSubtype(VideoSubtype.MP4).Build(), + "avi" => builder.UseVideo().UseSubtype(VideoSubtype.AVI).Build(), + "mov" => builder.UseVideo().UseSubtype(VideoSubtype.MOV).Build(), + "mkv" => builder.UseVideo().UseSubtype(VideoSubtype.MKV).Build(), + "mpeg" or "mpg" => builder.UseVideo().UseSubtype(VideoSubtype.MPEG).Build(), + + _ => throw new ArgumentException($"Unsupported file extension: '.{extension}'.", nameof(filenameOrPath)) + }; + } + public static MIMEType FromTextRepresentation(string textRepresentation) { var parts = textRepresentation.Split('/');