File indexing completed on 2024-05-05 16:09:01

0001 /*
0002     SPDX-FileCopyrightText: 2018 Alexander Stippich <a.stippich@gmx.net>
0003 
0004     SPDX-License-Identifier: LGPL-2.1-or-later
0005 */
0006 
0007 #include "embeddedimagedata.h"
0008 #include "extractorcollection.h"
0009 #include "simpleextractionresult.h"
0010 #include "writedata.h"
0011 #include "writercollection.h"
0012 #include "kfilemetadata_debug.h"
0013 
0014 #include <QMimeDatabase>
0015 
0016 using namespace KFileMetaData;
0017 
0018 class Q_DECL_HIDDEN EmbeddedImageData::Private
0019 {
0020 public:
0021     QMimeDatabase mMimeDatabase;
0022     static const QStringList mMimetypes;
0023 };
0024 
0025 const QStringList EmbeddedImageData::Private::mMimetypes =
0026 {
0027     QStringLiteral("audio/flac"),
0028     QStringLiteral("audio/mp4"),
0029     QStringLiteral("audio/mpeg"),
0030     QStringLiteral("audio/mpeg3"),
0031     QStringLiteral("audio/ogg"),
0032     QStringLiteral("audio/opus"),
0033     QStringLiteral("audio/wav"),
0034     QStringLiteral("audio/x-aiff"),
0035     QStringLiteral("audio/x-ape"),
0036     QStringLiteral("audio/x-mpeg"),
0037     QStringLiteral("audio/x-ms-wma"),
0038     QStringLiteral("audio/x-musepack"),
0039     QStringLiteral("audio/x-opus+ogg"),
0040     QStringLiteral("audio/x-speex+ogg"),
0041     QStringLiteral("audio/x-vorbis+ogg"),
0042     QStringLiteral("audio/x-wav"),
0043     QStringLiteral("audio/x-wavpack"),
0044 };
0045 
0046 EmbeddedImageData::EmbeddedImageData()
0047     : d(std::unique_ptr<Private>(new Private()))
0048 {
0049 }
0050 
0051 EmbeddedImageData::~EmbeddedImageData()
0052 = default;
0053 
0054 #if KFILEMETADATA_BUILD_DEPRECATED_SINCE(5, 91)
0055 
0056 QStringList EmbeddedImageData::mimeTypes() const
0057 {
0058     return d->mMimetypes;
0059 }
0060 
0061 QMap<EmbeddedImageData::ImageType, QByteArray>
0062 EmbeddedImageData::imageData(const QString &fileUrl,
0063                              const EmbeddedImageData::ImageTypes types) const
0064 {
0065     const auto fileMimeType = d->mMimeDatabase.mimeTypeForFile(fileUrl).name();
0066     KFileMetaData::ExtractorCollection ec;
0067     KFileMetaData::SimpleExtractionResult result(fileUrl, fileMimeType, ExtractionResult::ExtractImageData);
0068 
0069     auto extractors = ec.fetchExtractors(fileMimeType);
0070     for (const auto& ex : extractors) {
0071     ex->extract(&result);
0072     }
0073     return result.imageData();
0074 }
0075 
0076 void
0077 EmbeddedImageData::writeImageData(const QString &fileUrl,
0078                              QMap<EmbeddedImageData::ImageType, QByteArray> &imageData)
0079 {
0080     const auto fileMimeType = d->mMimeDatabase.mimeTypeForFile(fileUrl).name();
0081     KFileMetaData::WriterCollection wc;
0082     KFileMetaData::WriteData data(fileUrl, fileMimeType);
0083     data.addImageData(imageData);
0084 
0085     auto writers = wc.fetchWriters(fileMimeType);
0086     for (const auto& w : writers) {
0087     w->write(data);
0088     }
0089 }
0090 #endif