summaryrefslogtreecommitdiffstats
path: root/src/corelib/mimetypes/qmimeprovider_p.h
diff options
context:
space:
mode:
authorDavid Faure <david.faure@kdab.com>2017-10-08 18:31:26 +0200
committerDavid Faure <david.faure@kdab.com>2017-11-30 12:54:49 +0000
commit7a5644d6481a3c1a7416772998ca4e60c977bfbd (patch)
treed9667bb9597342cd0c9e832d60061e6e45790c3a /src/corelib/mimetypes/qmimeprovider_p.h
parent8835c0376befd009702b9a17c506639e31c842b9 (diff)
QMimeDatabase: redesign to use both binary and XML providers
Previously, we would use mime.cache in all mime directories if at least one of them had such a file (other than the most-local one), otherwise the "source" XML would be used in all directories. Now it's possible to use mime.cache in those directories which have one, and XML in those directories that don't. Not only is this more correct, it will allow in a subsequent commit to bundle the binary cache in QtCore's qrc rather than the very big XML file. The design change to allow this is that now every provider only deals with a single directory, and QMimeDatabasePrivate takes care of creating multiple providers, one for each dir. This required to move most of the loops from the binary provider up to QMimeDatabasePrivate itself. Change-Id: Iac82d5f5836b80d45076e586b903d16fa2525b34 Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Diffstat (limited to 'src/corelib/mimetypes/qmimeprovider_p.h')
-rw-r--r--src/corelib/mimetypes/qmimeprovider_p.h51
1 files changed, 24 insertions, 27 deletions
diff --git a/src/corelib/mimetypes/qmimeprovider_p.h b/src/corelib/mimetypes/qmimeprovider_p.h
index 7344d8b453..b2be545cf8 100644
--- a/src/corelib/mimetypes/qmimeprovider_p.h
+++ b/src/corelib/mimetypes/qmimeprovider_p.h
@@ -67,23 +67,25 @@ class QMimeMagicRuleMatcher;
class QMimeProviderBase
{
public:
- QMimeProviderBase(QMimeDatabasePrivate *db);
+ QMimeProviderBase(QMimeDatabasePrivate *db, const QString &directory);
virtual ~QMimeProviderBase() {}
virtual bool isValid() = 0;
virtual QMimeType mimeTypeForName(const QString &name) = 0;
- virtual QMimeGlobMatchResult findByFileName(const QString &fileName) = 0;
- virtual QStringList parents(const QString &mime) = 0;
+ virtual void addFileNameMatches(const QString &fileName, QMimeGlobMatchResult &result) = 0;
+ virtual void addParents(const QString &mime, QStringList &result) = 0;
virtual QString resolveAlias(const QString &name) = 0;
- virtual QStringList listAliases(const QString &name) = 0;
- virtual QMimeType findByMagic(const QByteArray &data, int *accuracyPtr) = 0;
- virtual QList<QMimeType> allMimeTypes() = 0;
- virtual void loadMimeTypePrivate(QMimeTypePrivate &) {}
+ virtual void addAliases(const QString &name, QStringList &result) = 0;
+ virtual void findByMagic(const QByteArray &data, int *accuracyPtr, QMimeType &candidate) = 0;
+ virtual void addAllMimeTypes(QList<QMimeType> &result) = 0;
virtual void loadIcon(QMimeTypePrivate &) {}
virtual void loadGenericIcon(QMimeTypePrivate &) {}
virtual void ensureLoaded() {}
+ QString directory() const { return m_directory; }
+
QMimeDatabasePrivate *m_db;
+ QString m_directory;
};
/*
@@ -92,18 +94,18 @@ public:
class QMimeBinaryProvider : public QMimeProviderBase
{
public:
- QMimeBinaryProvider(QMimeDatabasePrivate *db);
+ QMimeBinaryProvider(QMimeDatabasePrivate *db, const QString &directory);
virtual ~QMimeBinaryProvider();
virtual bool isValid() override;
virtual QMimeType mimeTypeForName(const QString &name) override;
- virtual QMimeGlobMatchResult findByFileName(const QString &fileName) override;
- virtual QStringList parents(const QString &mime) override;
+ void addFileNameMatches(const QString &fileName, QMimeGlobMatchResult &result) override;
+ void addParents(const QString &mime, QStringList &result) override;
virtual QString resolveAlias(const QString &name) override;
- virtual QStringList listAliases(const QString &name) override;
- virtual QMimeType findByMagic(const QByteArray &data, int *accuracyPtr) override;
- virtual QList<QMimeType> allMimeTypes() override;
- virtual void loadMimeTypePrivate(QMimeTypePrivate &) override;
+ void addAliases(const QString &name, QStringList &result) override;
+ void findByMagic(const QByteArray &data, int *accuracyPtr, QMimeType &candidate) override;
+ void addAllMimeTypes(QList<QMimeType> &result) override;
+ static void loadMimeTypePrivate(QMimeTypePrivate &);
virtual void loadIcon(QMimeTypePrivate &) override;
virtual void loadGenericIcon(QMimeTypePrivate &) override;
void ensureLoaded() override;
@@ -116,14 +118,9 @@ private:
bool matchMagicRule(CacheFile *cacheFile, int numMatchlets, int firstOffset, const QByteArray &data);
QLatin1String iconForMime(CacheFile *cacheFile, int posListOffset, const QByteArray &inputMime);
void loadMimeTypeList();
+ bool checkCacheChanged();
- class CacheFileList : public QList<CacheFile *>
- {
- public:
- CacheFile *findCacheFile(const QString &fileName) const;
- bool checkCacheChanged();
- };
- CacheFileList m_cacheFiles;
+ CacheFile *m_cacheFile = nullptr;
QStringList m_cacheFileNames;
QSet<QString> m_mimetypeNames;
bool m_mimetypeListLoaded;
@@ -135,17 +132,17 @@ private:
class QMimeXMLProvider : public QMimeProviderBase
{
public:
- QMimeXMLProvider(QMimeDatabasePrivate *db);
+ QMimeXMLProvider(QMimeDatabasePrivate *db, const QString &directory);
~QMimeXMLProvider();
virtual bool isValid() override;
virtual QMimeType mimeTypeForName(const QString &name) override;
- virtual QMimeGlobMatchResult findByFileName(const QString &fileName) override;
- virtual QStringList parents(const QString &mime) override;
+ void addFileNameMatches(const QString &fileName, QMimeGlobMatchResult &result) override;
+ void addParents(const QString &mime, QStringList &result) override;
virtual QString resolveAlias(const QString &name) override;
- virtual QStringList listAliases(const QString &name) override;
- virtual QMimeType findByMagic(const QByteArray &data, int *accuracyPtr) override;
- virtual QList<QMimeType> allMimeTypes() override;
+ void addAliases(const QString &name, QStringList &result) override;
+ void findByMagic(const QByteArray &data, int *accuracyPtr, QMimeType &candidate) override;
+ void addAllMimeTypes(QList<QMimeType> &result) override;
void ensureLoaded() override;
bool load(const QString &fileName, QString *errorMessage);