summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMarcus Tillmanns <marcus.tillmanns@qt.io>2022-11-03 12:35:37 +0100
committerMarcus Tillmanns <marcus.tillmanns@qt.io>2022-11-04 09:52:15 +0000
commit7e0d545e64ebae123888873434daef293260d835 (patch)
treeaf44973734b3ee618c1e2da3fd3b05474d8d2818
parent8de9892c4e877ea7b46940bfc25f203e789de994 (diff)
downloadqt-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.cpp7
-rw-r--r--src/libs/utils/mimeutils.h7
-rw-r--r--src/plugins/coreplugin/editormanager/editormanager.cpp3
-rw-r--r--src/plugins/coreplugin/editormanager/ieditorfactory.cpp3
-rw-r--r--src/plugins/coreplugin/mainwindow.cpp3
-rw-r--r--src/plugins/texteditor/textdocument.cpp2
-rw-r--r--src/plugins/texteditor/texteditor.cpp4
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();
}