1
0
mirror of https://github.com/moparisthebest/k-9 synced 2024-11-30 13:12:25 -05:00

It turns out that not every android release has a good extension to

mimetype mapping. restore our previous hardcoded mime database as a
fallback
This commit is contained in:
Jesse Vincent 2010-10-23 16:28:07 +00:00
parent fb059a8138
commit 105df4c61a

View File

@ -22,6 +22,207 @@ public class MimeUtility
{ {
public static final String DEFAULT_ATTACHMENT_MIME_TYPE = "application/octet-stream"; public static final String DEFAULT_ATTACHMENT_MIME_TYPE = "application/octet-stream";
/*
* http://www.w3schools.com/media/media_mimeref.asp
* + png
*/
public static final String[][] MIME_TYPE_BY_EXTENSION_MAP = new String[][]
{
{ "", "application/octet-stream" },
{ "323", "text/h323"},
{ "acx", "application/internet-property-stream"},
{ "ai", "application/postscript"},
{ "aif", "audio/x-aiff"},
{ "aifc", "audio/x-aiff"},
{ "aiff", "audio/x-aiff"},
{ "asf", "video/x-ms-asf"},
{ "asr", "video/x-ms-asf"},
{ "asx", "video/x-ms-asf"},
{ "au", "audio/basic"},
{ "avi", "video/x-msvideo"},
{ "axs", "application/olescript"},
{ "bas", "text/plain"},
{ "bcpio", "application/x-bcpio"},
{ "bin", "application/octet-stream"},
{ "bmp", "image/bmp"},
{ "c", "text/plain"},
{ "cat", "application/vnd.ms-pkiseccat"},
{ "cdf", "application/x-cdf"},
{ "cer", "application/x-x509-ca-cert"},
{ "class", "application/octet-stream"},
{ "clp", "application/x-msclip"},
{ "cmx", "image/x-cmx"},
{ "cod", "image/cis-cod"},
{ "cpio", "application/x-cpio"},
{ "crd", "application/x-mscardfile"},
{ "crl", "application/pkix-crl"},
{ "crt", "application/x-x509-ca-cert"},
{ "csh", "application/x-csh"},
{ "css", "text/css"},
{ "dcr", "application/x-director"},
{ "der", "application/x-x509-ca-cert"},
{ "dir", "application/x-director"},
{ "dll", "application/x-msdownload"},
{ "dms", "application/octet-stream"},
{ "doc", "application/msword"},
{ "dot", "application/msword"},
{ "dvi", "application/x-dvi"},
{ "dxr", "application/x-director"},
{ "eps", "application/postscript"},
{ "etx", "text/x-setext"},
{ "evy", "application/envoy"},
{ "exe", "application/octet-stream"},
{ "fif", "application/fractals"},
{ "flr", "x-world/x-vrml"},
{ "gif", "image/gif"},
{ "gtar", "application/x-gtar"},
{ "gz", "application/x-gzip"},
{ "h", "text/plain"},
{ "hdf", "application/x-hdf"},
{ "hlp", "application/winhlp"},
{ "hqx", "application/mac-binhex40"},
{ "hta", "application/hta"},
{ "htc", "text/x-component"},
{ "htm", "text/html"},
{ "html", "text/html"},
{ "htt", "text/webviewhtml"},
{ "ico", "image/x-icon"},
{ "ief", "image/ief"},
{ "iii", "application/x-iphone"},
{ "ins", "application/x-internet-signup"},
{ "isp", "application/x-internet-signup"},
{ "jfif", "image/pipeg"},
{ "jpe", "image/jpeg"},
{ "jpeg", "image/jpeg"},
{ "jpg", "image/jpeg"},
{ "js", "application/x-javascript"},
{ "latex", "application/x-latex"},
{ "lha", "application/octet-stream"},
{ "lsf", "video/x-la-asf"},
{ "lsx", "video/x-la-asf"},
{ "lzh", "application/octet-stream"},
{ "m13", "application/x-msmediaview"},
{ "m14", "application/x-msmediaview"},
{ "m3u", "audio/x-mpegurl"},
{ "man", "application/x-troff-man"},
{ "mdb", "application/x-msaccess"},
{ "me", "application/x-troff-me"},
{ "mht", "message/rfc822"},
{ "mhtml", "message/rfc822"},
{ "mid", "audio/mid"},
{ "mny", "application/x-msmoney"},
{ "mov", "video/quicktime"},
{ "movie", "video/x-sgi-movie"},
{ "mp2", "video/mpeg"},
{ "mp3", "audio/mpeg"},
{ "mpa", "video/mpeg"},
{ "mpe", "video/mpeg"},
{ "mpeg", "video/mpeg"},
{ "mpg", "video/mpeg"},
{ "mpp", "application/vnd.ms-project"},
{ "mpv2", "video/mpeg"},
{ "ms", "application/x-troff-ms"},
{ "mvb", "application/x-msmediaview"},
{ "nws", "message/rfc822"},
{ "oda", "application/oda"},
{ "p10", "application/pkcs10"},
{ "p12", "application/x-pkcs12"},
{ "p7b", "application/x-pkcs7-certificates"},
{ "p7c", "application/x-pkcs7-mime"},
{ "p7m", "application/x-pkcs7-mime"},
{ "p7r", "application/x-pkcs7-certreqresp"},
{ "p7s", "application/x-pkcs7-signature"},
{ "pbm", "image/x-portable-bitmap"},
{ "pdf", "application/pdf"},
{ "pfx", "application/x-pkcs12"},
{ "pgm", "image/x-portable-graymap"},
{ "pko", "application/ynd.ms-pkipko"},
{ "pma", "application/x-perfmon"},
{ "pmc", "application/x-perfmon"},
{ "pml", "application/x-perfmon"},
{ "pmr", "application/x-perfmon"},
{ "pmw", "application/x-perfmon"},
{ "png", "image/png"},
{ "pnm", "image/x-portable-anymap"},
{ "pot,", "application/vnd.ms-powerpoint"},
{ "ppm", "image/x-portable-pixmap"},
{ "pps", "application/vnd.ms-powerpoint"},
{ "ppt", "application/vnd.ms-powerpoint"},
{ "prf", "application/pics-rules"},
{ "ps", "application/postscript"},
{ "pub", "application/x-mspublisher"},
{ "qt", "video/quicktime"},
{ "ra", "audio/x-pn-realaudio"},
{ "ram", "audio/x-pn-realaudio"},
{ "ras", "image/x-cmu-raster"},
{ "rgb", "image/x-rgb"},
{ "rmi", "audio/mid"},
{ "roff", "application/x-troff"},
{ "rtf", "application/rtf"},
{ "rtx", "text/richtext"},
{ "scd", "application/x-msschedule"},
{ "sct", "text/scriptlet"},
{ "setpay", "application/set-payment-initiation"},
{ "setreg", "application/set-registration-initiation"},
{ "sh", "application/x-sh"},
{ "shar", "application/x-shar"},
{ "sit", "application/x-stuffit"},
{ "snd", "audio/basic"},
{ "spc", "application/x-pkcs7-certificates"},
{ "spl", "application/futuresplash"},
{ "src", "application/x-wais-source"},
{ "sst", "application/vnd.ms-pkicertstore"},
{ "stl", "application/vnd.ms-pkistl"},
{ "stm", "text/html"},
{ "svg", "image/svg+xml"},
{ "sv4cpio","application/x-sv4cpio"},
{ "sv4crc", "application/x-sv4crc"},
{ "swf", "application/x-shockwave-flash"},
{ "t", "application/x-troff"},
{ "tar", "application/x-tar"},
{ "tcl", "application/x-tcl"},
{ "tex", "application/x-tex"},
{ "texi", "application/x-texinfo"},
{ "texinfo","application/x-texinfo"},
{ "tgz", "application/x-compressed"},
{ "tif", "image/tiff"},
{ "tiff", "image/tiff"},
{ "tr", "application/x-troff"},
{ "trm", "application/x-msterminal"},
{ "tsv", "text/tab-separated-values"},
{ "txt", "text/plain"},
{ "uls", "text/iuls"},
{ "ustar", "application/x-ustar"},
{ "vcf", "text/x-vcard"},
{ "vrml", "x-world/x-vrml"},
{ "wav", "audio/x-wav"},
{ "wcm", "application/vnd.ms-works"},
{ "wdb", "application/vnd.ms-works"},
{ "wks", "application/vnd.ms-works"},
{ "wmf", "application/x-msmetafile"},
{ "wps", "application/vnd.ms-works"},
{ "wri", "application/x-mswrite"},
{ "wrl", "x-world/x-vrml"},
{ "wrz", "x-world/x-vrml"},
{ "xaf", "x-world/x-vrml"},
{ "xbm", "image/x-xbitmap"},
{ "xla", "application/vnd.ms-excel"},
{ "xlc", "application/vnd.ms-excel"},
{ "xlm", "application/vnd.ms-excel"},
{ "xls", "application/vnd.ms-excel"},
{ "xlt", "application/vnd.ms-excel"},
{ "xlw", "application/vnd.ms-excel"},
{ "xof", "x-world/x-vrml"},
{ "xpm", "image/x-xpixmap"},
{ "xwd", "image/x-xwindowdump"},
{ "z", "application/x-compress"},
{ "zip", "application/zip"}
};
public static String unfold(String s) public static String unfold(String s)
{ {
if (s == null) if (s == null)
@ -235,8 +436,7 @@ public class MimeUtility
*/ */
public static boolean mimeTypeMatches(String mimeType, String matchAgainst) public static boolean mimeTypeMatches(String mimeType, String matchAgainst)
{ {
Pattern p = Pattern.compile(matchAgainst.replaceAll("\\*", "\\.\\*"), Pattern p = Pattern.compile(matchAgainst.replaceAll("\\*", "\\.\\*"), Pattern.CASE_INSENSITIVE);
Pattern.CASE_INSENSITIVE);
return p.matcher(mimeType).matches(); return p.matcher(mimeType).matches();
} }
@ -354,8 +554,7 @@ public class MimeUtility
/* /*
* A best guess that this part is intended to be an attachment and not inline. * A best guess that this part is intended to be an attachment and not inline.
*/ */
boolean attachment = ("attachment".equalsIgnoreCase(dispositionType) boolean attachment = ("attachment".equalsIgnoreCase(dispositionType) || (dispositionFilename != null));
|| (dispositionFilename != null));
if ((!attachment) && (part.getMimeType().equalsIgnoreCase("text/html"))) if ((!attachment) && (part.getMimeType().equalsIgnoreCase("text/html")))
{ {
@ -382,21 +581,30 @@ public class MimeUtility
public static String getMimeTypeByExtension(String filename) public static String getMimeTypeByExtension(String filename)
{ {
String returnedType = null; String returnedType = null;
if (filename != null String extension = null;
&& filename.lastIndexOf('.') != -1)
if (filename != null && filename.lastIndexOf('.') != -1)
{ {
String extension = filename.substring(filename.lastIndexOf('.')+1).toLowerCase(); extension = filename.substring(filename.lastIndexOf('.')+1).toLowerCase();
returnedType = android.webkit.MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension); returnedType = android.webkit.MimeTypeMap.getSingleton().getMimeTypeFromExtension(extension);
} }
if (returnedType != null) if (returnedType != null)
{ {
return returnedType; return returnedType;
} }
else else if (extension != null)
{ {
return DEFAULT_ATTACHMENT_MIME_TYPE; for (String[] contentTypeMapEntry : MIME_TYPE_BY_EXTENSION_MAP)
{
if (contentTypeMapEntry[0].equals(extension))
{
return contentTypeMapEntry[1];
} }
} }
}
return DEFAULT_ATTACHMENT_MIME_TYPE;
}
private static String fixupCharset(String charset) private static String fixupCharset(String charset)