X-Git-Url: https://git.saurik.com/wxWidgets.git/blobdiff_plain/a24217f0500b95e77eee83fb42887ce8e5083157..98018a4b057dda20023a9276681f3d4ed335a6e1:/src/unix/mimetype.cpp diff --git a/src/unix/mimetype.cpp b/src/unix/mimetype.cpp index 8a91d72f82..0c3768dd46 100644 --- a/src/unix/mimetype.cpp +++ b/src/unix/mimetype.cpp @@ -38,25 +38,27 @@ #if wxUSE_MIMETYPE && wxUSE_FILE && wxUSE_TEXTFILE +#include "wx/unix/mimetype.h" + #ifndef WX_PRECOMP + #include "wx/dynarray.h" #include "wx/string.h" + #include "wx/intl.h" + #include "wx/log.h" + #include "wx/utils.h" #endif -#include "wx/log.h" #include "wx/file.h" -#include "wx/intl.h" -#include "wx/dynarray.h" #include "wx/confbase.h" #include "wx/ffile.h" #include "wx/textfile.h" #include "wx/dir.h" -#include "wx/utils.h" #include "wx/tokenzr.h" #include "wx/iconloc.h" #include "wx/filename.h" - -#include "wx/unix/mimetype.h" +#include "wx/app.h" +#include "wx/apptrait.h" #if wxUSE_LIBGNOMEVFS // Not GUI dependent @@ -280,7 +282,7 @@ void wxMimeTypesManagerImpl::LoadGnomeDataFromKeyFile(const wxString& filename, { wxTextFile textfile(filename); #if defined(__WXGTK20__) && wxUSE_UNICODE - if ( !textfile.Open(wxConvUTF8) ) + if ( !textfile.Open(wxMBConvUTF8(wxMBConvUTF8::MAP_INVALID_UTF8_TO_OCTAL)) ) #else if ( !textfile.Open() ) #endif @@ -345,7 +347,7 @@ void wxMimeTypesManagerImpl::LoadGnomeDataFromKeyFile(const wxString& filename, // calls to FileExist() required) if (nDir != 0) { - wxString tmp = search_dirs[nDir]; + const wxString &tmp = search_dirs[nDir]; search_dirs.RemoveAt( nDir ); search_dirs.Insert( tmp, 0 ); } @@ -730,7 +732,7 @@ bool wxMimeTypesManagerImpl::WriteKDEMimeFile(int index, bool delete_index) { // holds an extension; need to change it to *.ext; wxString e = wxT("*.") + tokenizer.GetNextToken() + wxT(";"); - sTmp = sTmp + e; + sTmp += e; } if (!delete_index) @@ -897,7 +899,7 @@ void wxMimeTypesManagerImpl::LoadKDELinksForMimeSubtype(const wxString& dirbase, // we expect %f; others including %F and %U and %u are possible wxString sTmp = file.GetCmd(nIndex); if (0 == sTmp.Replace( wxT("%f"), wxT("%s") )) - sTmp = sTmp + wxT(" %s"); + sTmp += wxT(" %s"); entry->AddOrReplaceVerb(wxString(wxT("open")), sTmp ); } @@ -1007,8 +1009,8 @@ void wxMimeTypesManagerImpl::GetKDEMimeInfo(const wxString& sExtraDir) // Check for entry wxString theme(wxT("default.kde")); - size_t cnt = config.GetLineCount(); - for (size_t i = 0; i < cnt; i++) + size_t nCount = config.GetLineCount(); + for (size_t i = 0; i < nCount; i++) { if (config[i].StartsWith(wxT("Theme="), &theme/*rest*/)) break; @@ -1135,7 +1137,8 @@ bool wxFileTypeImpl::GetIcon(wxIconLocation *iconLoc) const bool wxFileTypeImpl::GetMimeTypes(wxArrayString& mimeTypes) const { mimeTypes.Clear(); - for (size_t i = 0; i < m_index.GetCount(); i++) + size_t nCount = m_index.GetCount(); + for (size_t i = 0; i < nCount; i++) mimeTypes.Add(m_manager->m_aTypes[m_index[i]]); return true; @@ -1248,7 +1251,8 @@ wxFileTypeImpl::SetCommand(const wxString& cmd, entry->Add(verb + wxT("=") + cmd + wxT(" %s ")); bool ok = true; - for ( size_t i = 0; i < strTypes.GetCount(); i++ ) + size_t nCount = strTypes.GetCount(); + for ( size_t i = 0; i < nCount; i++ ) { if (!m_manager->DoAssociation(strTypes[i], strIcon, entry, strExtensions, strDesc)) ok = false; @@ -1257,7 +1261,7 @@ wxFileTypeImpl::SetCommand(const wxString& cmd, return ok; } -// ignore index on the grouds that we only have one icon in a Unix file +// ignore index on the grounds that we only have one icon in a Unix file bool wxFileTypeImpl::SetDefaultIcon(const wxString& strIcon, int WXUNUSED(index)) { if (strIcon.empty()) @@ -1273,7 +1277,8 @@ bool wxFileTypeImpl::SetDefaultIcon(const wxString& strIcon, int WXUNUSED(index) wxMimeTypeCommands *entry = new wxMimeTypeCommands(); bool ok = true; - for ( size_t i = 0; i < strTypes.GetCount(); i++ ) + size_t nCount = strTypes.GetCount(); + for ( size_t i = 0; i < nCount; i++ ) { if ( !m_manager->DoAssociation ( @@ -1307,15 +1312,15 @@ void wxMimeTypesManagerImpl::InitIfNeeded() { // set the flag first to prevent recursion m_initialized = true; - - wxString wm = wxGetenv( wxT("WINDOWMANAGER") ); - - if (wm.Find( wxT("kde") ) != wxNOT_FOUND) - Initialize( wxMAILCAP_KDE ); - else if (wm.Find( wxT("gnome") ) != wxNOT_FOUND) - Initialize( wxMAILCAP_GNOME ); - else - Initialize(); + + wxString wm = wxTheApp->GetTraits()->GetDesktopEnvironment(); + + if (wm == wxT("KDE")) + Initialize( wxMAILCAP_KDE ); + else if (wm == wxT("GNOME")) + Initialize( wxMAILCAP_GNOME ); + else + Initialize(); } } @@ -1385,20 +1390,21 @@ void wxMimeTypesManagerImpl::GetMimeInfo(const wxString& sExtraDir) if (!sExtraDir.empty()) dirs.Add( sExtraDir + wxT("/") ); + wxString file; size_t nDirs = dirs.GetCount(); for ( size_t nDir = 0; nDir < nDirs; nDir++ ) { - wxString file = dirs[nDir] + wxT("mailcap"); + file = dirs[nDir]; + file += wxT("mailcap"); if ( wxFile::Exists(file) ) { ReadMailcap(file); } - file = dirs[nDir] + wxT("mime.types"); + file = dirs[nDir]; + file += wxT("mime.types"); if ( wxFile::Exists(file) ) - { ReadMimeTypes(file); - } } } @@ -1434,7 +1440,7 @@ bool wxMimeTypesManagerImpl::WriteToMimeTypes(int index, bool delete_index) nIndex = file.pIndexOf(wxT("#--Netscape")); if (nIndex != wxNOT_FOUND) { - wxASSERT_MSG(false,wxT("Error in .mime.types \nTrying to mix Netscape and Metamail formats\nFile not modiifed")); + wxFAIL_MSG(wxT("Error in .mime.types\nTrying to mix Netscape and Metamail formats\nFile not modified")); return false; } @@ -1451,7 +1457,7 @@ bool wxMimeTypesManagerImpl::WriteToMimeTypes(int index, bool delete_index) { // add the new entries in wxString sTmp = strType.Append( wxT(' '), 40 - strType.Len() ); - sTmp = sTmp + m_aExtensions[index]; + sTmp += m_aExtensions[index]; file.AddLine(sTmp); } @@ -1501,7 +1507,7 @@ bool wxMimeTypesManagerImpl::WriteToNSMimeTypes(int index, bool delete_index) // metamail entreies if (file.GetLineCount() > 0) { - wxASSERT_MSG(false, wxT(".mime.types File not in Netscape format\nNo entries written to\n.mime.types or to .mailcap")); + wxFAIL_MSG(wxT(".mime.types File not in Netscape format\nNo entries written to\n.mime.types or to .mailcap")); return false; } @@ -1620,7 +1626,7 @@ bool wxMimeTypesManagerImpl::WriteToMailCap(int index, bool delete_index) file.GetLineCount()) file.CommentLine(nIndex); } - sTmp = sTmp + wxT(";") + sCmd; //includes wxT(" %s "); + sTmp += wxT(";") + sCmd; //includes wxT(" %s "); // write it in the format that Netscape uses (default) if (! ( m_mailcapStylesInited & wxMAILCAP_STANDARD ) ) @@ -1658,7 +1664,8 @@ bool wxMimeTypesManagerImpl::WriteToMailCap(int index, bool delete_index) bKnownToken = true; size_t i; - for (i=0; i < entries->GetCount(); i++) + size_t nCount = entries->GetCount(); + for (i=0; i < nCount; i++) { if (s.Contains(entries->GetVerb(i))) bKnownToken = true; @@ -1666,7 +1673,7 @@ bool wxMimeTypesManagerImpl::WriteToMailCap(int index, bool delete_index) if (!bKnownToken) { - sTmp = sTmp + wxT("; \\"); + sTmp += wxT("; \\"); file.InsertLine(sTmp, nIndex); sTmp = s; } @@ -1677,7 +1684,7 @@ bool wxMimeTypesManagerImpl::WriteToMailCap(int index, bool delete_index) if (! m_aDescriptions[index].empty() ) { - sTmp = sTmp + wxT("; \\"); + sTmp += wxT("; \\"); file.InsertLine(sTmp, nIndex); nIndex++; sTmp = wxT(" description=\"") + m_aDescriptions[index] + wxT("\""); @@ -1685,7 +1692,7 @@ bool wxMimeTypesManagerImpl::WriteToMailCap(int index, bool delete_index) if (! m_aIcons[index].empty() ) { - sTmp = sTmp + wxT("; \\"); + sTmp += wxT("; \\"); file.InsertLine(sTmp, nIndex); nIndex++; sTmp = wxT(" x11-bitmap=\"") + m_aIcons[index] + wxT("\""); @@ -1697,7 +1704,7 @@ bool wxMimeTypesManagerImpl::WriteToMailCap(int index, bool delete_index) for (i=0; i < entries->GetCount(); i++) if ( i != iOpen ) { - sTmp = sTmp + wxT("; \\"); + sTmp += wxT("; \\"); file.InsertLine(sTmp, nIndex); nIndex++; sTmp = wxT(" ") + entries->GetVerbCmd(i); @@ -1734,14 +1741,16 @@ wxFileType * wxMimeTypesManagerImpl::Associate(const wxFileTypeInfo& ftInfo) wxArrayString sA_Exts = ftInfo.GetExtensions(); wxString sExt, sExtStore; size_t i, nIndex; - for (i=0; i < sA_Exts.GetCount(); i++) + size_t nExtCount = sA_Exts.GetCount(); + for (i=0; i < nExtCount; i++) { sExt = sA_Exts.Item(i); // clean up to just a space before and after sExt.Trim().Trim(false); sExt = wxT(' ') + sExt + wxT(' '); - for (nIndex = 0; nIndex < m_aExtensions.GetCount(); nIndex++) + size_t nCount = m_aExtensions.GetCount(); + for (nIndex = 0; nIndex < nCount; nIndex++) { sExtStore = m_aExtensions.Item(nIndex); if (sExtStore.Replace(sExt, wxT(" ") ) > 0) @@ -1883,10 +1892,12 @@ int wxMimeTypesManagerImpl::AddToMimeData(const wxString& strType, wxString& exts = m_aExtensions[nIndex]; // add all extensions we don't have yet + wxString ext; size_t count = strExtensions.GetCount(); for ( size_t i = 0; i < count; i++ ) { - wxString ext = strExtensions[i] + wxT(' '); + ext = strExtensions[i]; + ext += wxT(' '); if ( exts.Find(ext) == wxNOT_FOUND ) { @@ -1987,7 +1998,8 @@ wxString wxMimeTypesManagerImpl::GetCommand(const wxString & verb, size_t nIndex wxMimeTypeCommands * sPairs = m_aEntries [nIndex]; size_t i; - for ( i = 0; i < sPairs->GetCount (); i++ ) + size_t nCount = sPairs->GetCount(); + for ( i = 0; i < nCount; i++ ) { sTmp = sPairs->GetVerbCmd (i); if ( sTmp.Contains(sV) ) @@ -2383,6 +2395,10 @@ bool wxMimeTypesManagerImpl::ReadMailcap(const wxString& strFileName, wxString curField; curField.reserve(1024); + const wxChar *pPagerEnv = wxGetenv(wxT("PAGER")); + + const wxArrayString empty_extensions_list; + size_t nLineCount = file.GetLineCount(); for ( size_t nLine = 0; nLine < nLineCount; nLine++ ) { @@ -2557,13 +2573,12 @@ bool wxMimeTypesManagerImpl::ReadMailcap(const wxString& strFileName, // is a bad idea (FIXME) if ( data.copiousoutput ) { - const wxChar *p = wxGetenv(wxT("PAGER")); - data.cmdOpen << wxT(" | ") << (p ? p : wxT("more")); + data.cmdOpen << wxT(" | ") << (pPagerEnv ? pPagerEnv : wxT("more")); } if ( data.needsterminal ) { - data.cmdOpen = wxString::Format(wxT("xterm -e sh -c '%s'"), + data.cmdOpen.Printf(wxT("xterm -e sh -c '%s'"), data.cmdOpen.c_str()); } @@ -2602,7 +2617,7 @@ bool wxMimeTypesManagerImpl::ReadMailcap(const wxString& strFileName, data.type, data.icon, new wxMimeTypeCommands(data.verbs, data.commands), - wxArrayString() /* extensions */, + empty_extensions_list, data.desc, overwrite ); @@ -2622,12 +2637,11 @@ size_t wxMimeTypesManagerImpl::EnumAllFileTypes(wxArrayString& mimetypes) mimetypes.Empty(); - wxString type; size_t count = m_aTypes.GetCount(); for ( size_t n = 0; n < count; n++ ) { // don't return template types from here (i.e. anything containg '*') - type = m_aTypes[n]; + const wxString &type = m_aTypes[n]; if ( type.Find(wxT('*')) == wxNOT_FOUND ) { mimetypes.Add(type); @@ -2643,14 +2657,16 @@ size_t wxMimeTypesManagerImpl::EnumAllFileTypes(wxArrayString& mimetypes) bool wxMimeTypesManagerImpl::Unassociate(wxFileType *ft) { + InitIfNeeded(); + wxArrayString sMimeTypes; ft->GetMimeTypes(sMimeTypes); - wxString sMime; size_t i; - for (i = 0; i < sMimeTypes.GetCount(); i ++) + size_t nCount = sMimeTypes.GetCount(); + for (i = 0; i < nCount; i ++) { - sMime = sMimeTypes.Item(i); + const wxString &sMime = sMimeTypes.Item(i); int nIndex = m_aTypes.Index(sMime); if ( nIndex == wxNOT_FOUND) { @@ -2682,7 +2698,7 @@ bool wxMimeTypesManagerImpl::Unassociate(wxFileType *ft) static bool IsKnownUnimportantField(const wxString& fieldAll) { - static const wxChar *knownFields[] = + static const wxChar * const knownFields[] = { wxT("x-mozilla-flags"), wxT("nametemplate"),