diff --git a/src/libs/utils/mimetypes2/mimedatabase.cpp b/src/libs/utils/mimetypes2/mimedatabase.cpp index ab6ce1c5d43..f19eb9f4737 100644 --- a/src/libs/utils/mimetypes2/mimedatabase.cpp +++ b/src/libs/utils/mimetypes2/mimedatabase.cpp @@ -26,6 +26,15 @@ #include #include +static QString directoryMimeType() +{ + return QStringLiteral("inode/directory"); +} +static QString plainTextMimeType() +{ + return QStringLiteral("text/plain"); +} + namespace Utils { Q_GLOBAL_STATIC(MimeDatabasePrivate, staticMimeDatabase) @@ -226,7 +235,7 @@ MimeType MimeDatabasePrivate::mimeTypeForName(const QString &nameOrAlias) QStringList MimeDatabasePrivate::mimeTypeForFileName(const QString &fileName) { if (fileName.endsWith(QLatin1Char('/'))) - return {"inode/directory"}; + return { directoryMimeType() }; const MimeGlobMatchResult result = findByFileName(fileName); QStringList matchingMimeTypes = result.m_matchingMimeTypes; @@ -293,18 +302,18 @@ void MimeDatabasePrivate::loadIcon(MimeTypePrivate &mimePrivate) } } -static QString fallbackParent(const QString &mimeTypeName) +QString MimeDatabasePrivate::fallbackParent(const QString &mimeTypeName) const { const QStringView myGroup = QStringView{mimeTypeName}.left(mimeTypeName.indexOf(QLatin1Char('/'))); // All text/* types are subclasses of text/plain. - if (myGroup == QLatin1String("text") && mimeTypeName != QLatin1String("text/plain")) - return QStringLiteral("text/plain"); + if (myGroup == QLatin1String("text") && mimeTypeName != plainTextMimeType()) + return plainTextMimeType(); // All real-file mimetypes implicitly derive from application/octet-stream if (myGroup != QLatin1String("inode") && // ignore non-file extensions myGroup != QLatin1String("all") && myGroup != QLatin1String("fonts") && myGroup != QLatin1String("print") && myGroup != QLatin1String("uri") - && mimeTypeName != QLatin1String("application/octet-stream")) { - return QStringLiteral("application/octet-stream"); + && mimeTypeName != defaultMimeType()) { + return defaultMimeType(); } return QString(); } @@ -390,7 +399,7 @@ MimeType MimeDatabasePrivate::findByData(const QByteArray &data, int *accuracyPt if (isTextFile(data)) { *accuracyPtr = 5; - return mimeTypeForName(QStringLiteral("text/plain")); + return mimeTypeForName(plainTextMimeType()); } return mimeTypeForName(defaultMimeType()); @@ -500,7 +509,7 @@ MimeType MimeDatabasePrivate::mimeTypeForFile(const QString &fileName, QT_STATBUF statBuffer; if (QT_STAT(nativeFilePath.constData(), &statBuffer) == 0) { if (S_ISDIR(statBuffer.st_mode)) - return mimeTypeForName(QStringLiteral("inode/directory")); + return mimeTypeForName(directoryMimeType()); if (S_ISCHR(statBuffer.st_mode)) return mimeTypeForName(QStringLiteral("inode/chardevice")); if (S_ISBLK(statBuffer.st_mode)) @@ -513,7 +522,7 @@ MimeType MimeDatabasePrivate::mimeTypeForFile(const QString &fileName, #else const bool isDirectory = fileInfo ? fileInfo->isDir() : QFileInfo(fileName).isDir(); if (isDirectory) - return mimeTypeForName(QStringLiteral("inode/directory")); + return mimeTypeForName(directoryMimeType()); #endif switch (mode) { @@ -800,7 +809,7 @@ MimeType MimeDatabase::mimeTypeForFileNameAndData(const QString &fileName, QIODe QMutexLocker locker(&d->mutex); if (fileName.endsWith(QLatin1Char('/'))) - return d->mimeTypeForName(QStringLiteral("inode/directory")); + return d->mimeTypeForName(directoryMimeType()); const bool openedByUs = !device->isOpen() && device->open(QIODevice::ReadOnly); const MimeType result = d->mimeTypeForFileNameAndData(fileName, device); @@ -830,7 +839,7 @@ MimeType MimeDatabase::mimeTypeForFileNameAndData(const QString &fileName, const QMutexLocker locker(&d->mutex); if (fileName.endsWith(QLatin1Char('/'))) - return d->mimeTypeForName(QStringLiteral("inode/directory")); + return d->mimeTypeForName(directoryMimeType()); QBuffer buffer(const_cast(&data)); buffer.open(QIODevice::ReadOnly); diff --git a/src/libs/utils/mimetypes2/mimedatabase_p.h b/src/libs/utils/mimetypes2/mimedatabase_p.h index c3e8760915c..f8160acfe34 100644 --- a/src/libs/utils/mimetypes2/mimedatabase_p.h +++ b/src/libs/utils/mimetypes2/mimedatabase_p.h @@ -52,7 +52,7 @@ public: static MimeDatabasePrivate *instance(); - inline QString defaultMimeType() const { return m_defaultMimeType; } + const QString &defaultMimeType() const { return m_defaultMimeType; } bool inherits(const QString &mime, const QString &parent); @@ -91,7 +91,9 @@ private: const Providers &providers(); bool shouldCheck(); void loadProviders(); + QString fallbackParent(const QString &mimeTypeName) const; + const QString m_defaultMimeType; mutable Providers m_providers; QElapsedTimer m_lastCheck; @@ -101,7 +103,6 @@ private: bool m_forceLoad = true; public: - const QString m_defaultMimeType; QMutex mutex; // added for Qt Creator