forked from qt-creator/qt-creator
Update mime database from Qt
qtbase/0dbbda670d1e9f79d85edc1599315943d9eec33a QMimeDatabasePrivate: deduplicate QStringLiteral Change-Id: Id0d58f48d1b4c48dd99078258ac603a211523760 Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
This commit is contained in:
@@ -26,6 +26,15 @@
|
|||||||
#include <functional>
|
#include <functional>
|
||||||
#include <stack>
|
#include <stack>
|
||||||
|
|
||||||
|
static QString directoryMimeType()
|
||||||
|
{
|
||||||
|
return QStringLiteral("inode/directory");
|
||||||
|
}
|
||||||
|
static QString plainTextMimeType()
|
||||||
|
{
|
||||||
|
return QStringLiteral("text/plain");
|
||||||
|
}
|
||||||
|
|
||||||
namespace Utils {
|
namespace Utils {
|
||||||
|
|
||||||
Q_GLOBAL_STATIC(MimeDatabasePrivate, staticMimeDatabase)
|
Q_GLOBAL_STATIC(MimeDatabasePrivate, staticMimeDatabase)
|
||||||
@@ -226,7 +235,7 @@ MimeType MimeDatabasePrivate::mimeTypeForName(const QString &nameOrAlias)
|
|||||||
QStringList MimeDatabasePrivate::mimeTypeForFileName(const QString &fileName)
|
QStringList MimeDatabasePrivate::mimeTypeForFileName(const QString &fileName)
|
||||||
{
|
{
|
||||||
if (fileName.endsWith(QLatin1Char('/')))
|
if (fileName.endsWith(QLatin1Char('/')))
|
||||||
return {"inode/directory"};
|
return { directoryMimeType() };
|
||||||
|
|
||||||
const MimeGlobMatchResult result = findByFileName(fileName);
|
const MimeGlobMatchResult result = findByFileName(fileName);
|
||||||
QStringList matchingMimeTypes = result.m_matchingMimeTypes;
|
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('/')));
|
const QStringView myGroup = QStringView{mimeTypeName}.left(mimeTypeName.indexOf(QLatin1Char('/')));
|
||||||
// All text/* types are subclasses of text/plain.
|
// All text/* types are subclasses of text/plain.
|
||||||
if (myGroup == QLatin1String("text") && mimeTypeName != QLatin1String("text/plain"))
|
if (myGroup == QLatin1String("text") && mimeTypeName != plainTextMimeType())
|
||||||
return QStringLiteral("text/plain");
|
return plainTextMimeType();
|
||||||
// All real-file mimetypes implicitly derive from application/octet-stream
|
// All real-file mimetypes implicitly derive from application/octet-stream
|
||||||
if (myGroup != QLatin1String("inode") &&
|
if (myGroup != QLatin1String("inode") &&
|
||||||
// ignore non-file extensions
|
// ignore non-file extensions
|
||||||
myGroup != QLatin1String("all") && myGroup != QLatin1String("fonts") && myGroup != QLatin1String("print") && myGroup != QLatin1String("uri")
|
myGroup != QLatin1String("all") && myGroup != QLatin1String("fonts") && myGroup != QLatin1String("print") && myGroup != QLatin1String("uri")
|
||||||
&& mimeTypeName != QLatin1String("application/octet-stream")) {
|
&& mimeTypeName != defaultMimeType()) {
|
||||||
return QStringLiteral("application/octet-stream");
|
return defaultMimeType();
|
||||||
}
|
}
|
||||||
return QString();
|
return QString();
|
||||||
}
|
}
|
||||||
@@ -390,7 +399,7 @@ MimeType MimeDatabasePrivate::findByData(const QByteArray &data, int *accuracyPt
|
|||||||
|
|
||||||
if (isTextFile(data)) {
|
if (isTextFile(data)) {
|
||||||
*accuracyPtr = 5;
|
*accuracyPtr = 5;
|
||||||
return mimeTypeForName(QStringLiteral("text/plain"));
|
return mimeTypeForName(plainTextMimeType());
|
||||||
}
|
}
|
||||||
|
|
||||||
return mimeTypeForName(defaultMimeType());
|
return mimeTypeForName(defaultMimeType());
|
||||||
@@ -500,7 +509,7 @@ MimeType MimeDatabasePrivate::mimeTypeForFile(const QString &fileName,
|
|||||||
QT_STATBUF statBuffer;
|
QT_STATBUF statBuffer;
|
||||||
if (QT_STAT(nativeFilePath.constData(), &statBuffer) == 0) {
|
if (QT_STAT(nativeFilePath.constData(), &statBuffer) == 0) {
|
||||||
if (S_ISDIR(statBuffer.st_mode))
|
if (S_ISDIR(statBuffer.st_mode))
|
||||||
return mimeTypeForName(QStringLiteral("inode/directory"));
|
return mimeTypeForName(directoryMimeType());
|
||||||
if (S_ISCHR(statBuffer.st_mode))
|
if (S_ISCHR(statBuffer.st_mode))
|
||||||
return mimeTypeForName(QStringLiteral("inode/chardevice"));
|
return mimeTypeForName(QStringLiteral("inode/chardevice"));
|
||||||
if (S_ISBLK(statBuffer.st_mode))
|
if (S_ISBLK(statBuffer.st_mode))
|
||||||
@@ -513,7 +522,7 @@ MimeType MimeDatabasePrivate::mimeTypeForFile(const QString &fileName,
|
|||||||
#else
|
#else
|
||||||
const bool isDirectory = fileInfo ? fileInfo->isDir() : QFileInfo(fileName).isDir();
|
const bool isDirectory = fileInfo ? fileInfo->isDir() : QFileInfo(fileName).isDir();
|
||||||
if (isDirectory)
|
if (isDirectory)
|
||||||
return mimeTypeForName(QStringLiteral("inode/directory"));
|
return mimeTypeForName(directoryMimeType());
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
@@ -800,7 +809,7 @@ MimeType MimeDatabase::mimeTypeForFileNameAndData(const QString &fileName, QIODe
|
|||||||
QMutexLocker locker(&d->mutex);
|
QMutexLocker locker(&d->mutex);
|
||||||
|
|
||||||
if (fileName.endsWith(QLatin1Char('/')))
|
if (fileName.endsWith(QLatin1Char('/')))
|
||||||
return d->mimeTypeForName(QStringLiteral("inode/directory"));
|
return d->mimeTypeForName(directoryMimeType());
|
||||||
|
|
||||||
const bool openedByUs = !device->isOpen() && device->open(QIODevice::ReadOnly);
|
const bool openedByUs = !device->isOpen() && device->open(QIODevice::ReadOnly);
|
||||||
const MimeType result = d->mimeTypeForFileNameAndData(fileName, device);
|
const MimeType result = d->mimeTypeForFileNameAndData(fileName, device);
|
||||||
@@ -830,7 +839,7 @@ MimeType MimeDatabase::mimeTypeForFileNameAndData(const QString &fileName, const
|
|||||||
QMutexLocker locker(&d->mutex);
|
QMutexLocker locker(&d->mutex);
|
||||||
|
|
||||||
if (fileName.endsWith(QLatin1Char('/')))
|
if (fileName.endsWith(QLatin1Char('/')))
|
||||||
return d->mimeTypeForName(QStringLiteral("inode/directory"));
|
return d->mimeTypeForName(directoryMimeType());
|
||||||
|
|
||||||
QBuffer buffer(const_cast<QByteArray *>(&data));
|
QBuffer buffer(const_cast<QByteArray *>(&data));
|
||||||
buffer.open(QIODevice::ReadOnly);
|
buffer.open(QIODevice::ReadOnly);
|
||||||
|
@@ -52,7 +52,7 @@ public:
|
|||||||
|
|
||||||
static MimeDatabasePrivate *instance();
|
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);
|
bool inherits(const QString &mime, const QString &parent);
|
||||||
|
|
||||||
@@ -91,7 +91,9 @@ private:
|
|||||||
const Providers &providers();
|
const Providers &providers();
|
||||||
bool shouldCheck();
|
bool shouldCheck();
|
||||||
void loadProviders();
|
void loadProviders();
|
||||||
|
QString fallbackParent(const QString &mimeTypeName) const;
|
||||||
|
|
||||||
|
const QString m_defaultMimeType;
|
||||||
mutable Providers m_providers;
|
mutable Providers m_providers;
|
||||||
QElapsedTimer m_lastCheck;
|
QElapsedTimer m_lastCheck;
|
||||||
|
|
||||||
@@ -101,7 +103,6 @@ private:
|
|||||||
bool m_forceLoad = true;
|
bool m_forceLoad = true;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
const QString m_defaultMimeType;
|
|
||||||
QMutex mutex;
|
QMutex mutex;
|
||||||
|
|
||||||
// added for Qt Creator
|
// added for Qt Creator
|
||||||
|
Reference in New Issue
Block a user