diff options
author | Marcus Tillmanns <marcus.tillmanns@qt.io> | 2022-11-03 12:35:37 +0100 |
---|---|---|
committer | Marcus Tillmanns <marcus.tillmanns@qt.io> | 2022-11-04 09:52:15 +0000 |
commit | 7e0d545e64ebae123888873434daef293260d835 (patch) | |
tree | af44973734b3ee618c1e2da3fd3b05474d8d2818 | |
parent | 8de9892c4e877ea7b46940bfc25f203e789de994 (diff) | |
download | qt-creator-7e0d545e64ebae123888873434daef293260d835.tar.gz |
Utils: Allow mimetype deep-scan for remote files
Text editors need to know the actual mimetype of a file to be able to
open the correct editor view. Just checking the extension is not
enough. Especially on linux there are many text files without
an extension.
Change-Id: I7e5c935b0619f5d86e97f10bfd7ff9b65da62f4b
Reviewed-by: Eike Ziller <eike.ziller@qt.io>
-rw-r--r-- | src/libs/utils/mimetypes2/mimeutils.cpp | 7 | ||||
-rw-r--r-- | src/libs/utils/mimeutils.h | 7 | ||||
-rw-r--r-- | src/plugins/coreplugin/editormanager/editormanager.cpp | 3 | ||||
-rw-r--r-- | src/plugins/coreplugin/editormanager/ieditorfactory.cpp | 3 | ||||
-rw-r--r-- | src/plugins/coreplugin/mainwindow.cpp | 3 | ||||
-rw-r--r-- | src/plugins/texteditor/textdocument.cpp | 2 | ||||
-rw-r--r-- | src/plugins/texteditor/texteditor.cpp | 4 |
7 files changed, 21 insertions, 8 deletions
diff --git a/src/libs/utils/mimetypes2/mimeutils.cpp b/src/libs/utils/mimetypes2/mimeutils.cpp index 96ebeec394..7daafcd867 100644 --- a/src/libs/utils/mimetypes2/mimeutils.cpp +++ b/src/libs/utils/mimetypes2/mimeutils.cpp @@ -28,9 +28,12 @@ MimeType mimeTypeForFile(const QString &fileName, MimeMatchMode mode) MimeType mimeTypeForFile(const FilePath &filePath, MimeMatchMode mode) { MimeDatabase mdb; - if (filePath.needsDevice()) + if (filePath.needsDevice() && mode != MimeMatchMode::MatchDefaultAndRemote) return mdb.mimeTypeForUrl(filePath.toUrl()); - return mdb.mimeTypeForFile(filePath.toString(), MimeDatabase::MatchMode(mode)); + if (mode == MimeMatchMode::MatchDefaultAndRemote) { + mode = MimeMatchMode::MatchDefault; + } + return mdb.mimeTypeForFile(filePath.toFSPathString(), MimeDatabase::MatchMode(mode)); } QList<MimeType> mimeTypesForFileName(const QString &fileName) diff --git a/src/libs/utils/mimeutils.h b/src/libs/utils/mimeutils.h index 6e01b86346..15ce77d398 100644 --- a/src/libs/utils/mimeutils.h +++ b/src/libs/utils/mimeutils.h @@ -15,7 +15,12 @@ class FilePath; // Wrapped QMimeDataBase functions QTCREATOR_UTILS_EXPORT MimeType mimeTypeForName(const QString &nameOrAlias); -enum class MimeMatchMode { MatchDefault = 0x0, MatchExtension = 0x1, MatchContent = 0x2 }; +enum class MimeMatchMode { + MatchDefault = 0x0, + MatchExtension = 0x1, + MatchContent = 0x2, + MatchDefaultAndRemote = 0x3 +}; QTCREATOR_UTILS_EXPORT MimeType mimeTypeForFile(const QString &fileName, MimeMatchMode mode = MimeMatchMode::MatchDefault); diff --git a/src/plugins/coreplugin/editormanager/editormanager.cpp b/src/plugins/coreplugin/editormanager/editormanager.cpp index c0044573f5..6aeb53a220 100644 --- a/src/plugins/coreplugin/editormanager/editormanager.cpp +++ b/src/plugins/coreplugin/editormanager/editormanager.cpp @@ -739,7 +739,8 @@ bool EditorManagerPrivate::skipOpeningBigTextFile(const FilePath &filePath) if (!filePath.exists()) return false; - const MimeType mimeType = Utils::mimeTypeForFile(filePath); + const MimeType mimeType = Utils::mimeTypeForFile(filePath, + MimeMatchMode::MatchDefaultAndRemote); if (!mimeType.inherits("text/plain")) return false; diff --git a/src/plugins/coreplugin/editormanager/ieditorfactory.cpp b/src/plugins/coreplugin/editormanager/ieditorfactory.cpp index 22fcc9eb95..46820d7939 100644 --- a/src/plugins/coreplugin/editormanager/ieditorfactory.cpp +++ b/src/plugins/coreplugin/editormanager/ieditorfactory.cpp @@ -166,7 +166,8 @@ const EditorTypeList EditorType::defaultEditorTypes(const MimeType &mimeType) const EditorTypeList EditorType::preferredEditorTypes(const FilePath &filePath) { // default factories by mime type - const Utils::MimeType mimeType = Utils::mimeTypeForFile(filePath); + const Utils::MimeType mimeType = Utils::mimeTypeForFile(filePath, + MimeMatchMode::MatchDefaultAndRemote); EditorTypeList factories = defaultEditorTypes(mimeType); // user preferred factory to front EditorType *userPreferred = Internal::userPreferredEditorTypes().value(mimeType); diff --git a/src/plugins/coreplugin/mainwindow.cpp b/src/plugins/coreplugin/mainwindow.cpp index e71b0b1fc2..9c63e36e70 100644 --- a/src/plugins/coreplugin/mainwindow.cpp +++ b/src/plugins/coreplugin/mainwindow.cpp @@ -949,7 +949,8 @@ void MainWindow::openFile() static IDocumentFactory *findDocumentFactory(const QList<IDocumentFactory*> &fileFactories, const FilePath &filePath) { - const QString typeName = Utils::mimeTypeForFile(filePath).name(); + const QString typeName = Utils::mimeTypeForFile(filePath, MimeMatchMode::MatchDefaultAndRemote) + .name(); return Utils::findOrDefault(fileFactories, [typeName](IDocumentFactory *f) { return f->mimeTypes().contains(typeName); }); diff --git a/src/plugins/texteditor/textdocument.cpp b/src/plugins/texteditor/textdocument.cpp index ed7662cb66..b6f29946a7 100644 --- a/src/plugins/texteditor/textdocument.cpp +++ b/src/plugins/texteditor/textdocument.cpp @@ -732,7 +732,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).name()); + setMimeType(Utils::mimeTypeForFile(filePath, MimeMatchMode::MatchDefaultAndRemote).name()); emit openFinishedSuccessfully(); } return success; diff --git a/src/plugins/texteditor/texteditor.cpp b/src/plugins/texteditor/texteditor.cpp index 1c5e2dd855..6982ccbeb8 100644 --- a/src/plugins/texteditor/texteditor.cpp +++ b/src/plugins/texteditor/texteditor.cpp @@ -3342,7 +3342,9 @@ void TextEditorWidgetPrivate::updateFileLineEndingVisible() void TextEditorWidgetPrivate::reconfigure() { - m_document->setMimeType(Utils::mimeTypeForFile(m_document->filePath()).name()); + m_document->setMimeType( + Utils::mimeTypeForFile(m_document->filePath(), + MimeMatchMode::MatchDefaultAndRemote).name()); q->configureGenericHighlighter(); } |