diff options
| author | Linus Jahn <lnj@kaidan.im> | 2020-07-05 01:28:27 +0200 |
|---|---|---|
| committer | Linus Jahn <lnj@kaidan.im> | 2021-08-22 16:09:02 +0200 |
| commit | 5cd52a0a979feaf8953f8583076f8df639b3481d (patch) | |
| tree | 2fb8118d6f2475cdf920a41085e671b8af8aed95 /src/base/QXmppPubSubItem.cpp | |
| parent | a245371ed2ad363bece0b6de3d760bce937637d1 (diff) | |
| download | qxmpp-5cd52a0a979feaf8953f8583076f8df639b3481d.tar.gz | |
Add new QXmppPubSubItem
Specialization of pubsub items now works via inheritance.
Parsing has been extended, now also supports the 'publisher' attribute.
Diffstat (limited to 'src/base/QXmppPubSubItem.cpp')
| -rw-r--r-- | src/base/QXmppPubSubItem.cpp | 104 |
1 files changed, 88 insertions, 16 deletions
diff --git a/src/base/QXmppPubSubItem.cpp b/src/base/QXmppPubSubItem.cpp index d136547c..6f9b539d 100644 --- a/src/base/QXmppPubSubItem.cpp +++ b/src/base/QXmppPubSubItem.cpp @@ -3,6 +3,7 @@ * * Author: * Jeremy Lainé + * Linus Jahn * * Source: * https://github.com/qxmpp-project/qxmpp @@ -31,12 +32,49 @@ class QXmppPubSubItemPrivate : public QSharedData { public: + QXmppPubSubItemPrivate(const QString &id, const QString &publisher); + QString id; - QXmppElement contents; + QString publisher; }; -QXmppPubSubItem::QXmppPubSubItem() - : d(new QXmppPubSubItemPrivate) +QXmppPubSubItemPrivate::QXmppPubSubItemPrivate(const QString &id, const QString &publisher) + : id(id), publisher(publisher) +{ +} + +/// +/// \class QXmppPubSubItem +/// +/// The QXmppPubSubItem class represents a publish-subscribe item as defined by +/// \xep{0060, Publish-Subscribe}. +/// +/// To access the payload of an item, you need to create a derived class of this +/// and override QXmppPubSubItem::parsePayload() and +/// QXmppPubSubItem::serializePayload(). +/// +/// It is also required that you override QXmppPubSubItem::isItem() and also +/// check for the correct payload of the PubSub item. This can be easily done by +/// using the protected overload of isItem() with an function that checks the +/// tag name and namespace of the payload. The function is only called if a +/// payload exists. +/// +/// In short, you need to reimplement these methods: +/// * QXmppPubSubItem::parsePayload() +/// * QXmppPubSubItem::serializePayload() +/// * QXmppPubSubItem::isItem() +/// +/// \since QXmpp 1.5 +/// + +/// +/// Constructs an item with \a id and \a publisher. +/// +/// \param id +/// \param publisher +/// +QXmppPubSubItem::QXmppPubSubItem(const QString &id, const QString &publisher) + : d(new QXmppPubSubItemPrivate(id, publisher)) { } @@ -48,50 +86,84 @@ QXmppPubSubItem::~QXmppPubSubItem() = default; /// Default assignment operator QXmppPubSubItem &QXmppPubSubItem::operator=(const QXmppPubSubItem &iq) = default; +/// /// Returns the ID of the PubSub item. - +/// QString QXmppPubSubItem::id() const { return d->id; } +/// /// Sets the ID of the PubSub item. /// /// \param id - +/// void QXmppPubSubItem::setId(const QString &id) { d->id = id; } -/// Returns the contents of the PubSub item. - -QXmppElement QXmppPubSubItem::contents() const +/// +/// Returns the JID of the publisher of the item. +/// +QString QXmppPubSubItem::publisher() const { - return d->contents; + return d->publisher; } -/// Sets the contents of the PubSub item. /// -/// \param contents - -void QXmppPubSubItem::setContents(const QXmppElement &contents) +/// Sets the JID of the publisher of the item. +/// +void QXmppPubSubItem::setPublisher(const QString &publisher) { - d->contents = contents; + d->publisher = publisher; } /// \cond void QXmppPubSubItem::parse(const QDomElement &element) { d->id = element.attribute(QStringLiteral("id")); - d->contents = QXmppElement(element.firstChildElement()); + d->publisher = element.attribute(QStringLiteral("publisher")); + + parsePayload(element.firstChildElement()); } void QXmppPubSubItem::toXml(QXmlStreamWriter *writer) const { writer->writeStartElement(QStringLiteral("item")); helperToXmlAddAttribute(writer, QStringLiteral("id"), d->id); - d->contents.toXml(writer); + helperToXmlAddAttribute(writer, QStringLiteral("publisher"), d->publisher); + + serializePayload(writer); + writer->writeEndElement(); } /// \endcond + +/// +/// Returns true, if the element is possibly a PubSub item. +/// +bool QXmppPubSubItem::isItem(const QDomElement &element) +{ + return element.tagName() == QStringLiteral("item"); +} + +/// +/// Parses the payload of the item (the child element of the <item/>). +/// +/// This method needs to be overriden to perform the payload-specific parsing. +/// +void QXmppPubSubItem::parsePayload(const QDomElement &) +{ +} + +/// +/// Serializes the payload of the item (the child element of the <item/>). +/// +/// This method needs to be overriden to perform the payload-specific +/// serialization. +/// +void QXmppPubSubItem::serializePayload(QXmlStreamWriter *) const +{ +} |
