From d40b65c144a8f7042299bdcc387494ae01a60a46 Mon Sep 17 00:00:00 2001 From: Linus Jahn Date: Fri, 6 Dec 2019 23:47:54 +0100 Subject: Refactor QXmppPubSubIq and add missing tests --- src/base/QXmppPubSubIq.cpp | 49 +++++++++++++++++++++++----------------------- 1 file changed, 24 insertions(+), 25 deletions(-) (limited to 'src/base/QXmppPubSubIq.cpp') diff --git a/src/base/QXmppPubSubIq.cpp b/src/base/QXmppPubSubIq.cpp index 6dd485dd..5e742845 100644 --- a/src/base/QXmppPubSubIq.cpp +++ b/src/base/QXmppPubSubIq.cpp @@ -29,23 +29,23 @@ #include "QXmppConstants_p.h" #include "QXmppUtils.h" -static const char *ns_pubsub = "http://jabber.org/protocol/pubsub"; - -static const char *pubsub_queries[] = { - "affiliations", - "default", - "items", - "publish", - "retract", - "subscribe", - "subscription", - "subscriptions", - "unsubscribe", +static const QStringList PUBSUB_QUERIES = { + QStringLiteral("affiliations"), + QStringLiteral("default"), + QStringLiteral("items"), + QStringLiteral("publish"), + QStringLiteral("retract"), + QStringLiteral("subscribe"), + QStringLiteral("subscription"), + QStringLiteral("subscriptions"), + QStringLiteral("unsubscribe"), }; class QXmppPubSubIqPrivate : public QSharedData { public: + QXmppPubSubIqPrivate(); + QXmppPubSubIq::QueryType queryType; QString queryJid; QString queryNode; @@ -54,6 +54,11 @@ public: QString subscriptionType; }; +QXmppPubSubIqPrivate::QXmppPubSubIqPrivate() + : queryType(QXmppPubSubIq::ItemsQuery) +{ +} + QXmppPubSubIq::QXmppPubSubIq() : d(new QXmppPubSubIqPrivate) { @@ -148,8 +153,7 @@ void QXmppPubSubIq::setItems(const QList &items) /// \cond bool QXmppPubSubIq::isPubSubIq(const QDomElement &element) { - const QDomElement pubSubElement = element.firstChildElement("pubsub"); - return pubSubElement.namespaceURI() == ns_pubsub; + return element.firstChildElement("pubsub").namespaceURI() == ns_pubsub; } void QXmppPubSubIq::parseElementFromChild(const QDomElement &element) @@ -160,21 +164,16 @@ void QXmppPubSubIq::parseElementFromChild(const QDomElement &element) // determine query type const QString tagName = queryElement.tagName(); - for (int i = ItemsQuery; i <= SubscriptionsQuery; i++) - { - if (tagName == pubsub_queries[i]) - { - d->queryType = static_cast(i); - break; - } - } + int queryType = PUBSUB_QUERIES.indexOf(queryElement.tagName()); + if (queryType > -1) + d->queryType = QueryType(queryType); + d->queryJid = queryElement.attribute("jid"); d->queryNode = queryElement.attribute("node"); // parse contents QDomElement childElement; - switch (d->queryType) - { + switch (d->queryType) { case QXmppPubSubIq::ItemsQuery: case QXmppPubSubIq::PublishQuery: case QXmppPubSubIq::RetractQuery: @@ -202,7 +201,7 @@ void QXmppPubSubIq::toXmlElementFromChild(QXmlStreamWriter *writer) const writer->writeAttribute("xmlns", ns_pubsub); // write query type - writer->writeStartElement(pubsub_queries[d->queryType]); + writer->writeStartElement(PUBSUB_QUERIES.at(d->queryType)); helperToXmlAddAttribute(writer, "jid", d->queryJid); helperToXmlAddAttribute(writer, "node", d->queryNode); -- cgit v1.2.3