MimeDatabase: Provide access to mime magic rules

Change-Id: I9d03db685200e86f71e15fe596b67db1d386eb19
Reviewed-by: David Schulz <david.schulz@theqtcompany.com>
This commit is contained in:
Eike Ziller
2015-02-04 16:27:11 +01:00
parent d3de8bb386
commit 178b023f94
5 changed files with 30 additions and 1 deletions

View File

@@ -37,6 +37,7 @@
#include "mimedatabase_p.h"
#include "mimemagicrule_p.h"
#include "mimeprovider_p.h"
#include "mimetype_p.h"
@@ -710,3 +711,10 @@ QList<MimeType> MimeDatabase::allMimeTypes() const
\value MatchContent The file content is used to look for a match
*/
QMap<int, QList<MimeMagicRule> > MimeDatabase::magicRulesForMimeType(const MimeType &mimeType)
{
auto d = MimeDatabasePrivate::instance();
QMutexLocker locker(&d->mutex);
return d->provider()->magicRulesForMimeType(mimeType);
}

View File

@@ -35,6 +35,7 @@
#define XMIMEDATABASE_H
#include "mimetype.h"
#include "mimemagicrule_p.h"
#include <utils/utils_global.h>
@@ -87,6 +88,7 @@ public:
static QString allFiltersString(QString *allFilesFilter = 0);
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
private:
Internal::MimeDatabasePrivate *d;

View File

@@ -45,16 +45,22 @@
// We mean it.
//
#include <utils/utils_global.h>
#include <QtCore/qbytearray.h>
#include <QtCore/qscopedpointer.h>
#include <QtCore/qlist.h>
#include <QtCore/qmap.h>
namespace Utils {
class MimeType;
namespace Internal {
class MimeMagicRulePrivate;
class MimeMagicRule
class QTCREATOR_UTILS_EXPORT MimeMagicRule
{
public:
enum Type { Invalid = 0, String, Host16, Host32, Big16, Big32, Little16, Little32, Byte };

View File

@@ -793,6 +793,16 @@ MimeType MimeXMLProvider::bestMatchByMagic(const QByteArray &data, const QList<M
return mimeTypeForName(candidate);
}
QMap<int, QList<MimeMagicRule> > MimeXMLProvider::magicRulesForMimeType(const MimeType &mimeType)
{
QMap<int, QList<MimeMagicRule> > result;
foreach (const MimeMagicRuleMatcher &matcher, m_magicMatchers) {
if (mimeType.matchesName(matcher.mimetype()))
result[matcher.priority()].append(matcher.magicRules());
}
return result;
}
void MimeXMLProvider::ensureLoaded()
{
if (!m_loaded /*|| shouldCheck()*/) {

View File

@@ -46,6 +46,7 @@
//
#include "mimedatabase_p.h"
#include "mimemagicrule_p.h"
#include <QtCore/qdatetime.h>
#include <QtCore/qset.h>
@@ -76,6 +77,7 @@ public:
// Qt Creator additions
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;
MimeDatabasePrivate *m_db;
protected:
@@ -156,6 +158,7 @@ public:
void addFile(const QString &filePath);
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);
private:
void ensureLoaded();