forked from qt-creator/qt-creator
Update mime database from Qt
qtbase/329722a322a80d5ea8d6f9aa993c2fc4995b08a4 QMimeBinaryProvider: manage m_cacheFile with a std::unique_ptr Change-Id: I3a2fb727017cace5c8f4c3edd797c538d27f96b3 Reviewed-by: Jarek Kobus <jaroslaw.kobus@qt.io>
This commit is contained in:
@@ -130,10 +130,7 @@ bool MimeBinaryProvider::CacheFile::reload()
|
|||||||
return load();
|
return load();
|
||||||
}
|
}
|
||||||
|
|
||||||
MimeBinaryProvider::~MimeBinaryProvider()
|
MimeBinaryProvider::~MimeBinaryProvider() = default;
|
||||||
{
|
|
||||||
delete m_cacheFile;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool MimeBinaryProvider::isValid()
|
bool MimeBinaryProvider::isValid()
|
||||||
{
|
{
|
||||||
@@ -174,7 +171,7 @@ void MimeBinaryProvider::ensureLoaded()
|
|||||||
{
|
{
|
||||||
if (!m_cacheFile) {
|
if (!m_cacheFile) {
|
||||||
const QString cacheFileName = m_directory + "/mime.cache"_L1;
|
const QString cacheFileName = m_directory + "/mime.cache"_L1;
|
||||||
m_cacheFile = new CacheFile(cacheFileName);
|
m_cacheFile = std::make_unique<CacheFile>(cacheFileName);
|
||||||
m_mimetypeListLoaded = false;
|
m_mimetypeListLoaded = false;
|
||||||
m_mimetypeExtra.clear();
|
m_mimetypeExtra.clear();
|
||||||
} else {
|
} else {
|
||||||
@@ -185,10 +182,8 @@ void MimeBinaryProvider::ensureLoaded()
|
|||||||
return; // nothing to do
|
return; // nothing to do
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if (!m_cacheFile->isValid()) { // verify existence and version
|
if (!m_cacheFile->isValid()) // verify existence and version
|
||||||
delete m_cacheFile;
|
m_cacheFile.reset();
|
||||||
m_cacheFile = nullptr;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static MimeType mimeTypeForNameUnchecked(const QString &name)
|
static MimeType mimeTypeForNameUnchecked(const QString &name)
|
||||||
@@ -220,14 +215,15 @@ void MimeBinaryProvider::addFileNameMatches(const QString &fileName, MimeGlobMat
|
|||||||
Q_ASSERT(m_cacheFile);
|
Q_ASSERT(m_cacheFile);
|
||||||
const QString lowerFileName = fileName.toLower();
|
const QString lowerFileName = fileName.toLower();
|
||||||
// Check literals (e.g. "Makefile")
|
// Check literals (e.g. "Makefile")
|
||||||
matchGlobList(result, m_cacheFile, m_cacheFile->getUint32(PosLiteralListOffset), fileName);
|
matchGlobList(result, m_cacheFile.get(), m_cacheFile->getUint32(PosLiteralListOffset),
|
||||||
|
fileName);
|
||||||
// Check the very common *.txt cases with the suffix tree
|
// Check the very common *.txt cases with the suffix tree
|
||||||
if (result.m_matchingMimeTypes.isEmpty()) {
|
if (result.m_matchingMimeTypes.isEmpty()) {
|
||||||
const int reverseSuffixTreeOffset = m_cacheFile->getUint32(PosReverseSuffixTreeOffset);
|
const int reverseSuffixTreeOffset = m_cacheFile->getUint32(PosReverseSuffixTreeOffset);
|
||||||
const int numRoots = m_cacheFile->getUint32(reverseSuffixTreeOffset);
|
const int numRoots = m_cacheFile->getUint32(reverseSuffixTreeOffset);
|
||||||
const int firstRootOffset = m_cacheFile->getUint32(reverseSuffixTreeOffset + 4);
|
const int firstRootOffset = m_cacheFile->getUint32(reverseSuffixTreeOffset + 4);
|
||||||
matchSuffixTree(result,
|
matchSuffixTree(result,
|
||||||
m_cacheFile,
|
m_cacheFile.get(),
|
||||||
numRoots,
|
numRoots,
|
||||||
firstRootOffset,
|
firstRootOffset,
|
||||||
lowerFileName,
|
lowerFileName,
|
||||||
@@ -235,7 +231,7 @@ void MimeBinaryProvider::addFileNameMatches(const QString &fileName, MimeGlobMat
|
|||||||
false);
|
false);
|
||||||
if (result.m_matchingMimeTypes.isEmpty())
|
if (result.m_matchingMimeTypes.isEmpty())
|
||||||
matchSuffixTree(result,
|
matchSuffixTree(result,
|
||||||
m_cacheFile,
|
m_cacheFile.get(),
|
||||||
numRoots,
|
numRoots,
|
||||||
firstRootOffset,
|
firstRootOffset,
|
||||||
fileName,
|
fileName,
|
||||||
@@ -244,7 +240,8 @@ void MimeBinaryProvider::addFileNameMatches(const QString &fileName, MimeGlobMat
|
|||||||
}
|
}
|
||||||
// Check complex globs (e.g. "callgrind.out[0-9]*" or "README*")
|
// Check complex globs (e.g. "callgrind.out[0-9]*" or "README*")
|
||||||
if (result.m_matchingMimeTypes.isEmpty())
|
if (result.m_matchingMimeTypes.isEmpty())
|
||||||
matchGlobList(result, m_cacheFile, m_cacheFile->getUint32(PosGlobListOffset), fileName);
|
matchGlobList(result, m_cacheFile.get(), m_cacheFile->getUint32(PosGlobListOffset),
|
||||||
|
fileName);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool MimeBinaryProvider::isMimeTypeGlobsExcluded(const char *mimeTypeName)
|
bool MimeBinaryProvider::isMimeTypeGlobsExcluded(const char *mimeTypeName)
|
||||||
@@ -387,7 +384,7 @@ void MimeBinaryProvider::findByMagic(const QByteArray &data, int *accuracyPtr, M
|
|||||||
const int off = firstMatchOffset + i * 16;
|
const int off = firstMatchOffset + i * 16;
|
||||||
const int numMatchlets = m_cacheFile->getUint32(off + 8);
|
const int numMatchlets = m_cacheFile->getUint32(off + 8);
|
||||||
const int firstMatchletOffset = m_cacheFile->getUint32(off + 12);
|
const int firstMatchletOffset = m_cacheFile->getUint32(off + 12);
|
||||||
if (matchMagicRule(m_cacheFile, numMatchlets, firstMatchletOffset, data)) {
|
if (matchMagicRule(m_cacheFile.get(), numMatchlets, firstMatchletOffset, data)) {
|
||||||
const int mimeTypeOffset = m_cacheFile->getUint32(off + 4);
|
const int mimeTypeOffset = m_cacheFile->getUint32(off + 4);
|
||||||
const char *mimeType = m_cacheFile->getCharStar(mimeTypeOffset);
|
const char *mimeType = m_cacheFile->getCharStar(mimeTypeOffset);
|
||||||
if (m_overriddenMimeTypes.contains(QLatin1String(mimeType)))
|
if (m_overriddenMimeTypes.contains(QLatin1String(mimeType)))
|
||||||
@@ -621,7 +618,7 @@ QLatin1StringView MimeBinaryProvider::iconForMime(CacheFile *cacheFile, int posL
|
|||||||
void MimeBinaryProvider::loadIcon(MimeTypePrivate &data)
|
void MimeBinaryProvider::loadIcon(MimeTypePrivate &data)
|
||||||
{
|
{
|
||||||
const QByteArray inputMime = data.name.toLatin1();
|
const QByteArray inputMime = data.name.toLatin1();
|
||||||
const QLatin1StringView icon = iconForMime(m_cacheFile, PosIconsListOffset, inputMime);
|
const QLatin1StringView icon = iconForMime(m_cacheFile.get(), PosIconsListOffset, inputMime);
|
||||||
if (!icon.isEmpty()) {
|
if (!icon.isEmpty()) {
|
||||||
data.iconName = icon;
|
data.iconName = icon;
|
||||||
}
|
}
|
||||||
@@ -630,7 +627,7 @@ void MimeBinaryProvider::loadIcon(MimeTypePrivate &data)
|
|||||||
void MimeBinaryProvider::loadGenericIcon(MimeTypePrivate &data)
|
void MimeBinaryProvider::loadGenericIcon(MimeTypePrivate &data)
|
||||||
{
|
{
|
||||||
const QByteArray inputMime = data.name.toLatin1();
|
const QByteArray inputMime = data.name.toLatin1();
|
||||||
const QLatin1StringView icon = iconForMime(m_cacheFile, PosGenericIconsListOffset, inputMime);
|
const QLatin1StringView icon = iconForMime(m_cacheFile.get(), PosGenericIconsListOffset, inputMime);
|
||||||
if (!icon.isEmpty()) {
|
if (!icon.isEmpty()) {
|
||||||
data.genericIconName = icon;
|
data.genericIconName = icon;
|
||||||
}
|
}
|
||||||
|
@@ -145,7 +145,7 @@ private:
|
|||||||
void loadMimeTypeList();
|
void loadMimeTypeList();
|
||||||
bool checkCacheChanged();
|
bool checkCacheChanged();
|
||||||
|
|
||||||
CacheFile *m_cacheFile = nullptr;
|
std::unique_ptr<CacheFile> m_cacheFile;
|
||||||
QStringList m_cacheFileNames;
|
QStringList m_cacheFileNames;
|
||||||
QSet<QString> m_mimetypeNames;
|
QSet<QString> m_mimetypeNames;
|
||||||
bool m_mimetypeListLoaded;
|
bool m_mimetypeListLoaded;
|
||||||
|
Reference in New Issue
Block a user