6#ifndef QMIMEPROVIDER_P_H
7#define QMIMEPROVIDER_P_H
25#include <QtCore/qdatetime.h>
26#include <QtCore/qset.h>
32class QMimeMagicRuleMatcher;
38 bool isValid()
const {
return !candidate.isEmpty(); }
63 virtual void addParents(
const QString &mime, QStringList &result) = 0;
65 virtual void addAliases(
const QString &name, QStringList &result) = 0;
89
90
100 void addFileNameMatches(
const QString &fileName, QMimeGlobMatchResult &result)
override;
101 void addParents(
const QString &mime, QStringList &result)
override;
103 void addAliases(
const QString &name, QStringList &result)
override;
119 quint32 matchGlobList(QMimeGlobMatchResult &result,
CacheFile *cacheFile,
120 const RecordList &globs,
const QString &fileName);
121 bool matchSuffixTree(QMimeGlobMatchResult &result,
CacheFile *cacheFile, quint32 numEntries,
122 quint64 firstOffset,
const QString &fileName, qsizetype charPos,
123 bool caseSensitiveCheck);
124 static bool matchMagicRule(
CacheFile *cacheFile, quint32 numMatchlets, quint64 firstOffset,
126 bool magicRecordMatches(quint32 index,
const QByteArray &data)
const;
128 QStringView inputMime);
129 void loadMimeTypeList();
130 bool checkCacheChanged();
132 std::unique_ptr<CacheFile> m_cacheFile;
133 QStringList m_cacheFileNames;
134 QSet<QString> m_mimetypeNames;
135 bool m_mimetypeListLoaded;
138 QHash<QString, QString> localeComments;
139 QStringList globPatterns;
140 bool hasGlobDeleteAll =
false;
142 using MimeTypeExtraMap = std::map<QString, MimeTypeExtra>;
143 MimeTypeExtraMap m_mimetypeExtra;
145 MimeTypeExtraMap::const_iterator loadMimeTypeExtra(
const QString &mimeName);
149
150
155#if QT_CONFIG(mimetype_database)
156 enum :
bool { InternalDatabaseAvailable =
true };
167 void addFileNameMatches(
const QString &fileName, QMimeGlobMatchResult &result)
override;
168 void addParents(
const QString &mime, QStringList &result)
override;
170 void addAliases(
const QString &name, QStringList &result)
override;
182 bool load(
const QString &fileName, QString *errorMessage);
187 void addParent(
const QString &child,
const QString &parent);
188 void addAlias(
const QString &alias,
const QString &name);
192 void load(
const QString &fileName);
193 void load(
const char *data, qsizetype len);
194 void sortMagicMatchers();
196 typedef QHash<QString, QMimeTypeXMLData> NameMimeTypeMap;
197 NameMimeTypeMap m_nameMimeTypeMap;
199 typedef QHash<QString, QString> AliasHash;
202 typedef QHash<QString, QStringList> ParentsHash;
203 ParentsHash m_parents;
206 QList<QMimeMagicRuleMatcher> m_magicMatchers;
207 QStringList m_allFiles;
Result of the globs parsing, as data structures ready for efficient MIME type matching.
void addGlob(const QMimeGlobPattern &glob)
void matchingGlobs(const QString &fileName, QMimeGlobMatchResult &result, const AddMatchFilterFunc &filterFunc) const
PatternsMap m_fastPatterns
void removeMimeType(const QString &mimeType)
QHash< QString, QStringList > PatternsMap
QMimeGlobPatternList m_highWeightGlobs
QMimeGlobPatternList m_lowWeightGlobs
void addFileNameMatches(const QString &fileName, QMimeGlobMatchResult &result) override
QString resolveAlias(const QString &name) override
void findByMagic(const QByteArray &data, QMimeMagicResult &result) override
bool knowsMimeType(const QString &name) override
QString icon(const QString &name) override
bool hasGlobDeleteAll(const QString &name) override
void ensureLoaded() override
void addAliases(const QString &name, QStringList &result) override
virtual ~QMimeBinaryProvider()
void addAllMimeTypes(QList< QMimeType > &result) override
void addParents(const QString &mime, QStringList &result) override
QMimeMagicCheckResult checkMagicRules(const QString &mime, const QByteArray &data) const override
QMimeBinaryProvider(QMimeDatabasePrivate *db, const QString &directory)
QStringList globPatterns(const QString &name) override
QString genericIcon(const QString &name) override
bool isInternalDatabase() const override
QMimeTypePrivate::LocaleHash localeComments(const QString &name) override
QString resolveAlias(const QString &nameOrAlias)
QStringList listAliases(const QString &mimeName)
QList< QMimeType > allMimeTypes()
QString genericIcon(const QString &name)
QMimeTypePrivate::LocaleHash localeComments(const QString &name)
bool mimeInherits(const QString &mime, const QString &parent)
QMimeType mimeTypeForFileExtension(const QString &fileName)
QMimeType mimeTypeForFileNameAndData(const QString &fileName, QIODevice *device)
QMimeType mimeTypeForData(QIODevice *device)
QStringList mimeTypeForFileName(const QString &fileName)
bool inherits(const QString &mime, const QString &parent)
QMimeType mimeTypeForName(const QString &nameOrAlias)
QStringList mimeParents(const QString &mimeName)
QStringList globPatterns(const QString &name)
const QString & defaultMimeType() const
QString icon(const QString &name)
static QMimeDatabasePrivate * instance()
QMimeType mimeTypeForFile(const QString &fileName, const QFileInfo &fileInfo, QMimeDatabase::MatchMode mode)
QStringList parents(const QString &mimeName)
QMimeGlobMatchResult findByFileName(const QString &fileName)
bool magicRulesReject(const QString &mime, const QByteArray &data)
QMimeType findByData(const QByteArray &data, int *priorityPtr)
QMimeType mimeTypeForName(const QString &nameOrAlias) const
Returns a MIME type for nameOrAlias or an invalid one if none found.
QMimeType mimeTypeForFileNameAndData(const QString &fileName, QIODevice *device) const
Returns a MIME type for the given fileName and device data.
QMimeType mimeTypeForFile(const QFileInfo &fileInfo, MatchMode mode=MatchDefault) const
Returns a MIME type for fileInfo.
QList< QMimeType > mimeTypesForFileName(const QString &fileName) const
Returns the MIME types for the file name fileName.
QMimeType mimeTypeForUrl(const QUrl &url) const
Returns a MIME type for url.
QMimeType mimeTypeForData(const QByteArray &data) const
Returns a MIME type for data.
QString suffixForFileName(const QString &fileName) const
Returns the suffix for the file fileName, as known by the MIME database.
MatchMode
This enum specifies how matching a file to a MIME type is performed.
QList< QMimeType > allMimeTypes() const
Returns the list of all available MIME types.
QMimeType mimeTypeForFileNameAndData(const QString &fileName, const QByteArray &data) const
Returns a MIME type for the given fileName and device data.
QMimeType mimeTypeForData(QIODevice *device) const
Returns a MIME type for the data in device.
QMimeType mimeTypeForFile(const QString &fileName, MatchMode mode=MatchDefault) const
Returns a MIME type for the file named fileName using mode.
bool hasPattern(QStringView mimeType, QStringView pattern) const
void removeMimeType(QStringView mimeType)
"noglobs" is very rare occurrence, so it's ok if it's slow
void match(QMimeGlobMatchResult &result, const QString &fileName, const AddMatchFilterFunc &filterFunc) const
The QMimeGlobPattern class contains the glob pattern for file names for MIME type matching.
static const unsigned MinWeight
QMimeGlobPattern(const QString &thePattern, const QString &theMimeType, unsigned theWeight=DefaultWeight, Qt::CaseSensitivity s=Qt::CaseInsensitive)
static const unsigned DefaultWeight
void swap(QMimeGlobPattern &other) noexcept
const QString & mimeType() const
static const unsigned MaxWeight
const QString & pattern() const
bool matchFileName(const QString &fileName) const
bool isCaseSensitive() const
bool isMimeTypeGlobsExcluded(const QString &name) const
QMimeProviderBase * m_overrideProvider
virtual void addAliases(const QString &name, QStringList &result)=0
virtual bool hasGlobDeleteAll(const QString &name)=0
virtual ~QMimeProviderBase()=default
virtual void ensureLoaded()
virtual QString icon(const QString &name)=0
QMimeProviderBase * overrideProvider() const
virtual void addFileNameMatches(const QString &fileName, QMimeGlobMatchResult &result)=0
virtual void findByMagic(const QByteArray &data, QMimeMagicResult &result)=0
virtual void addParents(const QString &mime, QStringList &result)=0
virtual bool isInternalDatabase() const =0
virtual QString genericIcon(const QString &name)=0
virtual QStringList globPatterns(const QString &name)=0
void setOverrideProvider(QMimeProviderBase *provider)
virtual bool knowsMimeType(const QString &name)=0
QMimeDatabasePrivate * m_db
QString directory() const
virtual QMimeMagicCheckResult checkMagicRules(const QString &mime, const QByteArray &data) const =0
virtual void addAllMimeTypes(QList< QMimeType > &result)=0
virtual QMimeTypePrivate::LocaleHash localeComments(const QString &name)=0
virtual QString resolveAlias(const QString &name)=0
void addFileNameMatches(const QString &fileName, QMimeGlobMatchResult &result) override
void addGlobPattern(const QMimeGlobPattern &glob)
void addAliases(const QString &name, QStringList &result) override
void addAlias(const QString &alias, const QString &name)
QMimeTypePrivate::LocaleHash localeComments(const QString &name) override
QStringList globPatterns(const QString &name) override
bool load(const QString &fileName, QString *errorMessage)
QMimeXMLProvider(QMimeDatabasePrivate *db, const QString &directory)
void ensureLoaded() override
bool knowsMimeType(const QString &name) override
@ InternalDatabaseAvailable
bool isInternalDatabase() const override
QString resolveAlias(const QString &name) override
void addMimeType(const QMimeTypeXMLData &mt)
QMimeMagicCheckResult checkMagicRules(const QString &mime, const QByteArray &data) const override
void findByMagic(const QByteArray &data, QMimeMagicResult &result) override
QString icon(const QString &name) override
void addParents(const QString &mime, QStringList &result) override
void addAllMimeTypes(QList< QMimeType > &result) override
QMimeXMLProvider(QMimeDatabasePrivate *db, InternalDatabaseEnum)
void addMagicMatcher(const QMimeMagicRuleMatcher &matcher)
bool hasGlobDeleteAll(const QString &name) override
void addParent(const QString &child, const QString &parent)
QString genericIcon(const QString &name) override
QT_REQUIRE_CONFIG(animation)
Q_CORE_EXPORT QDebug operator<<(QDebug debug, QDir::Filters filters)
static bool isTextFile(const QByteArray &data)
static Q_CONSTINIT const int qmime_secondsBetweenChecks
static QStringList locateMimeDirectories()
static QString directoryMimeType()
static QString plainTextMimeType()
QT_REQUIRE_CONFIG(mimetype)