diff options
Diffstat (limited to 'src/base')
| -rw-r--r-- | src/base/QXmppFutureUtils_p.h | 9 | ||||
| -rw-r--r-- | src/base/QXmppStream.cpp | 9 |
2 files changed, 8 insertions, 10 deletions
diff --git a/src/base/QXmppFutureUtils_p.h b/src/base/QXmppFutureUtils_p.h index 5e6b5ca8..95150008 100644 --- a/src/base/QXmppFutureUtils_p.h +++ b/src/base/QXmppFutureUtils_p.h @@ -158,14 +158,15 @@ auto parseIq(Input &&sendResult, Converter convert) -> decltype(convert({})) IqType iq; iq.parse(element); if (iq.type() == QXmppIq::Error) { - return iq.error(); + if (auto err = iq.errorOptional()) { + return QXmppError { err->text(), std::move(*err) }; + } + return QXmppError { QStringLiteral("Unknown error.") }; } return convert(std::move(iq)); }, [](QXmppError error) -> Result { - using Error = QXmppStanza::Error; - return Error(Error::Wait, Error::UndefinedCondition, - QStringLiteral("Couldn't send request: ") + error.description); + return error; }, }, sendResult); diff --git a/src/base/QXmppStream.cpp b/src/base/QXmppStream.cpp index d1a5ccd2..7274e242 100644 --- a/src/base/QXmppStream.cpp +++ b/src/base/QXmppStream.cpp @@ -251,8 +251,8 @@ QXmppTask<QXmppStream::IqResult> QXmppStream::sendIq(QXmppPacket &&packet, const auto sendFuture = send(std::move(packet)); if (sendFuture.isFinished()) { - if (std::holds_alternative<QXmppError>(sendFuture.result())) { - // early exit (saves QFutureWatcher) + if (std::holds_alternative<QXmppError>(sendFuture.takeResult())) { + // early exit return makeReadyTask<IqResult>(std::get<QXmppError>(sendFuture.result())); } } else { @@ -266,10 +266,7 @@ QXmppTask<QXmppStream::IqResult> QXmppStream::sendIq(QXmppPacket &&packet, const }); } - IqState state { - {}, - to, - }; + IqState state { {}, to }; auto task = state.interface.task(); d->runningIqs.insert(id, std::move(state)); return task; |
