[cstdstring] remove IsEmpty() and replace with empty()
[vuplus_xbmc] / xbmc / utils / Mime.cpp
1 /*
2  *      Copyright (C) 2012-2013 Team XBMC
3  *      http://xbmc.org
4  *
5  *  This Program is free software; you can redistribute it and/or modify
6  *  it under the terms of the GNU General Public License as published by
7  *  the Free Software Foundation; either version 2, or (at your option)
8  *  any later version.
9  *
10  *  This Program is distributed in the hope that it will be useful,
11  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
12  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13  *  GNU General Public License for more details.
14  *
15  *  You should have received a copy of the GNU General Public License
16  *  along with XBMC; see the file COPYING.  If not, see
17  *  <http://www.gnu.org/licenses/>.
18  *
19  */
20
21 #include <algorithm>
22
23 #include "Mime.h"
24 #include "FileItem.h"
25 #include "StdString.h"
26 #include "URIUtils.h"
27 #include "music/tags/MusicInfoTag.h"
28 #include "video/VideoInfoTag.h"
29
30 using namespace std;
31
32 map<string, string> fillMimeTypes()
33 {
34   map<string, string> mimeTypes;
35
36   mimeTypes.insert(pair<string, string>("3dm",       "x-world/x-3dmf"));
37   mimeTypes.insert(pair<string, string>("3dmf",      "x-world/x-3dmf"));
38   mimeTypes.insert(pair<string, string>("a",         "application/octet-stream"));
39   mimeTypes.insert(pair<string, string>("aab",       "application/x-authorware-bin"));
40   mimeTypes.insert(pair<string, string>("aam",       "application/x-authorware-map"));
41   mimeTypes.insert(pair<string, string>("aas",       "application/x-authorware-seg"));
42   mimeTypes.insert(pair<string, string>("abc",       "text/vnd.abc"));
43   mimeTypes.insert(pair<string, string>("acgi",      "text/html"));
44   mimeTypes.insert(pair<string, string>("afl",       "video/animaflex"));
45   mimeTypes.insert(pair<string, string>("ai",        "application/postscript"));
46   mimeTypes.insert(pair<string, string>("aif",       "audio/aiff"));
47   mimeTypes.insert(pair<string, string>("aifc",      "audio/x-aiff"));
48   mimeTypes.insert(pair<string, string>("aiff",      "audio/aiff"));
49   mimeTypes.insert(pair<string, string>("aim",       "application/x-aim"));
50   mimeTypes.insert(pair<string, string>("aip",       "text/x-audiosoft-intra"));
51   mimeTypes.insert(pair<string, string>("ani",       "application/x-navi-animation"));
52   mimeTypes.insert(pair<string, string>("aos",       "application/x-nokia-9000-communicator-add-on-software"));
53   mimeTypes.insert(pair<string, string>("aps",       "application/mime"));
54   mimeTypes.insert(pair<string, string>("arc",       "application/octet-stream"));
55   mimeTypes.insert(pair<string, string>("arj",       "application/arj"));
56   mimeTypes.insert(pair<string, string>("art",       "image/x-jg"));
57   mimeTypes.insert(pair<string, string>("asf",       "video/x-ms-asf"));
58   mimeTypes.insert(pair<string, string>("asm",       "text/x-asm"));
59   mimeTypes.insert(pair<string, string>("asp",       "text/asp"));
60   mimeTypes.insert(pair<string, string>("asx",       "video/x-ms-asf"));
61   mimeTypes.insert(pair<string, string>("au",        "audio/basic"));
62   mimeTypes.insert(pair<string, string>("avi",       "video/avi"));
63   mimeTypes.insert(pair<string, string>("avs",       "video/avs-video"));
64   mimeTypes.insert(pair<string, string>("bcpio",     "application/x-bcpio"));
65   mimeTypes.insert(pair<string, string>("bin",       "application/octet-stream"));
66   mimeTypes.insert(pair<string, string>("bm",        "image/bmp"));
67   mimeTypes.insert(pair<string, string>("bmp",       "image/bmp"));
68   mimeTypes.insert(pair<string, string>("boo",       "application/book"));
69   mimeTypes.insert(pair<string, string>("book",      "application/book"));
70   mimeTypes.insert(pair<string, string>("boz",       "application/x-bzip2"));
71   mimeTypes.insert(pair<string, string>("bsh",       "application/x-bsh"));
72   mimeTypes.insert(pair<string, string>("bz",        "application/x-bzip"));
73   mimeTypes.insert(pair<string, string>("bz2",       "application/x-bzip2"));
74   mimeTypes.insert(pair<string, string>("c",         "text/plain"));
75   mimeTypes.insert(pair<string, string>("c++",       "text/plain"));
76   mimeTypes.insert(pair<string, string>("cat",       "application/vnd.ms-pki.seccat"));
77   mimeTypes.insert(pair<string, string>("cc",        "text/plain"));
78   mimeTypes.insert(pair<string, string>("ccad",      "application/clariscad"));
79   mimeTypes.insert(pair<string, string>("cco",       "application/x-cocoa"));
80   mimeTypes.insert(pair<string, string>("cdf",       "application/cdf"));
81   mimeTypes.insert(pair<string, string>("cer",       "application/pkix-cert"));
82   mimeTypes.insert(pair<string, string>("cer",       "application/x-x509-ca-cert"));
83   mimeTypes.insert(pair<string, string>("cha",       "application/x-chat"));
84   mimeTypes.insert(pair<string, string>("chat",      "application/x-chat"));
85   mimeTypes.insert(pair<string, string>("class",     "application/java"));
86   mimeTypes.insert(pair<string, string>("com",       "application/octet-stream"));
87   mimeTypes.insert(pair<string, string>("conf",      "text/plain"));
88   mimeTypes.insert(pair<string, string>("cpio",      "application/x-cpio"));
89   mimeTypes.insert(pair<string, string>("cpp",       "text/x-c"));
90   mimeTypes.insert(pair<string, string>("cpt",       "application/x-cpt"));
91   mimeTypes.insert(pair<string, string>("crl",       "application/pkcs-crl"));
92   mimeTypes.insert(pair<string, string>("crt",       "application/pkix-cert"));
93   mimeTypes.insert(pair<string, string>("csh",       "application/x-csh"));
94   mimeTypes.insert(pair<string, string>("css",       "text/css"));
95   mimeTypes.insert(pair<string, string>("cxx",       "text/plain"));
96   mimeTypes.insert(pair<string, string>("dcr",       "application/x-director"));
97   mimeTypes.insert(pair<string, string>("deepv",     "application/x-deepv"));
98   mimeTypes.insert(pair<string, string>("def",       "text/plain"));
99   mimeTypes.insert(pair<string, string>("der",       "application/x-x509-ca-cert"));
100   mimeTypes.insert(pair<string, string>("dif",       "video/x-dv"));
101   mimeTypes.insert(pair<string, string>("dir",       "application/x-director"));
102   mimeTypes.insert(pair<string, string>("dl",        "video/dl"));
103   mimeTypes.insert(pair<string, string>("divx",      "video/x-msvideo"));
104   mimeTypes.insert(pair<string, string>("doc",       "application/msword"));
105   mimeTypes.insert(pair<string, string>("docx",      "application/vnd.openxmlformats-officedocument.wordprocessingml.document"));
106   mimeTypes.insert(pair<string, string>("dot",       "application/msword"));
107   mimeTypes.insert(pair<string, string>("dp",        "application/commonground"));
108   mimeTypes.insert(pair<string, string>("drw",       "application/drafting"));
109   mimeTypes.insert(pair<string, string>("dump",      "application/octet-stream"));
110   mimeTypes.insert(pair<string, string>("dv",        "video/x-dv"));
111   mimeTypes.insert(pair<string, string>("dvi",       "application/x-dvi"));
112   mimeTypes.insert(pair<string, string>("dwf",       "model/vnd.dwf"));
113   mimeTypes.insert(pair<string, string>("dwg",       "image/vnd.dwg"));
114   mimeTypes.insert(pair<string, string>("dxf",       "image/vnd.dwg"));
115   mimeTypes.insert(pair<string, string>("dxr",       "application/x-director"));
116   mimeTypes.insert(pair<string, string>("el",        "text/x-script.elisp"));
117   mimeTypes.insert(pair<string, string>("elc",       "application/x-elc"));
118   mimeTypes.insert(pair<string, string>("env",       "application/x-envoy"));
119   mimeTypes.insert(pair<string, string>("eps",       "application/postscript"));
120   mimeTypes.insert(pair<string, string>("es",        "application/x-esrehber"));
121   mimeTypes.insert(pair<string, string>("etx",       "text/x-setext"));
122   mimeTypes.insert(pair<string, string>("evy",       "application/envoy"));
123   mimeTypes.insert(pair<string, string>("exe",       "application/octet-stream"));
124   mimeTypes.insert(pair<string, string>("f",         "text/x-fortran"));
125   mimeTypes.insert(pair<string, string>("f77",       "text/x-fortran"));
126   mimeTypes.insert(pair<string, string>("f90",       "text/x-fortran"));
127   mimeTypes.insert(pair<string, string>("fdf",       "application/vnd.fdf"));
128   mimeTypes.insert(pair<string, string>("fif",       "image/fif"));
129   mimeTypes.insert(pair<string, string>("flac",      "audio/flac"));
130   mimeTypes.insert(pair<string, string>("fli",       "video/fli"));
131   mimeTypes.insert(pair<string, string>("flo",       "image/florian"));
132   mimeTypes.insert(pair<string, string>("flv",       "video/x-flv"));
133   mimeTypes.insert(pair<string, string>("flx",       "text/vnd.fmi.flexstor"));
134   mimeTypes.insert(pair<string, string>("fmf",       "video/x-atomic3d-feature"));
135   mimeTypes.insert(pair<string, string>("for",       "text/plain"));
136   mimeTypes.insert(pair<string, string>("for",       "text/x-fortran"));
137   mimeTypes.insert(pair<string, string>("fpx",       "image/vnd.fpx"));
138   mimeTypes.insert(pair<string, string>("frl",       "application/freeloader"));
139   mimeTypes.insert(pair<string, string>("funk",      "audio/make"));
140   mimeTypes.insert(pair<string, string>("g",         "text/plain"));
141   mimeTypes.insert(pair<string, string>("g3",        "image/g3fax"));
142   mimeTypes.insert(pair<string, string>("gif",       "image/gif"));
143   mimeTypes.insert(pair<string, string>("gl",        "video/x-gl"));
144   mimeTypes.insert(pair<string, string>("gsd",       "audio/x-gsm"));
145   mimeTypes.insert(pair<string, string>("gsm",       "audio/x-gsm"));
146   mimeTypes.insert(pair<string, string>("gsp",       "application/x-gsp"));
147   mimeTypes.insert(pair<string, string>("gss",       "application/x-gss"));
148   mimeTypes.insert(pair<string, string>("gtar",      "application/x-gtar"));
149   mimeTypes.insert(pair<string, string>("gz",        "application/x-compressed"));
150   mimeTypes.insert(pair<string, string>("gzip",      "application/x-gzip"));
151   mimeTypes.insert(pair<string, string>("h",         "text/plain"));
152   mimeTypes.insert(pair<string, string>("hdf",       "application/x-hdf"));
153   mimeTypes.insert(pair<string, string>("help",      "application/x-helpfile"));
154   mimeTypes.insert(pair<string, string>("hgl",       "application/vnd.hp-hpgl"));
155   mimeTypes.insert(pair<string, string>("hh",        "text/plain"));
156   mimeTypes.insert(pair<string, string>("hlb",       "text/x-script"));
157   mimeTypes.insert(pair<string, string>("hlp",       "application/hlp"));
158   mimeTypes.insert(pair<string, string>("hpg",       "application/vnd.hp-hpgl"));
159   mimeTypes.insert(pair<string, string>("hpgl",      "application/vnd.hp-hpgl"));
160   mimeTypes.insert(pair<string, string>("hqx",       "application/binhex"));
161   mimeTypes.insert(pair<string, string>("hta",       "application/hta"));
162   mimeTypes.insert(pair<string, string>("htc",       "text/x-component"));
163   mimeTypes.insert(pair<string, string>("htm",       "text/html"));
164   mimeTypes.insert(pair<string, string>("html",      "text/html"));
165   mimeTypes.insert(pair<string, string>("htmls",     "text/html"));
166   mimeTypes.insert(pair<string, string>("htt",       "text/webviewhtml"));
167   mimeTypes.insert(pair<string, string>("htx",       "text/html"));
168   mimeTypes.insert(pair<string, string>("ice",       "x-conference/x-cooltalk"));
169   mimeTypes.insert(pair<string, string>("ico",       "image/x-icon"));
170   mimeTypes.insert(pair<string, string>("idc",       "text/plain"));
171   mimeTypes.insert(pair<string, string>("ief",       "image/ief"));
172   mimeTypes.insert(pair<string, string>("iefs",      "image/ief"));
173   mimeTypes.insert(pair<string, string>("iges",      "application/iges"));
174   mimeTypes.insert(pair<string, string>("igs",       "application/iges"));
175   mimeTypes.insert(pair<string, string>("igs",       "model/iges"));
176   mimeTypes.insert(pair<string, string>("ima",       "application/x-ima"));
177   mimeTypes.insert(pair<string, string>("imap",      "application/x-httpd-imap"));
178   mimeTypes.insert(pair<string, string>("inf",       "application/inf"));
179   mimeTypes.insert(pair<string, string>("ins",       "application/x-internett-signup"));
180   mimeTypes.insert(pair<string, string>("ip",        "application/x-ip2"));
181   mimeTypes.insert(pair<string, string>("isu",       "video/x-isvideo"));
182   mimeTypes.insert(pair<string, string>("it",        "audio/it"));
183   mimeTypes.insert(pair<string, string>("iv",        "application/x-inventor"));
184   mimeTypes.insert(pair<string, string>("ivr",       "i-world/i-vrml"));
185   mimeTypes.insert(pair<string, string>("ivy",       "application/x-livescreen"));
186   mimeTypes.insert(pair<string, string>("jam",       "audio/x-jam"));
187   mimeTypes.insert(pair<string, string>("jav",       "text/x-java-source"));
188   mimeTypes.insert(pair<string, string>("java",      "text/x-java-source"));
189   mimeTypes.insert(pair<string, string>("jcm",       "application/x-java-commerce"));
190   mimeTypes.insert(pair<string, string>("jfif",      "image/jpeg"));
191   mimeTypes.insert(pair<string, string>("jfif-tbnl", "image/jpeg"));
192   mimeTypes.insert(pair<string, string>("jpe",       "image/jpeg"));
193   mimeTypes.insert(pair<string, string>("jpeg",      "image/jpeg"));
194   mimeTypes.insert(pair<string, string>("jpg",       "image/jpeg"));
195   mimeTypes.insert(pair<string, string>("jps",       "image/x-jps"));
196   mimeTypes.insert(pair<string, string>("js",        "application/javascript"));
197   mimeTypes.insert(pair<string, string>("json",      "application/json"));
198   mimeTypes.insert(pair<string, string>("jut",       "image/jutvision"));
199   mimeTypes.insert(pair<string, string>("kar",       "music/x-karaoke"));
200   mimeTypes.insert(pair<string, string>("ksh",       "application/x-ksh"));
201   mimeTypes.insert(pair<string, string>("ksh",       "text/x-script.ksh"));
202   mimeTypes.insert(pair<string, string>("la",        "audio/nspaudio"));
203   mimeTypes.insert(pair<string, string>("lam",       "audio/x-liveaudio"));
204   mimeTypes.insert(pair<string, string>("latex",     "application/x-latex"));
205   mimeTypes.insert(pair<string, string>("lha",       "application/lha"));
206   mimeTypes.insert(pair<string, string>("lhx",       "application/octet-stream"));
207   mimeTypes.insert(pair<string, string>("list",      "text/plain"));
208   mimeTypes.insert(pair<string, string>("lma",       "audio/nspaudio"));
209   mimeTypes.insert(pair<string, string>("log",       "text/plain"));
210   mimeTypes.insert(pair<string, string>("lsp",       "application/x-lisp"));
211   mimeTypes.insert(pair<string, string>("lst",       "text/plain"));
212   mimeTypes.insert(pair<string, string>("lsx",       "text/x-la-asf"));
213   mimeTypes.insert(pair<string, string>("ltx",       "application/x-latex"));
214   mimeTypes.insert(pair<string, string>("lzh",       "application/x-lzh"));
215   mimeTypes.insert(pair<string, string>("lzx",       "application/lzx"));
216   mimeTypes.insert(pair<string, string>("m",         "text/x-m"));
217   mimeTypes.insert(pair<string, string>("m1v",       "video/mpeg"));
218   mimeTypes.insert(pair<string, string>("m2a",       "audio/mpeg"));
219   mimeTypes.insert(pair<string, string>("m2v",       "video/mpeg"));
220   mimeTypes.insert(pair<string, string>("m3u",       "audio/x-mpequrl"));
221   mimeTypes.insert(pair<string, string>("man",       "application/x-troff-man"));
222   mimeTypes.insert(pair<string, string>("map",       "application/x-navimap"));
223   mimeTypes.insert(pair<string, string>("mar",       "text/plain"));
224   mimeTypes.insert(pair<string, string>("mbd",       "application/mbedlet"));
225   mimeTypes.insert(pair<string, string>("mc$",       "application/x-magic-cap-package-1.0"));
226   mimeTypes.insert(pair<string, string>("mcd",       "application/x-mathcad"));
227   mimeTypes.insert(pair<string, string>("mcf",       "text/mcf"));
228   mimeTypes.insert(pair<string, string>("mcp",       "application/netmc"));
229   mimeTypes.insert(pair<string, string>("me",        "application/x-troff-me"));
230   mimeTypes.insert(pair<string, string>("mht",       "message/rfc822"));
231   mimeTypes.insert(pair<string, string>("mhtml",     "message/rfc822"));
232   mimeTypes.insert(pair<string, string>("mid",       "audio/midi"));
233   mimeTypes.insert(pair<string, string>("midi",      "audio/midi"));
234   mimeTypes.insert(pair<string, string>("mif",       "application/x-mif"));
235   mimeTypes.insert(pair<string, string>("mime",      "message/rfc822"));
236   mimeTypes.insert(pair<string, string>("mjf",       "audio/x-vnd.audioexplosion.mjuicemediafile"));
237   mimeTypes.insert(pair<string, string>("mjpg",      "video/x-motion-jpeg"));
238   mimeTypes.insert(pair<string, string>("mka",       "audio/x-matroska"));
239   mimeTypes.insert(pair<string, string>("mkv",       "video/x-matroska"));
240   mimeTypes.insert(pair<string, string>("mm",        "application/x-meme"));
241   mimeTypes.insert(pair<string, string>("mme",       "application/base64"));
242   mimeTypes.insert(pair<string, string>("mod",       "audio/mod"));
243   mimeTypes.insert(pair<string, string>("moov",      "video/quicktime"));
244   mimeTypes.insert(pair<string, string>("mov",       "video/quicktime"));
245   mimeTypes.insert(pair<string, string>("movie",     "video/x-sgi-movie"));
246   mimeTypes.insert(pair<string, string>("mp2",       "audio/mpeg"));
247   mimeTypes.insert(pair<string, string>("mp3",       "audio/mpeg3"));
248   mimeTypes.insert(pair<string, string>("mp4",       "video/mp4"));
249   mimeTypes.insert(pair<string, string>("mpa",       "audio/mpeg"));
250   mimeTypes.insert(pair<string, string>("mpc",       "application/x-project"));
251   mimeTypes.insert(pair<string, string>("mpe",       "video/mpeg"));
252   mimeTypes.insert(pair<string, string>("mpeg",      "video/mpeg"));
253   mimeTypes.insert(pair<string, string>("mpg",       "video/mpeg"));
254   mimeTypes.insert(pair<string, string>("mpga",      "audio/mpeg"));
255   mimeTypes.insert(pair<string, string>("mpp",       "application/vnd.ms-project"));
256   mimeTypes.insert(pair<string, string>("mpt",       "application/x-project"));
257   mimeTypes.insert(pair<string, string>("mpv",       "application/x-project"));
258   mimeTypes.insert(pair<string, string>("mpx",       "application/x-project"));
259   mimeTypes.insert(pair<string, string>("mrc",       "application/marc"));
260   mimeTypes.insert(pair<string, string>("ms",        "application/x-troff-ms"));
261   mimeTypes.insert(pair<string, string>("mv",        "video/x-sgi-movie"));
262   mimeTypes.insert(pair<string, string>("my",        "audio/make"));
263   mimeTypes.insert(pair<string, string>("mzz",       "application/x-vnd.audioexplosion.mzz"));
264   mimeTypes.insert(pair<string, string>("nap",       "image/naplps"));
265   mimeTypes.insert(pair<string, string>("naplps",    "image/naplps"));
266   mimeTypes.insert(pair<string, string>("nc",        "application/x-netcdf"));
267   mimeTypes.insert(pair<string, string>("ncm",       "application/vnd.nokia.configuration-message"));
268   mimeTypes.insert(pair<string, string>("nfo",       "text/xml"));
269   mimeTypes.insert(pair<string, string>("nif",       "image/x-niff"));
270   mimeTypes.insert(pair<string, string>("niff",      "image/x-niff"));
271   mimeTypes.insert(pair<string, string>("nix",       "application/x-mix-transfer"));
272   mimeTypes.insert(pair<string, string>("nsc",       "application/x-conference"));
273   mimeTypes.insert(pair<string, string>("nvd",       "application/x-navidoc"));
274   mimeTypes.insert(pair<string, string>("o",         "application/octet-stream"));
275   mimeTypes.insert(pair<string, string>("oda",       "application/oda"));
276   mimeTypes.insert(pair<string, string>("ogg",       "audio/ogg"));
277   mimeTypes.insert(pair<string, string>("omc",       "application/x-omc"));
278   mimeTypes.insert(pair<string, string>("omcd",      "application/x-omcdatamaker"));
279   mimeTypes.insert(pair<string, string>("omcr",      "application/x-omcregerator"));
280   mimeTypes.insert(pair<string, string>("p",         "text/x-pascal"));
281   mimeTypes.insert(pair<string, string>("p10",       "application/pkcs10"));
282   mimeTypes.insert(pair<string, string>("p12",       "application/pkcs-12"));
283   mimeTypes.insert(pair<string, string>("p7a",       "application/x-pkcs7-signature"));
284   mimeTypes.insert(pair<string, string>("p7c",       "application/pkcs7-mime"));
285   mimeTypes.insert(pair<string, string>("p7m",       "application/pkcs7-mime"));
286   mimeTypes.insert(pair<string, string>("p7r",       "application/x-pkcs7-certreqresp"));
287   mimeTypes.insert(pair<string, string>("p7s",       "application/pkcs7-signature"));
288   mimeTypes.insert(pair<string, string>("part",      "application/pro_eng"));
289   mimeTypes.insert(pair<string, string>("pas",       "text/pascal"));
290   mimeTypes.insert(pair<string, string>("pbm",       "image/x-portable-bitmap"));
291   mimeTypes.insert(pair<string, string>("pcl",       "application/vnd.hp-pcl"));
292   mimeTypes.insert(pair<string, string>("pct",       "image/x-pict"));
293   mimeTypes.insert(pair<string, string>("pcx",       "image/x-pcx"));
294   mimeTypes.insert(pair<string, string>("pdb",       "chemical/x-pdb"));
295   mimeTypes.insert(pair<string, string>("pdf",       "application/pdf"));
296   mimeTypes.insert(pair<string, string>("pfunk",     "audio/make.my.funk"));
297   mimeTypes.insert(pair<string, string>("pgm",       "image/x-portable-greymap"));
298   mimeTypes.insert(pair<string, string>("pic",       "image/pict"));
299   mimeTypes.insert(pair<string, string>("pict",      "image/pict"));
300   mimeTypes.insert(pair<string, string>("pkg",       "application/x-newton-compatible-pkg"));
301   mimeTypes.insert(pair<string, string>("pko",       "application/vnd.ms-pki.pko"));
302   mimeTypes.insert(pair<string, string>("pl",        "text/x-script.perl"));
303   mimeTypes.insert(pair<string, string>("plx",       "application/x-pixclscript"));
304   mimeTypes.insert(pair<string, string>("pm",        "text/x-script.perl-module"));
305   mimeTypes.insert(pair<string, string>("pm4",       "application/x-pagemaker"));
306   mimeTypes.insert(pair<string, string>("pm5",       "application/x-pagemaker"));
307   mimeTypes.insert(pair<string, string>("png",       "image/png"));
308   mimeTypes.insert(pair<string, string>("pnm",       "application/x-portable-anymap"));
309   mimeTypes.insert(pair<string, string>("pot",       "application/vnd.ms-powerpoint"));
310   mimeTypes.insert(pair<string, string>("pov",       "model/x-pov"));
311   mimeTypes.insert(pair<string, string>("ppa",       "application/vnd.ms-powerpoint"));
312   mimeTypes.insert(pair<string, string>("ppm",       "image/x-portable-pixmap"));
313   mimeTypes.insert(pair<string, string>("pps",       "application/mspowerpoint"));
314   mimeTypes.insert(pair<string, string>("ppt",       "application/mspowerpoint"));
315   mimeTypes.insert(pair<string, string>("ppz",       "application/mspowerpoint"));
316   mimeTypes.insert(pair<string, string>("pre",       "application/x-freelance"));
317   mimeTypes.insert(pair<string, string>("prt",       "application/pro_eng"));
318   mimeTypes.insert(pair<string, string>("ps",        "application/postscript"));
319   mimeTypes.insert(pair<string, string>("psd",       "application/octet-stream"));
320   mimeTypes.insert(pair<string, string>("pvu",       "paleovu/x-pv"));
321   mimeTypes.insert(pair<string, string>("pwz",       "application/vnd.ms-powerpoint"));
322   mimeTypes.insert(pair<string, string>("py",        "text/x-script.phyton"));
323   mimeTypes.insert(pair<string, string>("pyc",       "applicaiton/x-bytecode.python"));
324   mimeTypes.insert(pair<string, string>("qcp",       "audio/vnd.qcelp"));
325   mimeTypes.insert(pair<string, string>("qd3",       "x-world/x-3dmf"));
326   mimeTypes.insert(pair<string, string>("qd3d",      "x-world/x-3dmf"));
327   mimeTypes.insert(pair<string, string>("qif",       "image/x-quicktime"));
328   mimeTypes.insert(pair<string, string>("qt",        "video/quicktime"));
329   mimeTypes.insert(pair<string, string>("qtc",       "video/x-qtc"));
330   mimeTypes.insert(pair<string, string>("qti",       "image/x-quicktime"));
331   mimeTypes.insert(pair<string, string>("qtif",      "image/x-quicktime"));
332   mimeTypes.insert(pair<string, string>("ra",        "audio/x-realaudio"));
333   mimeTypes.insert(pair<string, string>("ram",       "audio/x-pn-realaudio"));
334   mimeTypes.insert(pair<string, string>("ras",       "image/cmu-raster"));
335   mimeTypes.insert(pair<string, string>("rast",      "image/cmu-raster"));
336   mimeTypes.insert(pair<string, string>("rexx",      "text/x-script.rexx"));
337   mimeTypes.insert(pair<string, string>("rf",        "image/vnd.rn-realflash"));
338   mimeTypes.insert(pair<string, string>("rgb",       "image/x-rgb"));
339   mimeTypes.insert(pair<string, string>("rm",        "audio/x-pn-realaudio"));
340   mimeTypes.insert(pair<string, string>("rmi",       "audio/mid"));
341   mimeTypes.insert(pair<string, string>("rmm",       "audio/x-pn-realaudio"));
342   mimeTypes.insert(pair<string, string>("rmp",       "audio/x-pn-realaudio"));
343   mimeTypes.insert(pair<string, string>("rng",       "application/ringing-tones"));
344   mimeTypes.insert(pair<string, string>("rnx",       "application/vnd.rn-realplayer"));
345   mimeTypes.insert(pair<string, string>("roff",      "application/x-troff"));
346   mimeTypes.insert(pair<string, string>("rp",        "image/vnd.rn-realpix"));
347   mimeTypes.insert(pair<string, string>("rpm",       "audio/x-pn-realaudio-plugin"));
348   mimeTypes.insert(pair<string, string>("rt",        "text/richtext"));
349   mimeTypes.insert(pair<string, string>("rtf",       "text/richtext"));
350   mimeTypes.insert(pair<string, string>("rtx",       "text/richtext"));
351   mimeTypes.insert(pair<string, string>("rv",        "video/vnd.rn-realvideo"));
352   mimeTypes.insert(pair<string, string>("s",         "text/x-asm"));
353   mimeTypes.insert(pair<string, string>("s3m",       "audio/s3m"));
354   mimeTypes.insert(pair<string, string>("saveme",    "application/octet-stream"));
355   mimeTypes.insert(pair<string, string>("sbk",       "application/x-tbook"));
356   mimeTypes.insert(pair<string, string>("scm",       "video/x-scm"));
357   mimeTypes.insert(pair<string, string>("sdml",      "text/plain"));
358   mimeTypes.insert(pair<string, string>("sdp",       "application/sdp"));
359   mimeTypes.insert(pair<string, string>("sdr",       "application/sounder"));
360   mimeTypes.insert(pair<string, string>("sea",       "application/sea"));
361   mimeTypes.insert(pair<string, string>("set",       "application/set"));
362   mimeTypes.insert(pair<string, string>("sgm",       "text/sgml"));
363   mimeTypes.insert(pair<string, string>("sgml",      "text/sgml"));
364   mimeTypes.insert(pair<string, string>("sh",        "text/x-script.sh"));
365   mimeTypes.insert(pair<string, string>("shar",      "application/x-bsh"));
366   mimeTypes.insert(pair<string, string>("shtml",     "text/html"));
367   mimeTypes.insert(pair<string, string>("shtml",     "text/x-server-parsed-html"));
368   mimeTypes.insert(pair<string, string>("sid",       "audio/x-psid"));
369   mimeTypes.insert(pair<string, string>("sit",       "application/x-sit"));
370   mimeTypes.insert(pair<string, string>("sit",       "application/x-stuffit"));
371   mimeTypes.insert(pair<string, string>("skd",       "application/x-koan"));
372   mimeTypes.insert(pair<string, string>("skm",       "application/x-koan"));
373   mimeTypes.insert(pair<string, string>("skp",       "application/x-koan"));
374   mimeTypes.insert(pair<string, string>("skt",       "application/x-koan"));
375   mimeTypes.insert(pair<string, string>("sl",        "application/x-seelogo"));
376   mimeTypes.insert(pair<string, string>("smi",       "application/smil"));
377   mimeTypes.insert(pair<string, string>("smil",      "application/smil"));
378   mimeTypes.insert(pair<string, string>("snd",       "audio/basic"));
379   mimeTypes.insert(pair<string, string>("sol",       "application/solids"));
380   mimeTypes.insert(pair<string, string>("spc",       "text/x-speech"));
381   mimeTypes.insert(pair<string, string>("spl",       "application/futuresplash"));
382   mimeTypes.insert(pair<string, string>("spr",       "application/x-sprite"));
383   mimeTypes.insert(pair<string, string>("sprite",    "application/x-sprite"));
384   mimeTypes.insert(pair<string, string>("src",       "application/x-wais-source"));
385   mimeTypes.insert(pair<string, string>("ssi",       "text/x-server-parsed-html"));
386   mimeTypes.insert(pair<string, string>("ssm",       "application/streamingmedia"));
387   mimeTypes.insert(pair<string, string>("sst",       "application/vnd.ms-pki.certstore"));
388   mimeTypes.insert(pair<string, string>("step",      "application/step"));
389   mimeTypes.insert(pair<string, string>("stl",       "application/sla"));
390   mimeTypes.insert(pair<string, string>("stp",       "application/step"));
391   mimeTypes.insert(pair<string, string>("sv4cpio",   "application/x-sv4cpio"));
392   mimeTypes.insert(pair<string, string>("sv4crc",    "application/x-sv4crc"));
393   mimeTypes.insert(pair<string, string>("svf",       "image/vnd.dwg"));
394   mimeTypes.insert(pair<string, string>("svr",       "application/x-world"));
395   mimeTypes.insert(pair<string, string>("swf",       "application/x-shockwave-flash"));
396   mimeTypes.insert(pair<string, string>("t",         "application/x-troff"));
397   mimeTypes.insert(pair<string, string>("talk",      "text/x-speech"));
398   mimeTypes.insert(pair<string, string>("tar",       "application/x-tar"));
399   mimeTypes.insert(pair<string, string>("tbk",       "application/toolbook"));
400   mimeTypes.insert(pair<string, string>("tcl",       "text/x-script.tcl"));
401   mimeTypes.insert(pair<string, string>("tcsh",      "text/x-script.tcsh"));
402   mimeTypes.insert(pair<string, string>("tex",       "application/x-tex"));
403   mimeTypes.insert(pair<string, string>("texi",      "application/x-texinfo"));
404   mimeTypes.insert(pair<string, string>("texinfo",   "application/x-texinfo"));
405   mimeTypes.insert(pair<string, string>("text",      "text/plain"));
406   mimeTypes.insert(pair<string, string>("tgz",       "application/x-compressed"));
407   mimeTypes.insert(pair<string, string>("tif",       "image/tiff"));
408   mimeTypes.insert(pair<string, string>("tiff",      "image/tiff"));
409   mimeTypes.insert(pair<string, string>("tr",        "application/x-troff"));
410   mimeTypes.insert(pair<string, string>("ts",        "video/mp2t"));
411   mimeTypes.insert(pair<string, string>("tsi",       "audio/tsp-audio"));
412   mimeTypes.insert(pair<string, string>("tsp",       "audio/tsplayer"));
413   mimeTypes.insert(pair<string, string>("tsv",       "text/tab-separated-values"));
414   mimeTypes.insert(pair<string, string>("turbot",    "image/florian"));
415   mimeTypes.insert(pair<string, string>("txt",       "text/plain"));
416   mimeTypes.insert(pair<string, string>("uil",       "text/x-uil"));
417   mimeTypes.insert(pair<string, string>("uni",       "text/uri-list"));
418   mimeTypes.insert(pair<string, string>("unis",      "text/uri-list"));
419   mimeTypes.insert(pair<string, string>("unv",       "application/i-deas"));
420   mimeTypes.insert(pair<string, string>("uri",       "text/uri-list"));
421   mimeTypes.insert(pair<string, string>("uris",      "text/uri-list"));
422   mimeTypes.insert(pair<string, string>("ustar",     "application/x-ustar"));
423   mimeTypes.insert(pair<string, string>("uu",        "text/x-uuencode"));
424   mimeTypes.insert(pair<string, string>("uue",       "text/x-uuencode"));
425   mimeTypes.insert(pair<string, string>("vcd",       "application/x-cdlink"));
426   mimeTypes.insert(pair<string, string>("vcs",       "text/x-vcalendar"));
427   mimeTypes.insert(pair<string, string>("vda",       "application/vda"));
428   mimeTypes.insert(pair<string, string>("vdo",       "video/vdo"));
429   mimeTypes.insert(pair<string, string>("vew",       "application/groupwise"));
430   mimeTypes.insert(pair<string, string>("viv",       "video/vivo"));
431   mimeTypes.insert(pair<string, string>("vivo",      "video/vivo"));
432   mimeTypes.insert(pair<string, string>("vmd",       "application/vocaltec-media-desc"));
433   mimeTypes.insert(pair<string, string>("vmf",       "application/vocaltec-media-file"));
434   mimeTypes.insert(pair<string, string>("voc",       "audio/voc"));
435   mimeTypes.insert(pair<string, string>("vos",       "video/vosaic"));
436   mimeTypes.insert(pair<string, string>("vox",       "audio/voxware"));
437   mimeTypes.insert(pair<string, string>("vqe",       "audio/x-twinvq-plugin"));
438   mimeTypes.insert(pair<string, string>("vqf",       "audio/x-twinvq"));
439   mimeTypes.insert(pair<string, string>("vql",       "audio/x-twinvq-plugin"));
440   mimeTypes.insert(pair<string, string>("vrml",      "application/x-vrml"));
441   mimeTypes.insert(pair<string, string>("vrt",       "x-world/x-vrt"));
442   mimeTypes.insert(pair<string, string>("vsd",       "application/x-visio"));
443   mimeTypes.insert(pair<string, string>("vst",       "application/x-visio"));
444   mimeTypes.insert(pair<string, string>("vsw",       "application/x-visio"));
445   mimeTypes.insert(pair<string, string>("w60",       "application/wordperfect6.0"));
446   mimeTypes.insert(pair<string, string>("w61",       "application/wordperfect6.1"));
447   mimeTypes.insert(pair<string, string>("w6w",       "application/msword"));
448   mimeTypes.insert(pair<string, string>("wav",       "audio/wav"));
449   mimeTypes.insert(pair<string, string>("wb1",       "application/x-qpro"));
450   mimeTypes.insert(pair<string, string>("wbmp",      "image/vnd.wap.wbmp"));
451   mimeTypes.insert(pair<string, string>("web",       "application/vnd.xara"));
452   mimeTypes.insert(pair<string, string>("wiz",       "application/msword"));
453   mimeTypes.insert(pair<string, string>("wk1",       "application/x-123"));
454   mimeTypes.insert(pair<string, string>("wma",       "audio/x-ms-wma"));
455   mimeTypes.insert(pair<string, string>("wmf",       "windows/metafile"));
456   mimeTypes.insert(pair<string, string>("wml",       "text/vnd.wap.wml"));
457   mimeTypes.insert(pair<string, string>("wmlc",      "application/vnd.wap.wmlc"));
458   mimeTypes.insert(pair<string, string>("wmls",      "text/vnd.wap.wmlscript"));
459   mimeTypes.insert(pair<string, string>("wmlsc",     "application/vnd.wap.wmlscriptc"));
460   mimeTypes.insert(pair<string, string>("wmv",       "video/x-ms-wmv"));
461   mimeTypes.insert(pair<string, string>("word",      "application/msword"));
462   mimeTypes.insert(pair<string, string>("wp",        "application/wordperfect"));
463   mimeTypes.insert(pair<string, string>("wp5",       "application/wordperfect"));
464   mimeTypes.insert(pair<string, string>("wp6",       "application/wordperfect"));
465   mimeTypes.insert(pair<string, string>("wpd",       "application/wordperfect"));
466   mimeTypes.insert(pair<string, string>("wq1",       "application/x-lotus"));
467   mimeTypes.insert(pair<string, string>("wri",       "application/mswrite"));
468   mimeTypes.insert(pair<string, string>("wrl",       "model/vrml"));
469   mimeTypes.insert(pair<string, string>("wrz",       "model/vrml"));
470   mimeTypes.insert(pair<string, string>("wsc",       "text/scriplet"));
471   mimeTypes.insert(pair<string, string>("wsrc",      "application/x-wais-source"));
472   mimeTypes.insert(pair<string, string>("wtk",       "application/x-wintalk"));
473   mimeTypes.insert(pair<string, string>("xbm",       "image/xbm"));
474   mimeTypes.insert(pair<string, string>("xdr",       "video/x-amt-demorun"));
475   mimeTypes.insert(pair<string, string>("xgz",       "xgl/drawing"));
476   mimeTypes.insert(pair<string, string>("xif",       "image/vnd.xiff"));
477   mimeTypes.insert(pair<string, string>("xl",        "application/excel"));
478   mimeTypes.insert(pair<string, string>("xla",       "application/excel"));
479   mimeTypes.insert(pair<string, string>("xlb",       "application/excel"));
480   mimeTypes.insert(pair<string, string>("xlc",       "application/excel"));
481   mimeTypes.insert(pair<string, string>("xld",       "application/excel"));
482   mimeTypes.insert(pair<string, string>("xlk",       "application/excel"));
483   mimeTypes.insert(pair<string, string>("xll",       "application/excel"));
484   mimeTypes.insert(pair<string, string>("xlm",       "application/excel"));
485   mimeTypes.insert(pair<string, string>("xls",       "application/excel"));
486   mimeTypes.insert(pair<string, string>("xlsx",      "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet"));
487   mimeTypes.insert(pair<string, string>("xlt",       "application/excel"));
488   mimeTypes.insert(pair<string, string>("xlv",       "application/excel"));
489   mimeTypes.insert(pair<string, string>("xlw",       "application/excel"));
490   mimeTypes.insert(pair<string, string>("xm",        "audio/xm"));
491   mimeTypes.insert(pair<string, string>("xml",       "text/xml"));
492   mimeTypes.insert(pair<string, string>("xmz",       "xgl/movie"));
493   mimeTypes.insert(pair<string, string>("xpix",      "application/x-vnd.ls-xpix"));
494   mimeTypes.insert(pair<string, string>("xpm",       "image/xpm"));
495   mimeTypes.insert(pair<string, string>("x-png",     "image/png"));
496   mimeTypes.insert(pair<string, string>("xsr",       "video/x-amt-showrun"));
497   mimeTypes.insert(pair<string, string>("xvid",      "video/x-msvideo"));
498   mimeTypes.insert(pair<string, string>("xwd",       "image/x-xwd"));
499   mimeTypes.insert(pair<string, string>("xyz",       "chemical/x-pdb"));
500   mimeTypes.insert(pair<string, string>("z",         "application/x-compressed"));
501   mimeTypes.insert(pair<string, string>("zip",       "application/zip"));
502   mimeTypes.insert(pair<string, string>("zoo",       "application/octet-stream"));
503   mimeTypes.insert(pair<string, string>("zsh",       "text/x-script.zsh"));
504
505   return mimeTypes;
506 }
507
508 map<string, string> CMime::m_mimetypes = fillMimeTypes();
509
510 string CMime::GetMimeType(const string &extension)
511 {
512   if (extension.empty())
513     return "";
514
515   string ext = extension;
516   size_t posNotPoint = ext.find_first_not_of('.');
517   if (posNotPoint != string::npos && posNotPoint > 0)
518     ext = extension.substr(posNotPoint);
519   transform(ext.begin(), ext.end(), ext.begin(), ::tolower);
520
521   map<string, string>::const_iterator it = m_mimetypes.find(ext);
522   if (it != m_mimetypes.end())
523     return it->second;
524
525   return "";
526 }
527
528 string CMime::GetMimeType(const CFileItem &item)
529 {
530   CStdString path = item.GetPath();
531   if (item.HasVideoInfoTag() && !item.GetVideoInfoTag()->GetPath().empty())
532     path = item.GetVideoInfoTag()->GetPath();
533   else if (item.HasMusicInfoTag() && !item.GetMusicInfoTag()->GetURL().empty())
534     path = item.GetMusicInfoTag()->GetURL();
535
536   return GetMimeType(URIUtils::GetExtension(path));
537 }