MimeDatabase: Add API for adding mime types from xml files

Change-Id: I43e5ef02322636b8212c860f419309323f23445b
Reviewed-by: David Schulz <david.schulz@theqtcompany.com>
This commit is contained in:
Eike Ziller
2015-01-28 15:41:42 +01:00
parent 27a3c0703f
commit f132649864
4 changed files with 28 additions and 0 deletions

View File

@@ -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<MimeXMLProvider *>(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.

View File

@@ -82,6 +82,9 @@ public:
QList<MimeType> allMimeTypes() const;
// Qt Creator additions
static void addMimeTypes(const QString &fileName);
private:
Internal::MimeDatabasePrivate *d;
};

View File

@@ -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()
}

View File

@@ -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<MimeMagicRuleMatcher> m_magicMatchers;
QStringList m_allFiles;
// Qt Creator additions
QStringList m_additionalFiles;
};
} // Internal