File indexing completed on 2024-04-28 16:10:23

0001 // SPDX-FileCopyrightText: 2015 Klaralvdalens Datakonsult AB
0002 // SPDX-FileCopyrightText: 2016 The Qt Company Ltd.
0003 // SPDX-FileCopyrightText: 2021 Noah Davis <noahadvs@gmail.com>
0004 // SPDX-License-Identifier: LicenseRef-KDE-Accepted-LGPL
0005 
0006 #pragma once
0007 
0008 #include <QFileInfo>
0009 #include <QMimeDatabase>
0010 #include <QObject>
0011 #include <qqml.h>
0012 
0013 class FileTypeSingletonPrivate;
0014 
0015 /**
0016  * @class FileTypeSingleton
0017  *
0018  * Provide a singleton to expose the functionality of QMimeDatabase.
0019  *
0020  * @sa QMimeDatabase
0021  */
0022 class FileTypeSingleton : public QObject
0023 {
0024     Q_OBJECT
0025 
0026     /**
0027      * @brief List of supported image formats.
0028      *
0029      * Returns a list of file extensions, not MIME types.
0030      */
0031     Q_PROPERTY(QStringList supportedImageFormats READ supportedImageFormats CONSTANT FINAL)
0032 
0033     /**
0034      * @brief List of supported animated image formats.
0035      *
0036      * Returns a list of file extensions, not MIME types.
0037      */
0038     Q_PROPERTY(QStringList supportedAnimatedImageFormats READ supportedAnimatedImageFormats CONSTANT FINAL)
0039 
0040     QML_NAMED_ELEMENT(FileType)
0041     QML_SINGLETON
0042 
0043 public:
0044     explicit FileTypeSingleton(QObject *parent = nullptr);
0045     ~FileTypeSingleton();
0046 
0047     /**
0048      * @brief Returns a MIME type for nameOrAlias or an invalid one if none found.
0049      *
0050      * @sa QMimeDatabase
0051      */
0052     Q_INVOKABLE QMimeType mimeTypeForName(const QString &nameOrAlias) const;
0053 
0054     enum MatchMode { MatchDefault, MatchExtension, MatchContent };
0055     Q_ENUM(MatchMode)
0056 
0057     /**
0058      * @brief Returns a MIME type for the file named fileName using mode.
0059      *
0060      * @sa QMimeDatabase
0061      */
0062     Q_INVOKABLE QMimeType mimeTypeForFile(const QString &fileName, FileTypeSingleton::MatchMode mode = MatchDefault) const;
0063 
0064     /**
0065      * @brief Returns a MIME type for fileInfo.
0066      *
0067      * @sa QMimeDatabase
0068      */
0069     Q_INVOKABLE QMimeType mimeTypeForFile(const QFileInfo &fileInfo, FileTypeSingleton::MatchMode mode = MatchDefault) const;
0070 
0071     /**
0072      * @brief Returns the MIME types for the file name fileName.
0073      *
0074      * @sa QMimeDatabase
0075      */
0076     Q_INVOKABLE QList<QMimeType> mimeTypesForFileName(const QString &fileName) const;
0077 
0078     /**
0079      * @brief Returns a MIME type for data.
0080      *
0081      * @sa QMimeDatabase
0082      */
0083     Q_INVOKABLE QMimeType mimeTypeForData(const QByteArray &data) const;
0084 
0085     /**
0086      * @brief Returns a MIME type for the data in device.
0087      *
0088      * @sa QMimeDatabase
0089      */
0090     Q_INVOKABLE QMimeType mimeTypeForData(QIODevice *device) const;
0091 
0092     /**
0093      * @brief Returns a MIME type for url.
0094      *
0095      * @sa QMimeDatabase
0096      */
0097     Q_INVOKABLE QMimeType mimeTypeForUrl(const QUrl &url) const;
0098 
0099     /**
0100      * @brief Returns a MIME type for the given fileName and device data.
0101      *
0102      * @sa QMimeDatabase
0103      */
0104     Q_INVOKABLE QMimeType mimeTypeForFileNameAndData(const QString &fileName, QIODevice *device) const;
0105 
0106     /**
0107      * @brief Returns a MIME type for the given fileName and device data.
0108      *
0109      * @sa QMimeDatabase
0110      */
0111     Q_INVOKABLE QMimeType mimeTypeForFileNameAndData(const QString &fileName, const QByteArray &data) const;
0112 
0113     /**
0114      * @brief Returns the suffix for the file fileName, as known by the MIME database.
0115      *
0116      * @sa QMimeDatabase
0117      */
0118     Q_INVOKABLE QString suffixForFileName(const QString &fileName) const;
0119 
0120     QStringList supportedImageFormats() const;
0121     QStringList supportedAnimatedImageFormats() const;
0122 
0123 private:
0124     const QScopedPointer<FileTypeSingletonPrivate> d_ptr;
0125     Q_DECLARE_PRIVATE(FileTypeSingleton)
0126     Q_DISABLE_COPY(FileTypeSingleton)
0127 };
0128 
0129 QML_DECLARE_TYPE(FileTypeSingleton)