diff options
Diffstat (limited to 'Swiften/Parser/PayloadParsers/SecurityLabelsCatalogParser.cpp')
-rw-r--r-- | Swiften/Parser/PayloadParsers/SecurityLabelsCatalogParser.cpp | 20 |
1 files changed, 16 insertions, 4 deletions
diff --git a/Swiften/Parser/PayloadParsers/SecurityLabelsCatalogParser.cpp b/Swiften/Parser/PayloadParsers/SecurityLabelsCatalogParser.cpp index 1f2a6bc..a08cd11 100644 --- a/Swiften/Parser/PayloadParsers/SecurityLabelsCatalogParser.cpp +++ b/Swiften/Parser/PayloadParsers/SecurityLabelsCatalogParser.cpp @@ -15,6 +15,7 @@ SecurityLabelsCatalogParser::SecurityLabelsCatalogParser() : level_(TopLevel), l } SecurityLabelsCatalogParser::~SecurityLabelsCatalogParser() { + //delete currentLabel_; delete labelParserFactory_; } @@ -25,6 +26,11 @@ void SecurityLabelsCatalogParser::handleStartElement(const std::string& element, getPayloadInternal()->setName(attributes.getAttribute("name")); getPayloadInternal()->setDescription(attributes.getAttribute("desc")); } + else if (level_ == ItemLevel && element == "item" && ns == "urn:xmpp:sec-label:catalog:2") { + currentItem_ = boost::shared_ptr<SecurityLabelsCatalog::Item>(new SecurityLabelsCatalog::Item()); + currentItem_->setSelector(attributes.getAttribute("selector")); + currentItem_->setIsDefault(attributes.getBoolAttribute("default", false)); + } else if (level_ == LabelLevel) { assert(!labelParser_); if (labelParserFactory_->canParse(element, ns, attributes)) { @@ -42,13 +48,19 @@ void SecurityLabelsCatalogParser::handleEndElement(const std::string& element, c if (labelParser_) { labelParser_->handleEndElement(element, ns); } - if (level_ == LabelLevel && labelParser_) { - SecurityLabel* label = dynamic_cast<SecurityLabel*>(labelParser_->getPayload().get()); - assert(label); - getPayloadInternal()->addLabel(SecurityLabel(*label)); + if (level_ == LabelLevel && labelParser_ && currentItem_) { + boost::shared_ptr<SecurityLabel> currentLabel = labelParser_->getLabelPayload(); + assert(currentLabel); + currentItem_->setLabel(currentLabel); delete labelParser_; labelParser_ = 0; } + else if (level_ == ItemLevel && element == "item" && ns == "urn:xmpp:sec-label:catalog:2") { + if (currentItem_) { + getPayloadInternal()->addItem(SecurityLabelsCatalog::Item(*currentItem_)); + currentItem_.reset(); + } + } --level_; } |