forked from qt-creator/qt-creator
MimeDatabase: Allow overriding pattern and magic matchers of mime types
Change-Id: I1e2f59c98ab69ccee1eb2eaa8bc6ce918302c6cb Reviewed-by: David Schulz <david.schulz@theqtcompany.com>
This commit is contained in:
@@ -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);
|
||||
}
|
||||
|
@@ -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;
|
||||
|
@@ -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()*/) {
|
||||
|
@@ -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();
|
||||
|
Reference in New Issue
Block a user