File indexing completed on 2024-04-28 12:42:48

0001 // SPDX-FileCopyrightText: 2021 Noah Davis <noahadvs@gmail.com>
0002 // SPDX-License-Identifier: LicenseRef-KDE-Accepted-LGPL
0003 
0004 #include "filetypesingleton.h"
0005 #include <QImageReader>
0006 #include <QMovie>
0007 
0008 static QStringList byteArrayListToStringList(const QByteArrayList &byteArrayList)
0009 {
0010     QStringList stringList;
0011     for (const QByteArray &byteArray : byteArrayList) {
0012         stringList.append(QString::fromLocal8Bit(byteArray));
0013     }
0014     return stringList;
0015 }
0016 
0017 class FileTypeSingletonPrivate
0018 {
0019     Q_DECLARE_PUBLIC(FileTypeSingleton)
0020     Q_DISABLE_COPY(FileTypeSingletonPrivate)
0021 public:
0022     FileTypeSingletonPrivate(FileTypeSingleton *qq);
0023     FileTypeSingleton *const q_ptr;
0024     QMimeDatabase mimetypeDatabase;
0025     QStringList supportedImageFormats = byteArrayListToStringList(QImageReader::supportedImageFormats());
0026     QStringList supportedAnimatedImageFormats = byteArrayListToStringList(QMovie::supportedFormats());
0027 };
0028 
0029 FileTypeSingletonPrivate::FileTypeSingletonPrivate(FileTypeSingleton *qq)
0030     : q_ptr(qq)
0031 {
0032 }
0033 
0034 FileTypeSingleton::FileTypeSingleton(QObject *parent)
0035     : QObject(parent)
0036     , d_ptr(new FileTypeSingletonPrivate(this))
0037 {
0038 }
0039 
0040 FileTypeSingleton::~FileTypeSingleton() noexcept
0041 {
0042 }
0043 
0044 QMimeType FileTypeSingleton::mimeTypeForName(const QString &nameOrAlias) const
0045 {
0046     Q_D(const FileTypeSingleton);
0047     return d->mimetypeDatabase.mimeTypeForName(nameOrAlias);
0048 }
0049 
0050 QMimeType FileTypeSingleton::mimeTypeForFile(const QString &fileName, MatchMode mode) const
0051 {
0052     Q_D(const FileTypeSingleton);
0053     return d->mimetypeDatabase.mimeTypeForFile(fileName, static_cast<QMimeDatabase::MatchMode>(mode));
0054 }
0055 
0056 QMimeType FileTypeSingleton::mimeTypeForFile(const QFileInfo &fileInfo, MatchMode mode) const
0057 {
0058     Q_D(const FileTypeSingleton);
0059     return d->mimetypeDatabase.mimeTypeForFile(fileInfo, static_cast<QMimeDatabase::MatchMode>(mode));
0060 }
0061 
0062 QList<QMimeType> FileTypeSingleton::mimeTypesForFileName(const QString &fileName) const
0063 {
0064     Q_D(const FileTypeSingleton);
0065     return d->mimetypeDatabase.mimeTypesForFileName(fileName);
0066 }
0067 
0068 QMimeType FileTypeSingleton::mimeTypeForData(const QByteArray &data) const
0069 {
0070     Q_D(const FileTypeSingleton);
0071     return d->mimetypeDatabase.mimeTypeForData(data);
0072 }
0073 
0074 QMimeType FileTypeSingleton::mimeTypeForData(QIODevice *device) const
0075 {
0076     Q_D(const FileTypeSingleton);
0077     return d->mimetypeDatabase.mimeTypeForData(device);
0078 }
0079 
0080 QMimeType FileTypeSingleton::mimeTypeForUrl(const QUrl &url) const
0081 {
0082     Q_D(const FileTypeSingleton);
0083     return d->mimetypeDatabase.mimeTypeForUrl(url);
0084 }
0085 
0086 QMimeType FileTypeSingleton::mimeTypeForFileNameAndData(const QString &fileName, QIODevice *device) const
0087 {
0088     Q_D(const FileTypeSingleton);
0089     return d->mimetypeDatabase.mimeTypeForFileNameAndData(fileName, device);
0090 }
0091 
0092 QMimeType FileTypeSingleton::mimeTypeForFileNameAndData(const QString &fileName, const QByteArray &data) const
0093 {
0094     Q_D(const FileTypeSingleton);
0095     return d->mimetypeDatabase.mimeTypeForFileNameAndData(fileName, data);
0096 }
0097 
0098 QString FileTypeSingleton::suffixForFileName(const QString &fileName) const
0099 {
0100     Q_D(const FileTypeSingleton);
0101     return d->mimetypeDatabase.suffixForFileName(fileName);
0102 }
0103 
0104 QStringList FileTypeSingleton::supportedImageFormats() const
0105 {
0106     Q_D(const FileTypeSingleton);
0107     return d->supportedImageFormats;
0108 }
0109 
0110 QStringList FileTypeSingleton::supportedAnimatedImageFormats() const
0111 {
0112     Q_D(const FileTypeSingleton);
0113     return d->supportedAnimatedImageFormats;
0114 }
0115 
0116 #include "moc_filetypesingleton.cpp"