diff options
author | Eike Ziller <eike.ziller@theqtcompany.com> | 2015-02-05 14:37:16 +0100 |
---|---|---|
committer | Eike Ziller <eike.ziller@theqtcompany.com> | 2015-02-17 15:19:13 +0000 |
commit | afa2212f8dc2b20d5b0734993beba00c1c60e701 (patch) | |
tree | 8947a70ed7ba8f9174acd07cd44fc1897c3510bf /src | |
parent | 337339004843bc968e90a45cf24b9272b8372ba1 (diff) |
MimeDatabase: Allow overriding pattern and magic matchers of mime types
Change-Id: I1e2f59c98ab69ccee1eb2eaa8bc6ce918302c6cb
Reviewed-by: David Schulz <david.schulz@theqtcompany.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/libs/utils/mimetypes/mimedatabase.cpp | 14 | ||||
-rw-r--r-- | src/libs/utils/mimetypes/mimedatabase.h | 3 | ||||
-rw-r--r-- | src/libs/utils/mimetypes/mimeprovider.cpp | 26 | ||||
-rw-r--r-- | src/libs/utils/mimetypes/mimeprovider_p.h | 4 |
4 files changed, 47 insertions, 0 deletions
diff --git a/src/libs/utils/mimetypes/mimedatabase.cpp b/src/libs/utils/mimetypes/mimedatabase.cpp index 36e9dd30c9..32629a74ed 100644 --- a/src/libs/utils/mimetypes/mimedatabase.cpp +++ b/src/libs/utils/mimetypes/mimedatabase.cpp @@ -718,3 +718,17 @@ QMap<int, QList<MimeMagicRule> > MimeDatabase::magicRulesForMimeType(const MimeT QMutexLocker locker(&d->mutex); return d->provider()->magicRulesForMimeType(mimeType); } + +void MimeDatabase::setGlobPatternsForMimeType(const MimeType &mimeType, const QStringList &patterns) +{ + auto d = MimeDatabasePrivate::instance(); + QMutexLocker locker(&d->mutex); + return d->provider()->setGlobPatternsForMimeType(mimeType, patterns); +} + +void MimeDatabase::setMagicRulesForMimeType(const MimeType &mimeType, const QMap<int, QList<MimeMagicRule> > &rules) +{ + auto d = MimeDatabasePrivate::instance(); + QMutexLocker locker(&d->mutex); + return d->provider()->setMagicRulesForMimeType(mimeType, rules); +} diff --git a/src/libs/utils/mimetypes/mimedatabase.h b/src/libs/utils/mimetypes/mimedatabase.h index c029cc0d9e..f894933f76 100644 --- a/src/libs/utils/mimetypes/mimedatabase.h +++ b/src/libs/utils/mimetypes/mimedatabase.h @@ -89,6 +89,9 @@ public: static QStringList allGlobPatterns(); static MimeType bestMatch(const QString &fileName, const QList<MimeType> &types); static QMap<int, QList<Internal::MimeMagicRule> > magicRulesForMimeType(const MimeType &mimeType); // priority -> rules + static void setGlobPatternsForMimeType(const MimeType &mimeType, const QStringList &patterns); + static void setMagicRulesForMimeType(const MimeType &mimeType, + const QMap<int, QList<Internal::MimeMagicRule> > &rules); // priority -> rules private: Internal::MimeDatabasePrivate *d; diff --git a/src/libs/utils/mimetypes/mimeprovider.cpp b/src/libs/utils/mimetypes/mimeprovider.cpp index be5f962d74..104c2c727c 100644 --- a/src/libs/utils/mimetypes/mimeprovider.cpp +++ b/src/libs/utils/mimetypes/mimeprovider.cpp @@ -803,6 +803,32 @@ QMap<int, QList<MimeMagicRule> > MimeXMLProvider::magicRulesForMimeType(const Mi return result; } +void MimeXMLProvider::setGlobPatternsForMimeType(const MimeType &mimeType, const QStringList &patterns) +{ + // remove all previous globs + m_mimeTypeGlobs.removeMimeType(mimeType.name()); + // add new patterns as case-insensitive default-weight patterns + foreach (const QString &pattern, patterns) + addGlobPattern(MimeGlobPattern(pattern, mimeType.name())); + mimeType.d->globPatterns = patterns; +} + +void MimeXMLProvider::setMagicRulesForMimeType(const MimeType &mimeType, const QMap<int, QList<MimeMagicRule> > &rules) +{ + // remove all previous rules + QMutableListIterator<MimeMagicRuleMatcher> matcherIt(m_magicMatchers); + while (matcherIt.hasNext()) { + if (matcherIt.next().mimetype() == mimeType.name()) + matcherIt.remove(); + } + // add new rules + for (auto it = rules.constBegin(); it != rules.constEnd(); ++it) { + MimeMagicRuleMatcher matcher(mimeType.name(), it.key()/*priority*/); + matcher.addRules(it.value()); + addMagicMatcher(matcher); + } +} + void MimeXMLProvider::ensureLoaded() { if (!m_loaded /*|| shouldCheck()*/) { diff --git a/src/libs/utils/mimetypes/mimeprovider_p.h b/src/libs/utils/mimetypes/mimeprovider_p.h index 04d0458c99..9a375a018d 100644 --- a/src/libs/utils/mimetypes/mimeprovider_p.h +++ b/src/libs/utils/mimetypes/mimeprovider_p.h @@ -78,6 +78,8 @@ public: virtual QStringList bestMatchByFileName(const QString &fileName, const QList<MimeType> &types) = 0; virtual MimeType bestMatchByMagic(const QByteArray &data, const QList<MimeType> &types, int *accuracyPtr) = 0; virtual QMap<int, QList<MimeMagicRule> > magicRulesForMimeType(const MimeType &mimeType) = 0; + virtual void setGlobPatternsForMimeType(const MimeType &mimeType, const QStringList &patterns) = 0; + virtual void setMagicRulesForMimeType(const MimeType &mimeType, const QMap<int, QList<MimeMagicRule> > &rules) = 0; MimeDatabasePrivate *m_db; protected: @@ -159,6 +161,8 @@ public: QStringList bestMatchByFileName(const QString &fileName, const QList<MimeType> &types); MimeType bestMatchByMagic(const QByteArray &data, const QList<MimeType> &types, int *accuracyPtr); QMap<int, QList<MimeMagicRule> > magicRulesForMimeType(const MimeType &mimeType); + void setGlobPatternsForMimeType(const MimeType &mimeType, const QStringList &patterns); + void setMagicRulesForMimeType(const MimeType &mimeType, const QMap<int, QList<MimeMagicRule> > &rules); private: void ensureLoaded(); |