aboutsummaryrefslogtreecommitdiff
path: root/src/base
diff options
context:
space:
mode:
authorLinus Jahn <lnj@kaidan.im>2022-09-26 13:21:16 +0200
committerLinus Jahn <lnj@kaidan.im>2022-09-26 13:30:11 +0200
commit82969459a5284853dcdacaf35646b222783d3ae9 (patch)
treea3988d7d0dd6161b035afb7c695a112288a845ad /src/base
parentf762f730b5adf769a55434e7786b56f3d092b662 (diff)
downloadqxmpp-82969459a5284853dcdacaf35646b222783d3ae9.tar.gz
FileMetadata: Allow multiple thumbnails
The standard actually allows multiple thumbnails.
Diffstat (limited to 'src/base')
-rw-r--r--src/base/QXmppFileMetadata.cpp28
-rw-r--r--src/base/QXmppFileMetadata.h4
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);