diff --git a/src/libs/utils/mimetypes/mimedatabase.cpp b/src/libs/utils/mimetypes/mimedatabase.cpp index 91f28dfc0b1..f10fe8a1be1 100644 --- a/src/libs/utils/mimetypes/mimedatabase.cpp +++ b/src/libs/utils/mimetypes/mimedatabase.cpp @@ -303,6 +303,14 @@ MimeDatabase::~MimeDatabase() d = 0; } +void MimeDatabase::addMimeTypes(const QString &fileName) +{ + auto d = MimeDatabasePrivate::instance(); + QMutexLocker locker(&d->mutex); + auto xmlProvider = static_cast(d->provider()); + xmlProvider->addFile(fileName); +} + /*! \fn MimeType MimeDatabase::mimeTypeForName(const QString &nameOrAlias) const; Returns a MIME type for \a nameOrAlias or an invalid one if none found. diff --git a/src/libs/utils/mimetypes/mimedatabase.h b/src/libs/utils/mimetypes/mimedatabase.h index e5d3c89f6af..71d43041e18 100644 --- a/src/libs/utils/mimetypes/mimedatabase.h +++ b/src/libs/utils/mimetypes/mimedatabase.h @@ -82,6 +82,9 @@ public: QList allMimeTypes() const; + // Qt Creator additions + static void addMimeTypes(const QString &fileName); + private: Internal::MimeDatabasePrivate *d; }; diff --git a/src/libs/utils/mimetypes/mimeprovider.cpp b/src/libs/utils/mimetypes/mimeprovider.cpp index cc28c456aea..324fb36a954 100644 --- a/src/libs/utils/mimetypes/mimeprovider.cpp +++ b/src/libs/utils/mimetypes/mimeprovider.cpp @@ -762,6 +762,8 @@ void MimeXMLProvider::ensureLoaded() allFiles.prepend(QLatin1String(":/qt-project.org/qmime/freedesktop.org.xml")); } + allFiles.append(m_additionalFiles); + if (m_allFiles == allFiles) return; m_allFiles = allFiles; @@ -859,3 +861,12 @@ void MimeXMLProvider::addMagicMatcher(const MimeMagicRuleMatcher &matcher) { m_magicMatchers.append(matcher); } + +void MimeXMLProvider::addFile(const QString &filePath) +{ + m_additionalFiles.append(filePath); + if (m_loaded) { + m_allFiles.append(filePath); + load(filePath); + } // else: will be loaded in ensureLoaded() +} diff --git a/src/libs/utils/mimetypes/mimeprovider_p.h b/src/libs/utils/mimetypes/mimeprovider_p.h index fbbafe71b13..c6c996b47f7 100644 --- a/src/libs/utils/mimetypes/mimeprovider_p.h +++ b/src/libs/utils/mimetypes/mimeprovider_p.h @@ -148,6 +148,9 @@ public: void addAlias(const QString &alias, const QString &name); void addMagicMatcher(const MimeMagicRuleMatcher &matcher); + // Qt Creator additions + void addFile(const QString &filePath); + private: void ensureLoaded(); void load(const QString &fileName); @@ -166,6 +169,9 @@ private: QList m_magicMatchers; QStringList m_allFiles; + + // Qt Creator additions + QStringList m_additionalFiles; }; } // Internal