QXmpp  Version: 1.5.5
QXmppPubSubBaseItem.h
1 // SPDX-FileCopyrightText: 2019 Jeremy LainĂ© <jeremy.laine@m4x.org>
2 // SPDX-FileCopyrightText: 2019 Linus Jahn <lnj@kaidan.im>
3 //
4 // SPDX-License-Identifier: LGPL-2.1-or-later
5 
6 #pragma once
7 
8 #include "QXmppGlobal.h"
9 
10 #include <QDomElement>
11 #include <QMetaType>
12 #include <QSharedDataPointer>
13 
14 class QXmlStreamWriter;
15 class QXmppPubSubBaseItemPrivate;
16 
17 class QXMPP_EXPORT QXmppPubSubBaseItem
18 {
19 public:
20  QXmppPubSubBaseItem(const QString &id = {}, const QString &publisher = {});
23  virtual ~QXmppPubSubBaseItem();
24 
27 
28  QString id() const;
29  void setId(const QString &id);
30 
31  QString publisher() const;
32  void setPublisher(const QString &publisher);
33 
35  void parse(const QDomElement &element);
36  void toXml(QXmlStreamWriter *writer) const;
38 
39  static bool isItem(const QDomElement &element);
40 
41 protected:
42  virtual void parsePayload(const QDomElement &payloadElement);
43  virtual void serializePayload(QXmlStreamWriter *writer) const;
44 
45  template<typename PayloadChecker>
46  static bool isItem(const QDomElement &element, PayloadChecker isPayloadValid);
47 
48 private:
49  QSharedDataPointer<QXmppPubSubBaseItemPrivate> d;
50 };
51 
71 template<typename PayloadChecker>
72 bool QXmppPubSubBaseItem::isItem(const QDomElement &element, PayloadChecker isPayloadValid)
73 {
74  if (!isItem(element)) {
75  return false;
76  }
77 
78  const QDomElement payload = element.firstChildElement();
79 
80  // we can only check the payload if it's existant
81  if (!payload.isNull()) {
82  return isPayloadValid(payload);
83  }
84  return true;
85 }
86 
87 Q_DECLARE_METATYPE(QXmppPubSubBaseItem)
Definition: QXmppPubSubBaseItem.h:18
QXmppPubSubBaseItem & operator=(QXmppPubSubBaseItem &&)
Default move-assignment operator.
QXmppPubSubBaseItem(const QXmppPubSubBaseItem &)
Default copy-constructor.
QXmppPubSubBaseItem(QXmppPubSubBaseItem &&)
Default move-constructor.
static bool isItem(const QDomElement &element)
Definition: QXmppPubSubBaseItem.cpp:130
QXmppPubSubBaseItem & operator=(const QXmppPubSubBaseItem &)
Default assignment operator.