File indexing completed on 2025-02-16 13:03:41
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