aboutsummaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorEike Ziller <eike.ziller@theqtcompany.com>2015-02-05 14:37:16 +0100
committerEike Ziller <eike.ziller@theqtcompany.com>2015-02-17 15:19:13 +0000
commitafa2212f8dc2b20d5b0734993beba00c1c60e701 (patch)
tree8947a70ed7ba8f9174acd07cd44fc1897c3510bf /src
parent337339004843bc968e90a45cf24b9272b8372ba1 (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.cpp14
-rw-r--r--src/libs/utils/mimetypes/mimedatabase.h3
-rw-r--r--src/libs/utils/mimetypes/mimeprovider.cpp26
-rw-r--r--src/libs/utils/mimetypes/mimeprovider_p.h4
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();