aboutsummaryrefslogtreecommitdiffstats
path: root/src/libs/utils/mimetypes/mimeprovider.cpp
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@qt.io>2017-02-08 14:31:55 +0100
committerEike Ziller <eike.ziller@qt.io>2017-02-27 13:54:59 +0000
commitd64e17ad55f155951fc76e4c2f04299aa9c7a912 (patch)
tree16890479318c917c88392035a461e9edbcf76621 /src/libs/utils/mimetypes/mimeprovider.cpp
parentca1d1dfbe2c2b046b5661de20da9e20d4b511680 (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.cpp31
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
}