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:
Eike Ziller
2024-08-09 09:52:57 +02:00
parent 8f009ca2af
commit 5fb783969e
2 changed files with 7 additions and 15 deletions

View File

@@ -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);
} }
/*! /*!

View File

@@ -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);