aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLinus Jahn <lnj@kaidan.im>2023-03-14 20:52:40 +0100
committerLinus Jahn <lnj@kaidan.im>2023-03-14 22:39:14 +0100
commitfa45d75aaadfe9e1d07911cd9483932abaa55117 (patch)
tree124705845910dba8c6952e17403a274c8b216854
parent567b58a7a6dabf105a4d013b07c9937fbd68fd24 (diff)
MamManager: Move parsing from handleStanza() into new function
-rw-r--r--src/client/QXmppMamManager.cpp55
1 files changed, 33 insertions, 22 deletions
diff --git a/src/client/QXmppMamManager.cpp b/src/client/QXmppMamManager.cpp
index a5b1ce5c..d96b2791 100644
--- a/src/client/QXmppMamManager.cpp
+++ b/src/client/QXmppMamManager.cpp
@@ -20,6 +20,37 @@
using namespace QXmpp::Private;
+std::optional<std::tuple<QXmppMessage, QString>> parseMamMessageResult(const QDomElement &messageEl)
+{
+ auto resultElement = messageEl.firstChildElement("result");
+ if (resultElement.isNull() || resultElement.namespaceURI() != ns_mam) {
+ return {};
+ }
+
+ auto forwardedElement = resultElement.firstChildElement("forwarded");
+ if (forwardedElement.isNull() || forwardedElement.namespaceURI() != ns_forwarding) {
+ return {};
+ }
+
+ auto queryId = resultElement.attribute("queryid");
+
+ auto messageElement = forwardedElement.firstChildElement("message");
+ if (messageElement.isNull()) {
+ return {};
+ }
+
+ QXmppMessage message;
+ message.parse(messageElement);
+
+ auto delayElement = forwardedElement.firstChildElement("delay");
+ if (!delayElement.isNull() && delayElement.namespaceURI() == ns_delayed_delivery) {
+ const auto stamp = delayElement.attribute("stamp");
+ message.setStamp(QXmppUtils::datetimeFromString(stamp));
+ }
+
+ return { { message, queryId } };
+}
+
struct RetrieveRequestState
{
QXmppPromise<QXmppMamManager::RetrieveResult> promise;
@@ -87,28 +118,8 @@ QStringList QXmppMamManager::discoveryFeatures() const
bool QXmppMamManager::handleStanza(const QDomElement &element)
{
if (element.tagName() == "message") {
- QDomElement resultElement = element.firstChildElement("result");
- if (!resultElement.isNull() && resultElement.namespaceURI() == ns_mam) {
- QDomElement forwardedElement = resultElement.firstChildElement("forwarded");
- QString queryId = resultElement.attribute("queryid");
-
- if (forwardedElement.isNull() || forwardedElement.namespaceURI() != ns_forwarding) {
- return false;
- }
-
- auto messageElement = forwardedElement.firstChildElement("message");
- auto delayElement = forwardedElement.firstChildElement("delay");
-
- if (messageElement.isNull()) {
- return false;
- }
-
- QXmppMessage message;
- message.parse(messageElement);
- if (!delayElement.isNull() && delayElement.namespaceURI() == ns_delayed_delivery) {
- const QString stamp = delayElement.attribute("stamp");
- message.setStamp(QXmppUtils::datetimeFromString(stamp));
- }
+ if (auto result = parseMamMessageResult(element)) {
+ auto &[message, queryId] = *result;
auto itr = d->ongoingRequests.find(queryId.toStdString());
if (itr != d->ongoingRequests.end()) {