Skip to content

Commit

Permalink
feat(storage): Extract MIME type from extension resolution to a dedic…
Browse files Browse the repository at this point in the history
…ated service
  • Loading branch information
dr1rrb committed Oct 16, 2020
1 parent 84f3d13 commit 5da461a
Show file tree
Hide file tree
Showing 3 changed files with 92 additions and 82 deletions.
91 changes: 91 additions & 0 deletions src/Uno.UWP/Storage/MimeTypeService.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,91 @@
#nullable enable

namespace Windows.Storage
{
internal static class MimeTypeService
{
/// <summary>
/// Gets the MIME type from the file extension (a.k.a. file type)
/// </summary>
public static string GetFromFileExtension(string? extension)
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types
=> extension?.ToLowerInvariant() switch
{
".aac" => "audio/aac",
".abw" => "application/x-abiword",
".arc" => "application/x-freearc",
".avi" => "video/x-msvideo",
".azw" => "application/vnd.amazon.ebook",
".bin" => "application/octet-stream",
".bmp" => "image/bmp",
".bz" => "application/x-bzip",
".bz2" => "application/x-bzip2",
".csh" => "application/x-csh",
".css" => "text/css",
".csv" => "text/csv",
".doc" => "application/msword",
".docx" => "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
".eot" => "application/vnd.ms-fontobject",
".epub" => "application/epub+zip",
".gz" => "application/gzip",
".gif" => "image/gif",
".htm" => "text/html",
".html" => "text/html",
".ico" => "image/vnd.microsoft.icon",
".ics" => "text/calendar",
".jar" => "application/java-archive",
".jpeg" => "image/jpeg",
".jpg" => "image/jpeg",
".js" => "text/javascript",
".json" => "application/json",
".jsonld" => "application/ld+json",
".mid" => "audio/midi",
".midi" => "audio/midi",
".mjs" => "text/javascript",
".mp3" => "audio/mpeg",
".mpeg" => "video/mpeg",
".mpkg" => "application/vnd.apple.installer+xml",
".odp" => "application/vnd.oasis.opendocument.presentation",
".ods" => "application/vnd.oasis.opendocument.spreadsheet",
".odt" => "application/vnd.oasis.opendocument.text",
".oga" => "audio/ogg",
".ogv" => "video/ogg",
".ogx" => "application/ogg",
".opus" => "audio/opus",
".otf" => "font/otf",
".png" => "image/png",
".pdf" => "application/pdf",
".php" => "application/x-httpd-php",
".ppt" => "application/vnd.ms-powerpoint",
".pptx" => "application/vnd.openxmlformats-officedocument.presentationml.presentation",
".rar" => "application/vnd.rar",
".rtf" => "application/rtf",
".sh" => "application/x-sh",
".svg" => "image/svg+xml",
".swf" => "application/x-shockwave-flash",
".tar" => "application/x-tar",
".tif" => "image/tiff",
".tiff" => "image/tiff",
".ts" => "video/mp2t",
".ttf" => "font/ttf",
".txt" => "text/plain",
".vsd" => "application/vnd.visio",
".wav" => "audio/wav",
".weba" => "audio/webm",
".webm" => "video/webm",
".webp" => "image/webp",
".woff" => "font/woff",
".woff2" => "font/woff2",
".xhtml" => "application/xhtml+xml",
".xls" => "application/vnd.ms-excel",
".xlsx" => "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
".xml" => "application/xml",
".xul" => "application/vnd.mozilla.xul+xml",
".zip" => "application/zip",
".3gp" => "video/3gpp",
".3g2" => "video/3gpp2",
".7z" => "application/x-7z-compressed",
_ => "application/octet-stream",
};
}
}
2 changes: 1 addition & 1 deletion src/Uno.UWP/Storage/StorageFile.Base.cs
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ public void InitOwner(StorageFile owner)

public virtual string DisplayName => global::System.IO.Path.GetFileNameWithoutExtension(Path);

