Qt
Internal/Contributor docs for the Qt SDK. <b>Note:</b> These are NOT official API docs; those are found <a href='https://doc.qt.io/'>here</a>.
Loading...
Searching...
No Matches
qmimeprovider_p.h
Go to the documentation of this file.
1// Copyright (C) 2016 The Qt Company Ltd.
2// Copyright (C) 2015 Klaralvdalens Datakonsult AB, a KDAB Group company, info@kdab.com, author David Faure <david.faure@kdab.com>
3// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
4
5#ifndef QMIMEPROVIDER_P_H
6#define QMIMEPROVIDER_P_H
7
8//
9// W A R N I N G
10// -------------
11//
12// This file is not part of the Qt API. It exists purely as an
13// implementation detail. This header file may change from version to
14// version without notice, or even be removed.
15//
16// We mean it.
17//
18
19#include "qmimedatabase_p.h"
20
22
23#include "qmimeglobpattern_p.h"
24#include <QtCore/qdatetime.h>
25#include <QtCore/qset.h>
26
27#include <map>
28
30
34
36{
37 bool isValid() const { return !candidate.isEmpty(); }
38
40 int accuracy = 0;
41};
42
44{
45 Q_DISABLE_COPY(QMimeProviderBase)
46
47public:
49 virtual ~QMimeProviderBase() {}
50
51 virtual bool isValid() = 0;
52 virtual bool isInternalDatabase() const = 0;
53 virtual bool knowsMimeType(const QString &name) = 0;
55 virtual void addParents(const QString &mime, QStringList &result) = 0;
56 virtual QString resolveAlias(const QString &name) = 0;
57 virtual void addAliases(const QString &name, QStringList &result) = 0;
59 virtual void addAllMimeTypes(QList<QMimeType> &result) = 0;
61 virtual bool hasGlobDeleteAll(const QString &name) = 0;
62 virtual QStringList globPatterns(const QString &name) = 0;
63 virtual QString icon(const QString &name) = 0;
64 virtual QString genericIcon(const QString &name) = 0;
65 virtual void ensureLoaded() { }
66
67 QString directory() const { return m_directory; }
68
71 bool isMimeTypeGlobsExcluded(const QString &name) const;
72
75 QMimeProviderBase *m_overrideProvider = nullptr; // more "local" than this one
76};
77
78/*
79 Parses the files 'mime.cache' and 'types' on demand
80 */
82{
83public:
86
87 bool isValid() override;
88 bool isInternalDatabase() const override;
89 bool knowsMimeType(const QString &name) override;
91 void addParents(const QString &mime, QStringList &result) override;
92 QString resolveAlias(const QString &name) override;
93 void addAliases(const QString &name, QStringList &result) override;
94 void findByMagic(const QByteArray &data, QMimeMagicResult &result) override;
95 void addAllMimeTypes(QList<QMimeType> &result) override;
97 bool hasGlobDeleteAll(const QString &name) override;
98 QStringList globPatterns(const QString &name) override;
99 QString icon(const QString &name) override;
100 QString genericIcon(const QString &name) override;
101 void ensureLoaded() override;
102
103private:
104 struct CacheFile;
105
106 int matchGlobList(QMimeGlobMatchResult &result, CacheFile *cacheFile, int offset,
107 const QString &fileName);
108 bool matchSuffixTree(QMimeGlobMatchResult &result, CacheFile *cacheFile, int numEntries,
109 int firstOffset, const QString &fileName, qsizetype charPos,
110 bool caseSensitiveCheck);
111 bool matchMagicRule(CacheFile *cacheFile, int numMatchlets, int firstOffset,
112 const QByteArray &data);
113 QLatin1StringView iconForMime(CacheFile *cacheFile, int posListOffset, const QByteArray &inputMime);
114 void loadMimeTypeList();
115 bool checkCacheChanged();
116
117 std::unique_ptr<CacheFile> m_cacheFile;
118 QStringList m_cacheFileNames;
119 QSet<QString> m_mimetypeNames;
120 bool m_mimetypeListLoaded;
121 struct MimeTypeExtra
122 {
123 QHash<QString, QString> localeComments;
124 QStringList globPatterns;
125 bool hasGlobDeleteAll = false;
126 };
127 using MimeTypeExtraMap = std::map<QString, MimeTypeExtra>;
128 MimeTypeExtraMap m_mimetypeExtra;
129
130 MimeTypeExtraMap::const_iterator loadMimeTypeExtra(const QString &mimeName);
131};
132
133/*
134 Parses the raw XML files (slower)
135 */
137{
138public:
140#if QT_CONFIG(mimetype_database)
141 enum : bool { InternalDatabaseAvailable = true };
142#else
143 enum : bool { InternalDatabaseAvailable = false };
144#endif
148
149 bool isValid() override;
150 bool isInternalDatabase() const override;
151 bool knowsMimeType(const QString &name) override;
153 void addParents(const QString &mime, QStringList &result) override;
154 QString resolveAlias(const QString &name) override;
155 void addAliases(const QString &name, QStringList &result) override;
156 void findByMagic(const QByteArray &data, QMimeMagicResult &result) override;
157 void addAllMimeTypes(QList<QMimeType> &result) override;
158 void ensureLoaded() override;
160 bool hasGlobDeleteAll(const QString &name) override;
161 QStringList globPatterns(const QString &name) override;
162 QString icon(const QString &name) override;
163 QString genericIcon(const QString &name) override;
164
166
167 // Called by the mimetype xml parser
168 void addMimeType(const QMimeTypeXMLData &mt);
169 void addGlobPattern(const QMimeGlobPattern &glob);
170 void addParent(const QString &child, const QString &parent);
171 void addAlias(const QString &alias, const QString &name);
173
174private:
175 void load(const QString &fileName);
176 void load(const char *data, qsizetype len);
177
178 typedef QHash<QString, QMimeTypeXMLData> NameMimeTypeMap;
179 NameMimeTypeMap m_nameMimeTypeMap;
180
181 typedef QHash<QString, QString> AliasHash;
182 AliasHash m_aliases;
183
184 typedef QHash<QString, QStringList> ParentsHash;
185 ParentsHash m_parents;
186 QMimeAllGlobPatterns m_mimeTypeGlobs;
187
188 QList<QMimeMagicRuleMatcher> m_magicMatchers;
189 QStringList m_allFiles;
190};
191
193
194#endif // QMIMEPROVIDER_P_H
\inmodule QtCore
Definition qbytearray.h:57
Result of the globs parsing, as data structures ready for efficient MIME type matching.
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
bool hasGlobDeleteAll(const QString &name) override
void ensureLoaded() override
bool isValid() 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
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
The QMimeGlobPattern class contains the glob pattern for file names for MIME type matching.
The QMimeMagicRuleMatcher class checks a number of rules based on operator "or".
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 void ensureLoaded()
virtual QString icon(const QString &name)=0
QMimeProviderBase * overrideProvider() const
virtual void addFileNameMatches(const QString &fileName, QMimeGlobMatchResult &result)=0
virtual bool isValid()=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 void addAllMimeTypes(QList< QMimeType > &result)=0
virtual ~QMimeProviderBase()
virtual QMimeTypePrivate::LocaleHash localeComments(const QString &name)=0
virtual QString resolveAlias(const QString &name)=0
QMimeProviderBase(QMimeDatabasePrivate *db, const QString &directory)
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)
void ensureLoaded() override
bool knowsMimeType(const QString &name) override
bool isValid() override
bool isInternalDatabase() const override
QString resolveAlias(const QString &name) override
void addMimeType(const QMimeTypeXMLData &mt)
void findByMagic(const QByteArray &data, QMimeMagicResult &result) 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
\inmodule QtCore
\macro QT_RESTRICTED_CAST_FROM_ASCII
Definition qstring.h:129
bool isEmpty() const noexcept
Returns true if the string has no characters; otherwise returns false.
Definition qstring.h:192
Combined button and popup list for selecting options.
GLint GLsizei GLsizei GLenum GLenum GLsizei void * data
GLenum GLuint GLintptr offset
GLuint name
GLuint64EXT * result
[6]
GLenum GLsizei len
#define QT_REQUIRE_CONFIG(feature)
ptrdiff_t qsizetype
Definition qtypes.h:165
static QString errorMessage(QUrlPrivate::ErrorCode errorCode, const QString &errorSource, qsizetype errorPosition)
Definition qurl.cpp:3517
application x qt windows mime
[2]
QMimeDatabase db
[0]
static const auto matcher
[0]
QLayoutItem * child
[0]
The QMimeGlobMatchResult class accumulates results from glob matching.
bool isValid() const