diff options
Diffstat (limited to 'Swiften/Parser/PayloadParsers/MAMResultParser.cpp')
-rw-r--r-- | Swiften/Parser/PayloadParsers/MAMResultParser.cpp | 69 |
1 files changed, 35 insertions, 34 deletions
diff --git a/Swiften/Parser/PayloadParsers/MAMResultParser.cpp b/Swiften/Parser/PayloadParsers/MAMResultParser.cpp index 41a7336..b810b87 100644 --- a/Swiften/Parser/PayloadParsers/MAMResultParser.cpp +++ b/Swiften/Parser/PayloadParsers/MAMResultParser.cpp @@ -1,15 +1,16 @@ /* - * Copyright (c) 2014 Isode Limited. + * Copyright (c) 2014-2016 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ +#include <Swiften/Parser/PayloadParsers/MAMResultParser.h> + #include <boost/lexical_cast.hpp> #include <boost/optional.hpp> #include <Swiften/Base/DateTime.h> #include <Swiften/Parser/PayloadParsers/ForwardedParser.h> -#include <Swiften/Parser/PayloadParsers/MAMResultParser.h> using namespace Swift; @@ -17,42 +18,42 @@ MAMResultParser::MAMResultParser(PayloadParserFactoryCollection* factories) : fa } void MAMResultParser::handleStartElement(const std::string& element, const std::string& ns, const AttributeMap& attributes) { - if (level_ == TopLevel) { - boost::optional<std::string> attributeValue; - if ((attributeValue = attributes.getAttributeValue("id"))) { - getPayloadInternal()->setID(*attributeValue); - } - if ((attributeValue = attributes.getAttributeValue("queryid"))) { - getPayloadInternal()->setQueryID(*attributeValue); - } - } else if (level_ == PayloadLevel) { - if (element == "forwarded" && ns == "urn:xmpp:forward:0") { - payloadParser_ = boost::make_shared<ForwardedParser>(factories_); - } - } - - if (payloadParser_) { - /* parsing a nested payload */ - payloadParser_->handleStartElement(element, ns, attributes); - } - - ++level_; + if (level_ == TopLevel) { + boost::optional<std::string> attributeValue; + if ((attributeValue = attributes.getAttributeValue("id"))) { + getPayloadInternal()->setID(*attributeValue); + } + if ((attributeValue = attributes.getAttributeValue("queryid"))) { + getPayloadInternal()->setQueryID(*attributeValue); + } + } else if (level_ == PayloadLevel) { + if (element == "forwarded" && ns == "urn:xmpp:forward:0") { + payloadParser_ = std::make_shared<ForwardedParser>(factories_); + } + } + + if (payloadParser_) { + /* parsing a nested payload */ + payloadParser_->handleStartElement(element, ns, attributes); + } + + ++level_; } void MAMResultParser::handleEndElement(const std::string& element, const std::string& ns) { - --level_; - if (payloadParser_ && level_ >= PayloadLevel) { - payloadParser_->handleEndElement(element, ns); - } - if (payloadParser_ && level_ == PayloadLevel) { - /* done parsing nested stanza */ - getPayloadInternal()->setPayload(boost::dynamic_pointer_cast<Forwarded>(payloadParser_->getPayload())); - payloadParser_.reset(); - } + --level_; + if (payloadParser_ && level_ >= PayloadLevel) { + payloadParser_->handleEndElement(element, ns); + } + if (payloadParser_ && level_ == PayloadLevel) { + /* done parsing nested stanza */ + getPayloadInternal()->setPayload(std::dynamic_pointer_cast<Forwarded>(payloadParser_->getPayload())); + payloadParser_.reset(); + } } void MAMResultParser::handleCharacterData(const std::string& data) { - if (payloadParser_) { - payloadParser_->handleCharacterData(data); - } + if (payloadParser_) { + payloadParser_->handleCharacterData(data); + } } |