From e13c2b74035f954675d6cfeed8a8e0b0d04bb5a1 Mon Sep 17 00:00:00 2001 From: David Schulz Date: Tue, 18 May 2021 14:35:07 +0200 Subject: [PATCH] MimeDatabase: add FilePath convenience function Change-Id: I59c825490b3b5c49f3c177584ea4cc885c4f920b Reviewed-by: Christian Stenger --- src/libs/utils/archive.cpp | 2 +- src/libs/utils/mimetypes/mimedatabase.cpp | 8 ++++++++ src/libs/utils/mimetypes/mimedatabase.h | 3 +++ src/plugins/cpptools/cppcompletionassist.cpp | 4 +--- src/plugins/imageviewer/imageviewerfile.cpp | 2 +- src/plugins/languageclient/client.cpp | 4 ++-- src/plugins/projectexplorer/buildconfiguration.cpp | 5 ++--- src/plugins/projectexplorer/projectexplorer.cpp | 2 +- src/plugins/projectexplorer/projectnodes.cpp | 3 +-- src/plugins/projectexplorer/treescanner.cpp | 2 +- src/plugins/qmljstools/qmljsmodelmanager.cpp | 2 +- src/plugins/texteditor/textdocument.cpp | 2 +- src/plugins/texteditor/texteditor.cpp | 2 +- 13 files changed, 24 insertions(+), 17 deletions(-) diff --git a/src/libs/utils/archive.cpp b/src/libs/utils/archive.cpp index 2a8795f4dc3..0f0b9ef4d22 100644 --- a/src/libs/utils/archive.cpp +++ b/src/libs/utils/archive.cpp @@ -116,7 +116,7 @@ static QVector toolsForMimeType(const Utils::MimeType &mimeType) static QVector toolsForFilePath(const Utils::FilePath &fp) { - return toolsForMimeType(Utils::mimeTypeForFile(fp.toString())); + return toolsForMimeType(Utils::mimeTypeForFile(fp)); } static Utils::optional resolveTool(const Tool &tool) diff --git a/src/libs/utils/mimetypes/mimedatabase.cpp b/src/libs/utils/mimetypes/mimedatabase.cpp index cffcaab75bf..656797c44fd 100644 --- a/src/libs/utils/mimetypes/mimedatabase.cpp +++ b/src/libs/utils/mimetypes/mimedatabase.cpp @@ -47,6 +47,8 @@ #include "mimeprovider_p.h" #include "mimetype_p.h" +#include + #include #include #include @@ -733,6 +735,12 @@ MimeType Utils::mimeTypeForFile(const QFileInfo &fileInfo, MimeMatchMode mode) return mdb.mimeTypeForFile(fileInfo, MimeDatabase::MatchMode(mode)); } +MimeType Utils::mimeTypeForFile(const FilePath &filePath, MimeMatchMode mode) +{ + MimeDatabase mdb; + return mdb.mimeTypeForFile(filePath.toString(), MimeDatabase::MatchMode(mode)); +} + QList Utils::mimeTypesForFileName(const QString &fileName) { MimeDatabase mdb; diff --git a/src/libs/utils/mimetypes/mimedatabase.h b/src/libs/utils/mimetypes/mimedatabase.h index 1a1c5c8a28c..9e217245421 100644 --- a/src/libs/utils/mimetypes/mimedatabase.h +++ b/src/libs/utils/mimetypes/mimedatabase.h @@ -50,6 +50,8 @@ QT_END_NAMESPACE namespace Utils { +class FilePath; + // Wrapped QMimeDataBase functions QTCREATOR_UTILS_EXPORT MimeType mimeTypeForName(const QString &nameOrAlias); @@ -61,6 +63,7 @@ enum class MimeMatchMode { QTCREATOR_UTILS_EXPORT MimeType mimeTypeForFile(const QString &fileName, MimeMatchMode mode = MimeMatchMode::MatchDefault); QTCREATOR_UTILS_EXPORT MimeType mimeTypeForFile(const QFileInfo &fileInfo, MimeMatchMode mode = MimeMatchMode::MatchDefault); +QTCREATOR_UTILS_EXPORT MimeType mimeTypeForFile(const FilePath &filePath, MimeMatchMode mode = MimeMatchMode::MatchDefault); QTCREATOR_UTILS_EXPORT QList mimeTypesForFileName(const QString &fileName); QTCREATOR_UTILS_EXPORT MimeType mimeTypeForData(const QByteArray &data); QTCREATOR_UTILS_EXPORT QList allMimeTypes(); diff --git a/src/plugins/cpptools/cppcompletionassist.cpp b/src/plugins/cpptools/cppcompletionassist.cpp index f5f929fd551..d52e4fa0fbb 100644 --- a/src/plugins/cpptools/cppcompletionassist.cpp +++ b/src/plugins/cpptools/cppcompletionassist.cpp @@ -1316,9 +1316,7 @@ bool InternalCppCompletionAssistProcessor::objcKeywordsWanted() const if (!m_interface->languageFeatures().objCEnabled) return false; - const QString fileName = m_interface->filePath().toString(); - - const Utils::MimeType mt = Utils::mimeTypeForFile(fileName); + const Utils::MimeType mt = Utils::mimeTypeForFile(m_interface->filePath()); return mt.matchesName(QLatin1String(CppTools::Constants::OBJECTIVE_C_SOURCE_MIMETYPE)) || mt.matchesName(QLatin1String(CppTools::Constants::OBJECTIVE_CPP_SOURCE_MIMETYPE)); } diff --git a/src/plugins/imageviewer/imageviewerfile.cpp b/src/plugins/imageviewer/imageviewerfile.cpp index d39e4931baf..2a6204e11d8 100644 --- a/src/plugins/imageviewer/imageviewerfile.cpp +++ b/src/plugins/imageviewer/imageviewerfile.cpp @@ -145,7 +145,7 @@ Core::IDocument::OpenResult ImageViewerFile::openImpl(QString *errorString, } setFilePath(filePath); - setMimeType(Utils::mimeTypeForFile(fileName).name()); + setMimeType(Utils::mimeTypeForFile(filePath).name()); return OpenResult::Success; } diff --git a/src/plugins/languageclient/client.cpp b/src/plugins/languageclient/client.cpp index 2ba17a799f0..33ee2c868d7 100644 --- a/src/plugins/languageclient/client.cpp +++ b/src/plugins/languageclient/client.cpp @@ -972,8 +972,8 @@ bool Client::isSupportedFile(const Utils::FilePath &filePath, const QString &mim bool Client::isSupportedUri(const DocumentUri &uri) const { - return m_languagFilter.isSupported(uri.toFilePath(), - Utils::mimeTypeForFile(uri.toFilePath().fileName()).name()); + const FilePath &filePath = uri.toFilePath(); + return m_languagFilter.isSupported(filePath, Utils::mimeTypeForFile(filePath).name()); } void Client::addAssistProcessor(TextEditor::IAssistProcessor *processor) diff --git a/src/plugins/projectexplorer/buildconfiguration.cpp b/src/plugins/projectexplorer/buildconfiguration.cpp index e92caf62d18..63ba53c4fb1 100644 --- a/src/plugins/projectexplorer/buildconfiguration.cpp +++ b/src/plugins/projectexplorer/buildconfiguration.cpp @@ -642,9 +642,8 @@ BuildConfigurationFactory *BuildConfigurationFactory::find(const Kit *k, const F QTC_ASSERT(k, return nullptr); const Utils::Id deviceType = DeviceTypeKitAspect::deviceTypeId(k); for (BuildConfigurationFactory *factory : qAsConst(g_buildConfigurationFactories)) { - if (Utils::mimeTypeForFile(projectPath.toString()) - .matchesName(factory->m_supportedProjectMimeTypeName) - && factory->supportsTargetDeviceType(deviceType)) + if (Utils::mimeTypeForFile(projectPath).matchesName(factory->m_supportedProjectMimeTypeName) + && factory->supportsTargetDeviceType(deviceType)) return factory; } return nullptr; diff --git a/src/plugins/projectexplorer/projectexplorer.cpp b/src/plugins/projectexplorer/projectexplorer.cpp index c5cee97319a..241e74a1133 100644 --- a/src/plugins/projectexplorer/projectexplorer.cpp +++ b/src/plugins/projectexplorer/projectexplorer.cpp @@ -4024,7 +4024,7 @@ QStringList ProjectExplorerPlugin::projectFilePatterns() bool ProjectExplorerPlugin::isProjectFile(const Utils::FilePath &filePath) { - Utils::MimeType mt = Utils::mimeTypeForFile(filePath.toString()); + Utils::MimeType mt = Utils::mimeTypeForFile(filePath); for (auto it = dd->m_projectCreators.cbegin(); it != dd->m_projectCreators.cend(); ++it) { if (mt.inherits(it.key())) return true; diff --git a/src/plugins/projectexplorer/projectnodes.cpp b/src/plugins/projectexplorer/projectnodes.cpp index be434510ca8..f2705678973 100644 --- a/src/plugins/projectexplorer/projectnodes.cpp +++ b/src/plugins/projectexplorer/projectnodes.cpp @@ -307,8 +307,7 @@ FileType Node::fileTypeForMimeType(const Utils::MimeType &mt) FileType Node::fileTypeForFileName(const Utils::FilePath &file) { - return fileTypeForMimeType(Utils::mimeTypeForFile(file.toString(), - Utils::MimeMatchMode::MatchExtension)); + return fileTypeForMimeType(Utils::mimeTypeForFile(file, Utils::MimeMatchMode::MatchExtension)); } QString Node::pathOrDirectory(bool dir) const diff --git a/src/plugins/projectexplorer/treescanner.cpp b/src/plugins/projectexplorer/treescanner.cpp index 809c131df68..f677c87e48b 100644 --- a/src/plugins/projectexplorer/treescanner.cpp +++ b/src/plugins/projectexplorer/treescanner.cpp @@ -150,7 +150,7 @@ void TreeScanner::scanForFiles(FutureInterface &fi, const Utils::FilePath& direc { Result nodes = FileNode::scanForFiles(fi, directory, [&filter, &factory](const Utils::FilePath &fn) -> FileNode * { - const Utils::MimeType mimeType = Utils::mimeTypeForFile(fn.toString()); + const Utils::MimeType mimeType = Utils::mimeTypeForFile(fn); // Skip some files during scan. if (filter && filter(mimeType, fn)) diff --git a/src/plugins/qmljstools/qmljsmodelmanager.cpp b/src/plugins/qmljstools/qmljsmodelmanager.cpp index 3a958522543..9b5344fe6e6 100644 --- a/src/plugins/qmljstools/qmljsmodelmanager.cpp +++ b/src/plugins/qmljstools/qmljsmodelmanager.cpp @@ -119,7 +119,7 @@ ModelManagerInterface::ProjectInfo ModelManager::defaultProjectInfoForProject( return false; const FileNode *fn = n->asFileNode(); return fn && fn->fileType() == FileType::QML - && qmlTypeNames.contains(Utils::mimeTypeForFile(fn->filePath().toString(), + && qmlTypeNames.contains(Utils::mimeTypeForFile(fn->filePath(), MimeMatchMode::MatchExtension).name()); }), &FilePath::toString); activeTarget = project->activeTarget(); diff --git a/src/plugins/texteditor/textdocument.cpp b/src/plugins/texteditor/textdocument.cpp index 2c5765dd213..a8f56f5b40e 100644 --- a/src/plugins/texteditor/textdocument.cpp +++ b/src/plugins/texteditor/textdocument.cpp @@ -719,7 +719,7 @@ Core::IDocument::OpenResult TextDocument::open(QString *errorString, emit aboutToOpen(filePath, realFilePath); OpenResult success = openImpl(errorString, filePath, realFilePath, /*reload =*/ false); if (success == OpenResult::Success) { - setMimeType(Utils::mimeTypeForFile(filePath.toString()).name()); + setMimeType(Utils::mimeTypeForFile(filePath).name()); emit openFinishedSuccessfully(); } return success; diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp index db7eb38b350..60d5930f7b7 100644 --- a/src/plugins/texteditor/texteditor.cpp +++ b/src/plugins/texteditor/texteditor.cpp @@ -3204,7 +3204,7 @@ void TextEditorWidgetPrivate::updateCodeFoldingVisible() void TextEditorWidgetPrivate::reconfigure() { - m_document->setMimeType(Utils::mimeTypeForFile(m_document->filePath().toString()).name()); + m_document->setMimeType(Utils::mimeTypeForFile(m_document->filePath()).name()); q->configureGenericHighlighter(); }