aboutsummaryrefslogtreecommitdiff
path: root/src/base/QXmppPacket.cpp
diff options
context:
space:
mode:
authorLinus Jahn <lnj@kaidan.im>2021-09-05 16:02:37 +0200
committerLinus Jahn <lnj@kaidan.im>2021-09-28 17:08:08 +0200
commit22be2464b5d253e840d4731fbc86e9633a394e8c (patch)
tree341eea345bd621cd4ef045a79aca57129075ee8d /src/base/QXmppPacket.cpp
parent21a198fd66e7c35622fce0b08c306553a4e4ff5a (diff)
downloadqxmpp-22be2464b5d253e840d4731fbc86e9633a394e8c.tar.gz
QXmppStream: Allow to use existing future interface
Diffstat (limited to 'src/base/QXmppPacket.cpp')
-rw-r--r--src/base/QXmppPacket.cpp26
1 files changed, 22 insertions, 4 deletions
diff --git a/src/base/QXmppPacket.cpp b/src/base/QXmppPacket.cpp
index 3676c269..3269369c 100644
--- a/src/base/QXmppPacket.cpp
+++ b/src/base/QXmppPacket.cpp
@@ -27,13 +27,31 @@
#include <QFuture>
#include <QXmlStreamWriter>
+inline QByteArray serialize(const QXmppNonza &nonza)
+{
+ QByteArray out;
+ QXmlStreamWriter xmlStream(&out);
+ nonza.toXml(&xmlStream);
+ return out;
+}
+
/// \cond
QXmppPacket::QXmppPacket(const QXmppNonza &nonza)
- : m_interface(std::make_shared<QFutureInterface<QXmpp::SendResult>>(QFutureInterfaceBase::Started)),
- m_isXmppStanza(nonza.isXmppStanza())
+ : QXmppPacket(nonza, std::make_shared<QFutureInterface<QXmpp::SendResult>>())
{
- QXmlStreamWriter xmlStream(&m_data);
- nonza.toXml(&xmlStream);
+}
+
+QXmppPacket::QXmppPacket(const QXmppNonza &nonza, std::shared_ptr<QFutureInterface<QXmpp::SendResult>> interface)
+ : QXmppPacket(serialize(nonza), nonza.isXmppStanza(), std::move(interface))
+{
+}
+
+QXmppPacket::QXmppPacket(const QByteArray &data, bool isXmppStanza, std::shared_ptr<QFutureInterface<QXmpp::SendResult>> interface)
+ : m_interface(std::move(interface)),
+ m_data(data),
+ m_isXmppStanza(isXmppStanza)
+{
+ m_interface->reportStarted();
}
QByteArray QXmppPacket::data() const