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 QMIMEDATABASE_P_H |
6 | #define QMIMEDATABASE_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.h" |
20 | #include "qmimetype.h" |
21 | |
22 | QT_REQUIRE_CONFIG(mimetype); |
23 | |
24 | #include "qmimetype_p.h" |
25 | #include "qmimeglobpattern_p.h" |
26 | |
27 | #include <QtCore/qelapsedtimer.h> |
28 | #include <QtCore/qlist.h> |
29 | #include <QtCore/qmutex.h> |
30 | |
31 | #include <vector> |
32 | #include <memory> |
33 | |
34 | QT_BEGIN_NAMESPACE |
35 | |
36 | class QFileInfo; |
37 | class QIODevice; |
38 | class QMimeDatabase; |
39 | class QMimeProviderBase; |
40 | |
41 | class QMimeDatabasePrivate |
42 | { |
43 | public: |
44 | Q_DISABLE_COPY_MOVE(QMimeDatabasePrivate) |
45 | |
46 | QMimeDatabasePrivate(); |
47 | ~QMimeDatabasePrivate(); |
48 | |
49 | static QMimeDatabasePrivate *instance(); |
50 | |
51 | const QString &defaultMimeType() const { return m_defaultMimeType; } |
52 | |
53 | bool inherits(const QString &mime, const QString &parent); |
54 | |
55 | QList<QMimeType> allMimeTypes(); |
56 | |
57 | QString resolveAlias(const QString &nameOrAlias); |
58 | QStringList parents(const QString &mimeName); |
59 | QMimeType mimeTypeForName(const QString &nameOrAlias); |
60 | QMimeType mimeTypeForFileNameAndData(const QString &fileName, QIODevice *device); |
61 | QMimeType mimeTypeForFileExtension(const QString &fileName); |
62 | QMimeType mimeTypeForData(QIODevice *device); |
63 | QMimeType mimeTypeForFile(const QString &fileName, const QFileInfo &fileInfo, QMimeDatabase::MatchMode mode); |
64 | QMimeType findByData(const QByteArray &data, int *priorityPtr); |
65 | QStringList mimeTypeForFileName(const QString &fileName); |
66 | QMimeGlobMatchResult findByFileName(const QString &fileName); |
67 | |
68 | // API for QMimeType. Takes care of locking the mutex. |
69 | void loadMimeTypePrivate(QMimeTypePrivate &mimePrivate); |
70 | void loadGenericIcon(QMimeTypePrivate &mimePrivate); |
71 | void loadIcon(QMimeTypePrivate &mimePrivate); |
72 | QStringList mimeParents(const QString &mimeName); |
73 | QStringList listAliases(const QString &mimeName); |
74 | bool mimeInherits(const QString &mime, const QString &parent); |
75 | |
76 | private: |
77 | using Providers = std::vector<std::unique_ptr<QMimeProviderBase>>; |
78 | const Providers &providers(); |
79 | bool shouldCheck(); |
80 | void loadProviders(); |
81 | QString fallbackParent(const QString &mimeTypeName) const; |
82 | |
83 | const QString m_defaultMimeType; |
84 | mutable Providers m_providers; |
85 | QElapsedTimer m_lastCheck; |
86 | |
87 | public: |
88 | QMutex mutex; |
89 | }; |
90 | |
91 | QT_END_NAMESPACE |
92 | |
93 | #endif // QMIMEDATABASE_P_H |
94 | |