From 82969459a5284853dcdacaf35646b222783d3ae9 Mon Sep 17 00:00:00 2001 From: Linus Jahn Date: Mon, 26 Sep 2022 13:21:16 +0200 Subject: FileMetadata: Allow multiple thumbnails The standard actually allows multiple thumbnails. --- src/base/QXmppFileMetadata.cpp | 28 +++++++++++++++------------- 1 file changed, 15 insertions(+), 13 deletions(-) (limited to 'src/base/QXmppFileMetadata.cpp') diff --git a/src/base/QXmppFileMetadata.cpp b/src/base/QXmppFileMetadata.cpp index 26f6a4d0..e71d9dc5 100644 --- a/src/base/QXmppFileMetadata.cpp +++ b/src/base/QXmppFileMetadata.cpp @@ -26,7 +26,7 @@ public: std::optional mediaType; std::optional name; std::optional size; - std::optional thumbnail; + QVector thumbnails; std::optional width; }; @@ -101,10 +101,12 @@ bool QXmppFileMetadata::parse(const QDomElement &el) if (auto sizeEl = el.firstChildElement("size"); !sizeEl.isNull()) { d->size = sizeEl.text().toULong(); } - if (auto thumbEl = el.firstChildElement("thumbnail"); !thumbEl.isNull()) { - d->thumbnail = QXmppThumbnail(); - if (!d->thumbnail->parse(thumbEl)) { - d->thumbnail.reset(); + for (auto thumbEl = el.firstChildElement("thumbnail"); + !thumbEl.isNull(); + thumbEl = thumbEl.nextSiblingElement("thumbnail")) { + QXmppThumbnail thumbnail; + if (thumbnail.parse(thumbEl)) { + d->thumbnails.append(std::move(thumbnail)); } } if (auto widthEl = el.firstChildElement("width"); !widthEl.isNull()) { @@ -144,8 +146,8 @@ void QXmppFileMetadata::toXml(QXmlStreamWriter *writer) const if (d->size) { writer->writeTextElement("size", QString::number(*d->size)); } - if (d->thumbnail) { - d->thumbnail->toXml(writer); + for (const auto &thumbnail : d->thumbnails) { + thumbnail.toXml(writer); } if (d->width) { writer->writeTextElement("width", QString::number(*d->width)); @@ -250,16 +252,16 @@ void QXmppFileMetadata::setSize(std::optional size) d->size = size; } -/// Returns the thumbnail reference. -const std::optional &QXmppFileMetadata::thumbnail() const +/// Returns the thumbnail references. +const QVector &QXmppFileMetadata::thumbnails() const { - return d->thumbnail; + return d->thumbnails; } -/// Sets the thumbnail reference. -void QXmppFileMetadata::setThumbnail(const std::optional &thumbnail) +/// Sets the thumbnail references. +void QXmppFileMetadata::setThumbnails(const QVector &thumbnail) { - d->thumbnail = thumbnail; + d->thumbnails = thumbnail; } /// Returns the width of the image or video. -- cgit v1.2.3