diff options
| author | Linus Jahn <lnj@kaidan.im> | 2022-09-26 13:21:16 +0200 |
|---|---|---|
| committer | Linus Jahn <lnj@kaidan.im> | 2022-09-26 13:30:11 +0200 |
| commit | 82969459a5284853dcdacaf35646b222783d3ae9 (patch) | |
| tree | a3988d7d0dd6161b035afb7c695a112288a845ad /src/base | |
| parent | f762f730b5adf769a55434e7786b56f3d092b662 (diff) | |
| download | qxmpp-82969459a5284853dcdacaf35646b222783d3ae9.tar.gz | |
FileMetadata: Allow multiple thumbnails
The standard actually allows multiple thumbnails.
Diffstat (limited to 'src/base')
| -rw-r--r-- | src/base/QXmppFileMetadata.cpp | 28 | ||||
| -rw-r--r-- | src/base/QXmppFileMetadata.h | 4 |
2 files changed, 17 insertions, 15 deletions
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<QMimeType> mediaType; std::optional<QString> name; std::optional<uint64_t> size; - std::optional<QXmppThumbnail> thumbnail; + QVector<QXmppThumbnail> thumbnails; std::optional<uint32_t> 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<uint64_t> size) d->size = size; } -/// Returns the thumbnail reference. -const std::optional<QXmppThumbnail> &QXmppFileMetadata::thumbnail() const +/// Returns the thumbnail references. +const QVector<QXmppThumbnail> &QXmppFileMetadata::thumbnails() const { - return d->thumbnail; + return d->thumbnails; } -/// Sets the thumbnail reference. -void QXmppFileMetadata::setThumbnail(const std::optional<QXmppThumbnail> &thumbnail) +/// Sets the thumbnail references. +void QXmppFileMetadata::setThumbnails(const QVector<QXmppThumbnail> &thumbnail) { - d->thumbnail = thumbnail; + d->thumbnails = thumbnail; } /// Returns the width of the image or video. diff --git a/src/base/QXmppFileMetadata.h b/src/base/QXmppFileMetadata.h index ec272fbc..335ab5ab 100644 --- a/src/base/QXmppFileMetadata.h +++ b/src/base/QXmppFileMetadata.h @@ -55,8 +55,8 @@ public: std::optional<uint64_t> size() const; void setSize(std::optional<uint64_t> size); - const std::optional<QXmppThumbnail> &thumbnail() const; - void setThumbnail(const std::optional<QXmppThumbnail> &thumbnail); + const QVector<QXmppThumbnail> &thumbnails() const; + void setThumbnails(const QVector<QXmppThumbnail> &thumbnail); std::optional<uint32_t> width() const; void setWidth(std::optional<uint32_t> width); |
