forked from qt-creator/qt-creator
Update mime database from Qt
qtbase/153ded9b957cd9f906ca8d6c2d6d88bc85407246 QMimeDatabasePrivate: remove unused output parameter Change-Id: I14b210f1f1e1a8edc0240b0f69858508c9e5a2ca Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
This commit is contained in:
@@ -396,19 +396,17 @@ MimeType MimeDatabasePrivate::findByData(const QByteArray &data, int *accuracyPt
|
|||||||
return mimeTypeForName(defaultMimeType());
|
return mimeTypeForName(defaultMimeType());
|
||||||
}
|
}
|
||||||
|
|
||||||
MimeType MimeDatabasePrivate::mimeTypeForFileNameAndData(const QString &fileName, QIODevice *device, int *accuracyPtr)
|
MimeType MimeDatabasePrivate::mimeTypeForFileNameAndData(const QString &fileName, QIODevice *device)
|
||||||
{
|
{
|
||||||
// First, glob patterns are evaluated. If there is a match with max weight,
|
// First, glob patterns are evaluated. If there is a match with max weight,
|
||||||
// this one is selected and we are done. Otherwise, the file contents are
|
// this one is selected and we are done. Otherwise, the file contents are
|
||||||
// evaluated and the match with the highest value (either a magic priority or
|
// evaluated and the match with the highest value (either a magic priority or
|
||||||
// a glob pattern weight) is selected. Matching starts from max level (most
|
// a glob pattern weight) is selected. Matching starts from max level (most
|
||||||
// specific) in both cases, even when there is already a suffix matching candidate.
|
// specific) in both cases, even when there is already a suffix matching candidate.
|
||||||
*accuracyPtr = 0;
|
|
||||||
|
|
||||||
// Pass 1) Try to match on the file name
|
// Pass 1) Try to match on the file name
|
||||||
MimeGlobMatchResult candidatesByName = findByFileName(fileName);
|
MimeGlobMatchResult candidatesByName = findByFileName(fileName);
|
||||||
if (candidatesByName.m_allMatchingMimeTypes.count() == 1) {
|
if (candidatesByName.m_allMatchingMimeTypes.count() == 1) {
|
||||||
*accuracyPtr = 100;
|
|
||||||
const MimeType mime = mimeTypeForName(candidatesByName.m_matchingMimeTypes.at(0));
|
const MimeType mime = mimeTypeForName(candidatesByName.m_matchingMimeTypes.at(0));
|
||||||
if (mime.isValid())
|
if (mime.isValid())
|
||||||
return mime;
|
return mime;
|
||||||
@@ -417,7 +415,7 @@ MimeType MimeDatabasePrivate::mimeTypeForFileNameAndData(const QString &fileName
|
|||||||
|
|
||||||
// Extension is unknown, or matches multiple mimetypes.
|
// Extension is unknown, or matches multiple mimetypes.
|
||||||
// Pass 2) Match on content, if we can read the data
|
// Pass 2) Match on content, if we can read the data
|
||||||
const auto matchOnContent = [this, accuracyPtr, &candidatesByName](QIODevice *device) {
|
const auto matchOnContent = [this, &candidatesByName](QIODevice *device) {
|
||||||
if (device->isOpen()) {
|
if (device->isOpen()) {
|
||||||
// Read 16K in one go (QIODEVICE_BUFFERSIZE in qiodevice_p.h).
|
// Read 16K in one go (QIODEVICE_BUFFERSIZE in qiodevice_p.h).
|
||||||
// This is much faster than seeking back and forth into QIODevice.
|
// This is much faster than seeking back and forth into QIODevice.
|
||||||
@@ -431,19 +429,16 @@ MimeType MimeDatabasePrivate::mimeTypeForFileNameAndData(const QString &fileName
|
|||||||
const QString sniffedMime = candidateByData.name();
|
const QString sniffedMime = candidateByData.name();
|
||||||
// If the sniffedMime matches a highest-weight glob match, use it
|
// If the sniffedMime matches a highest-weight glob match, use it
|
||||||
if (candidatesByName.m_matchingMimeTypes.contains(sniffedMime)) {
|
if (candidatesByName.m_matchingMimeTypes.contains(sniffedMime)) {
|
||||||
*accuracyPtr = 100;
|
|
||||||
return candidateByData;
|
return candidateByData;
|
||||||
}
|
}
|
||||||
for (const QString &m : std::as_const(candidatesByName.m_allMatchingMimeTypes)) {
|
for (const QString &m : std::as_const(candidatesByName.m_allMatchingMimeTypes)) {
|
||||||
if (inherits(m, sniffedMime)) {
|
if (inherits(m, sniffedMime)) {
|
||||||
// We have magic + pattern pointing to this, so it's a pretty good match
|
// We have magic + pattern pointing to this, so it's a pretty good match
|
||||||
*accuracyPtr = 100;
|
|
||||||
return mimeTypeForName(m);
|
return mimeTypeForName(m);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (candidatesByName.m_allMatchingMimeTypes.isEmpty()) {
|
if (candidatesByName.m_allMatchingMimeTypes.isEmpty()) {
|
||||||
// No glob, use magic
|
// No glob, use magic
|
||||||
*accuracyPtr = magicAccuracy;
|
|
||||||
return candidateByData;
|
return candidateByData;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -451,7 +446,6 @@ MimeType MimeDatabasePrivate::mimeTypeForFileNameAndData(const QString &fileName
|
|||||||
|
|
||||||
if (candidatesByName.m_allMatchingMimeTypes.count() > 1) {
|
if (candidatesByName.m_allMatchingMimeTypes.count() > 1) {
|
||||||
candidatesByName.m_matchingMimeTypes.sort(); // make it deterministic
|
candidatesByName.m_matchingMimeTypes.sort(); // make it deterministic
|
||||||
*accuracyPtr = 20;
|
|
||||||
const MimeType mime = mimeTypeForName(candidatesByName.m_matchingMimeTypes.at(0));
|
const MimeType mime = mimeTypeForName(candidatesByName.m_matchingMimeTypes.at(0));
|
||||||
if (mime.isValid())
|
if (mime.isValid())
|
||||||
return mime;
|
return mime;
|
||||||
@@ -521,10 +515,10 @@ MimeType MimeDatabasePrivate::mimeTypeForFile(const QString &fileName,
|
|||||||
if (isDirectory)
|
if (isDirectory)
|
||||||
return mimeTypeForName(QLatin1String("inode/directory"));
|
return mimeTypeForName(QLatin1String("inode/directory"));
|
||||||
#endif
|
#endif
|
||||||
int priority = 0;
|
|
||||||
switch (mode) {
|
switch (mode) {
|
||||||
case MimeDatabase::MatchDefault:
|
case MimeDatabase::MatchDefault:
|
||||||
return mimeTypeForFileNameAndData(fileName, nullptr, &priority);
|
return mimeTypeForFileNameAndData(fileName, nullptr);
|
||||||
case MimeDatabase::MatchExtension:
|
case MimeDatabase::MatchExtension:
|
||||||
return mimeTypeForFileExtension(fileName);
|
return mimeTypeForFileExtension(fileName);
|
||||||
case MimeDatabase::MatchContent: {
|
case MimeDatabase::MatchContent: {
|
||||||
@@ -809,9 +803,8 @@ MimeType MimeDatabase::mimeTypeForFileNameAndData(const QString &fileName, QIODe
|
|||||||
if (fileName.endsWith(QLatin1Char('/')))
|
if (fileName.endsWith(QLatin1Char('/')))
|
||||||
return d->mimeTypeForName(QLatin1String("inode/directory"));
|
return d->mimeTypeForName(QLatin1String("inode/directory"));
|
||||||
|
|
||||||
int accuracy = 0;
|
|
||||||
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, &accuracy);
|
const MimeType result = d->mimeTypeForFileNameAndData(fileName, device);
|
||||||
if (openedByUs)
|
if (openedByUs)
|
||||||
device->close();
|
device->close();
|
||||||
return result;
|
return result;
|
||||||
@@ -842,8 +835,7 @@ MimeType MimeDatabase::mimeTypeForFileNameAndData(const QString &fileName, const
|
|||||||
|
|
||||||
QBuffer buffer(const_cast<QByteArray *>(&data));
|
QBuffer buffer(const_cast<QByteArray *>(&data));
|
||||||
buffer.open(QIODevice::ReadOnly);
|
buffer.open(QIODevice::ReadOnly);
|
||||||
int accuracy = 0;
|
return d->mimeTypeForFileNameAndData(fileName, &buffer);
|
||||||
return d->mimeTypeForFileNameAndData(fileName, &buffer, &accuracy);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*!
|
/*!
|
||||||
|
@@ -61,7 +61,7 @@ public:
|
|||||||
QString resolveAlias(const QString &nameOrAlias);
|
QString resolveAlias(const QString &nameOrAlias);
|
||||||
QStringList parents(const QString &mimeName);
|
QStringList parents(const QString &mimeName);
|
||||||
MimeType mimeTypeForName(const QString &nameOrAlias);
|
MimeType mimeTypeForName(const QString &nameOrAlias);
|
||||||
MimeType mimeTypeForFileNameAndData(const QString &fileName, QIODevice *device, int *priorityPtr);
|
MimeType mimeTypeForFileNameAndData(const QString &fileName, QIODevice *device);
|
||||||
MimeType mimeTypeForFileExtension(const QString &fileName);
|
MimeType mimeTypeForFileExtension(const QString &fileName);
|
||||||
MimeType mimeTypeForData(QIODevice *device);
|
MimeType mimeTypeForData(QIODevice *device);
|
||||||
MimeType mimeTypeForFile(const QString &fileName, const QFileInfo *fileInfo, MimeDatabase::MatchMode mode);
|
MimeType mimeTypeForFile(const QString &fileName, const QFileInfo *fileInfo, MimeDatabase::MatchMode mode);
|
||||||
|
Reference in New Issue
Block a user