public virtual string ContentType => GetContentTypeFromFileType(FileType);
public virtual string ContentType => MimeTypeService.GetFromFileExtension(FileType);

public abstract DateTimeOffset DateCreated { get; }

Expand Down
81 changes: 0 additions & 81 deletions src/Uno.UWP/Storage/StorageFile.cs
Original file line number Diff line number Diff line change
Expand Up @@ -221,87 +221,6 @@ private static async Task<StorageFile> CreateDestination(CancellationToken ct, I

return await destinationFolder.CreateFileAsync(desiredNewName, creationOption).AsTask(ct);
}

private static string GetContentTypeFromFileType(string fileType)
// https://developer.mozilla.org/en-US/docs/Web/HTTP/Basics_of_HTTP/MIME_types/Common_types
=> fileType.ToLowerInvariant() switch
{
".aac" => "audio/aac",
".abw" => "application/x-abiword",
".arc" => "application/x-freearc",
".avi" => "video/x-msvideo",
".azw" => "application/vnd.amazon.ebook",
".bin" => "application/octet-stream",
".bmp" => "image/bmp",
".bz" => "application/x-bzip",
".bz2" => "application/x-bzip2",
".csh" => "application/x-csh",
".css" => "text/css",
".csv" => "text/csv",
".doc" => "application/msword",
".docx" => "application/vnd.openxmlformats-officedocument.wordprocessingml.document",
".eot" => "application/vnd.ms-fontobject",
".epub" => "application/epub+zip",
".gz" => "application/gzip",
".gif" => "image/gif",
".htm" => "text/html",
".html" => "text/html",
".ico" => "image/vnd.microsoft.icon",
".ics" => "text/calendar",
".jar" => "application/java-archive",
".jpeg" => "image/jpeg",
".jpg" => "image/jpeg",
".js" => "text/javascript",
".json" => "application/json",
".jsonld" => "application/ld+json",
".mid" => "audio/midi",
".midi" => "audio/midi",
".mjs" => "text/javascript",
".mp3" => "audio/mpeg",
".mpeg" => "video/mpeg",
".mpkg" => "application/vnd.apple.installer+xml",
".odp" => "application/vnd.oasis.opendocument.presentation",
".ods" => "application/vnd.oasis.opendocument.spreadsheet",
".odt" => "application/vnd.oasis.opendocument.text",
".oga" => "audio/ogg",
".ogv" => "video/ogg",
".ogx" => "application/ogg",
".opus" => "audio/opus",
".otf" => "font/otf",
".png" => "image/png",
".pdf" => "application/pdf",
".php" => "application/x-httpd-php",
".ppt" => "application/vnd.ms-powerpoint",
".pptx" => "application/vnd.openxmlformats-officedocument.presentationml.presentation",
".rar" => "application/vnd.rar",
".rtf" => "application/rtf",
".sh" => "application/x-sh",
".svg" => "image/svg+xml",
".swf" => "application/x-shockwave-flash",
".tar" => "application/x-tar",
".tif" => "image/tiff",
".tiff" => "image/tiff",
".ts" => "video/mp2t",
".ttf" => "font/ttf",
".txt" => "text/plain",
".vsd" => "application/vnd.visio",
".wav" => "audio/wav",
".weba" => "audio/webm",
".webm" => "video/webm",
".webp" => "image/webp",
".woff" => "font/woff",
".woff2" => "font/woff2",
".xhtml" => "application/xhtml+xml",
".xls" => "application/vnd.ms-excel",
".xlsx" => "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
".xml" => "application/xml",
".xul" => "application/vnd.mozilla.xul+xml",
".zip" => "application/zip",
".3gp" => "video/3gpp",
".3g2" => "video/3gpp2",
".7z" => "application/x-7z-compressed",
_ => "application/octet-stream",
};
#endregion
}
}

0 comments on commit 5da461a

Please sign in to comment.