X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/24528b0c1421ca7bde29027cecc005643dfae8cb..4f9297b0eead20a0bfee71df18e0d8f0cbc402fb:/src/common/filesys.cpp diff --git a/src/common/filesys.cpp b/src/common/filesys.cpp index ea9f907982..9925521aa3 100644 --- a/src/common/filesys.cpp +++ b/src/common/filesys.cpp @@ -35,6 +35,8 @@ IMPLEMENT_ABSTRACT_CLASS(wxFileSystemHandler, wxObject) +static wxFileTypeInfo *gs_FSMimeFallbacks = NULL; + wxString wxFileSystemHandler::GetMimeTypeFromExt(const wxString& location) { wxString ext = wxEmptyString, mime = wxEmptyString; @@ -53,50 +55,18 @@ wxString wxFileSystemHandler::GetMimeTypeFromExt(const wxString& location) static bool s_MinimalMimeEnsured = FALSE; if (!s_MinimalMimeEnsured) { - static const wxFileTypeInfo fallbacks[] = - { - wxFileTypeInfo("image/jpeg", - "", - "", - "JPEG image (from fallback)", - "jpg", "jpeg", NULL), - wxFileTypeInfo("image/gif", - "", - "", - "GIF image (from fallback)", - "gif", NULL), - wxFileTypeInfo("image/png", - "", - "", - "PNG image (from fallback)", - "png", NULL), - wxFileTypeInfo("image/bmp", - "", - "", - "windows bitmap image (from fallback)", - "bmp", NULL), - wxFileTypeInfo("text/html", - "", - "", - "HTML document (from fallback)", - "htm", "html", NULL), - - // must terminate the table with this! - wxFileTypeInfo() - }; - - wxTheMimeTypesManager -> AddFallbacks(fallbacks); + wxTheMimeTypesManager -> AddFallbacks(gs_FSMimeFallbacks); + s_MinimalMimeEnsured = TRUE; } ft = wxTheMimeTypesManager -> GetFileTypeFromExtension(ext); - if (ft && (ft -> GetMimeType(&mime))) { - delete ft; - return mime; - } - else { - delete ft; - return wxEmptyString; + if ( !ft || !ft -> GetMimeType(&mime) ) { + mime = wxEmptyString; } + + delete ft; + + return mime; } @@ -186,13 +156,15 @@ bool wxLocalFSHandler::CanOpen(const wxString& location) wxFSFile* wxLocalFSHandler::OpenFile(wxFileSystem& WXUNUSED(fs), const wxString& location) { wxString right = GetRightLocation(location); - if (wxFileExists(right)) - return new wxFSFile(new wxFileInputStream(right), - right, - GetMimeTypeFromExt(location), - GetAnchor(location), - wxDateTime(wxFileModificationTime(right))); - else return (wxFSFile*) NULL; + if (!wxFileExists(right)) + return (wxFSFile*) NULL; + + return new wxFSFile(new wxFileInputStream(right), + right, + GetMimeTypeFromExt(location), + GetAnchor(location), + wxDateTime(wxFileModificationTime(right))); + } wxString wxLocalFSHandler::FindFirst(const wxString& spec, int flags) @@ -326,11 +298,13 @@ wxFSFile* wxFileSystem::OpenFile(const wxString& location) meta = 0; for (i = 0; i < ln; i++) { - if (!meta) - switch (loc[i]) - { - case wxT('/') : case wxT(':') : case wxT('#') : meta = loc[i]; - } + switch (loc[i]) + { + case wxT('/') : case wxT(':') : case wxT('#') : + meta = loc[i]; + break; + } + if (meta != 0) break; } m_LastName = wxEmptyString; @@ -436,10 +410,47 @@ class wxFileSystemModule : public wxModule virtual bool OnInit() { wxFileSystem::AddHandler(new wxLocalFSHandler); + + gs_FSMimeFallbacks = new wxFileTypeInfo[6]; + gs_FSMimeFallbacks[0] = + wxFileTypeInfo("image/jpeg", + "", + "", + "JPEG image (from fallback)", + "jpg", "jpeg", NULL); + gs_FSMimeFallbacks[1] = + wxFileTypeInfo("image/gif", + "", + "", + "GIF image (from fallback)", + "gif", NULL); + gs_FSMimeFallbacks[2] = + wxFileTypeInfo("image/png", + "", + "", + "PNG image (from fallback)", + "png", NULL); + gs_FSMimeFallbacks[3] = + wxFileTypeInfo("image/bmp", + "", + "", + "windows bitmap image (from fallback)", + "bmp", NULL); + gs_FSMimeFallbacks[4] = + wxFileTypeInfo("text/html", + "", + "", + "HTML document (from fallback)", + "htm", "html", NULL); + gs_FSMimeFallbacks[5] = + // must terminate the table with this! + wxFileTypeInfo(); + return TRUE; } virtual void OnExit() { + delete gs_FSMimeFallbacks; wxFileSystem::CleanUpHandlers(); } };