diff options
author | Eike Ziller <eike.ziller@qt.io> | 2017-02-08 14:31:55 +0100 |
---|---|---|
committer | Eike Ziller <eike.ziller@qt.io> | 2017-02-27 13:54:59 +0000 |
commit | d64e17ad55f155951fc76e4c2f04299aa9c7a912 (patch) | |
tree | 16890479318c917c88392035a461e9edbcf76621 /src/libs/utils/mimetypes/mimeprovider.cpp | |
parent | ca1d1dfbe2c2b046b5661de20da9e20d4b511680 (diff) |
Move mimetype definitions to plugin specs
- Avoids the hassle of QRC files and manually registering mime types
- Avoids performance regressions because of mime types that are
registered after mime database has been used
- Makes it technically possible to detect that a disabled plugin could
handle a mime type if it was enabled
Change-Id: I373008b1b56e9c6b4853055f20b3eeb112a6eff9
Reviewed-by: Christian Stenger <christian.stenger@qt.io>
Reviewed-by: hjk <hjk@qt.io>
Diffstat (limited to 'src/libs/utils/mimetypes/mimeprovider.cpp')
-rw-r--r-- | src/libs/utils/mimetypes/mimeprovider.cpp | 31 |
1 files changed, 20 insertions, 11 deletions
diff --git a/src/libs/utils/mimetypes/mimeprovider.cpp b/src/libs/utils/mimetypes/mimeprovider.cpp index e13de9b471..68f69a2ed2 100644 --- a/src/libs/utils/mimetypes/mimeprovider.cpp +++ b/src/libs/utils/mimetypes/mimeprovider.cpp @@ -782,16 +782,16 @@ void MimeXMLProvider::setMagicRulesForMimeType(const MimeType &mimeType, const Q void MimeXMLProvider::ensureLoaded() { if (!m_loaded /*|| shouldCheck()*/) { + m_loaded = true; // bool fdoXmlFound = false; - // add custom mime types first, which overrides any default from freedesktop.org.xml - QStringList allFiles = m_additionalFiles; + QStringList allFiles; // const QStringList packageDirs = QStandardPaths::locateAll(QStandardPaths::GenericDataLocation, QLatin1String("mime/packages"), QStandardPaths::LocateDirectory); // //qDebug() << "packageDirs=" << packageDirs; -// foreach (const QString &packageDir, packageDirs) { +// for (const QString &packageDir : packageDirs) { // QDir dir(packageDir); // const QStringList files = dir.entryList(QDir::Files | QDir::NoDotAndDotDot); -// //qDebug() << static_cast<const void *>(this) << Q_FUNC_INFO << packageDir << files; +// //qDebug() << static_cast<const void *>(this) << packageDir << files; // if (!fdoXmlFound) // fdoXmlFound = files.contains(QLatin1String("freedesktop.org.xml")); // QStringList::const_iterator endIt(files.constEnd()); @@ -802,13 +802,9 @@ void MimeXMLProvider::ensureLoaded() // if (!fdoXmlFound) { // // We could instead install the file as part of installing Qt? - allFiles.append(QLatin1String(":/qt-project.org/qmime/freedesktop.org.xml")); + allFiles.prepend(QLatin1String(":/qt-project.org/qmime/freedesktop.org.xml")); // } - if (m_allFiles == allFiles) - return; - m_allFiles = allFiles; - m_nameMimeTypeMap.clear(); m_aliases.clear(); m_parents.clear(); @@ -817,6 +813,17 @@ void MimeXMLProvider::ensureLoaded() //qDebug() << "Loading" << m_allFiles; + // add custom mime types first, which override any default from freedesktop.org.xml + MimeTypeParser parser(*this); + QHashIterator<QString, QByteArray> it(m_additionalData); + while (it.hasNext()) { + it.next(); + QString errorMessage; + if (!parser.parse(it.value(), it.key(), &errorMessage)) { + qWarning("MimeDatabase: Error loading %s\n%s", qPrintable(it.key()), + qPrintable(errorMessage)); + } + } foreach (const QString &file, allFiles) load(file); } @@ -904,8 +911,10 @@ void MimeXMLProvider::addMagicMatcher(const MimeMagicRuleMatcher &matcher) m_magicMatchers.append(matcher); } -void MimeXMLProvider::addFile(const QString &filePath) +void MimeXMLProvider::addData(const QString &id, const QByteArray &data) { - m_additionalFiles.append(filePath); + if (m_additionalData.contains(id)) + qWarning("Overwriting data in mime database, id '%s'", qPrintable(id)); + m_additionalData.insert(id, data); m_loaded = false; // force reload to ensure correct load order for overridden mime types } |