Esempio n. 1
0
std::string FormSerializer::serializePayload(std::shared_ptr<Form> form)  const {
    if (!form) {
        return "";
    }

    std::shared_ptr<XMLElement> formElement(new XMLElement("x", "jabber:x:data"));
    std::string type;
    switch (form->getType()) {
        case Form::FormType: type = "form"; break;
        case Form::SubmitType: type = "submit"; break;
        case Form::CancelType: type = "cancel"; break;
        case Form::ResultType: type = "result"; break;
    }
    formElement->setAttribute("type", type);
    if (!form->getTitle().empty()) {
        multiLineify(form->getTitle(), "title", formElement);
    }
    if (!form->getInstructions().empty()) {
        multiLineify(form->getInstructions(), "instructions", formElement);
    }
    for (const auto& page : form->getPages()) {
        formElement->addNode(pageToXML(page));
    }
    for (const auto& field : form->getFields()) {
        formElement->addNode(fieldToXML(field, true));
    }
    if (!form->getReportedFields().empty()) {
        std::shared_ptr<XMLElement> reportedElement(new XMLElement("reported"));
        for (const auto& field : form->getReportedFields()) {
            reportedElement->addNode(fieldToXML(field, true));
        }
        formElement->addNode(reportedElement);
    }

    for (const auto& item : form->getItems()) {
        std::shared_ptr<XMLElement> itemElement(new XMLElement("item"));
        for (const auto& field : item) {
            itemElement->addNode(fieldToXML(field, false));
        }
        formElement->addNode(itemElement);
    }

    for (const auto& text : form->getTextElements()) {
        formElement->addNode(textToXML(text));
    }

    for (const auto& field : fields_) {
        formElement->addNode(fieldToXML(field,true));
    }

    return formElement->serialize();
}
std::string DiscoItemsSerializer::serializePayload(boost::shared_ptr<DiscoItems> discoItems)  const {
	XMLElement queryElement("query", "http://jabber.org/protocol/disco#items");
	if (!discoItems->getNode().empty()) {
		queryElement.setAttribute("node", discoItems->getNode());
	}
	foreach(const DiscoItems::Item& item, discoItems->getItems()) {
		boost::shared_ptr<XMLElement> itemElement(new XMLElement("item"));
		itemElement->setAttribute("name", item.getName());
		itemElement->setAttribute("jid", item.getJID());
		if (!item.getNode().empty()) {
			itemElement->setAttribute("node", item.getNode());
		}
		queryElement.addNode(itemElement);
	}
	return queryElement.serialize();
}
std::string SearchPayloadSerializer::serializePayload(boost::shared_ptr<SearchPayload> searchPayload)	const {
    XMLElement searchElement("query", "jabber:iq:search");

    if (searchPayload->getInstructions()) {
        searchElement.addNode(XMLElement::ref(new XMLElement("instructions", "", *searchPayload->getInstructions())));
    }

    if (searchPayload->getNick()) {
        searchElement.addNode(XMLElement::ref(new XMLElement("nick", "", *searchPayload->getNick())));
    }

    if (searchPayload->getFirst()) {
        searchElement.addNode(XMLElement::ref(new XMLElement("first", "", *searchPayload->getFirst())));
    }

    if (searchPayload->getLast()) {
        searchElement.addNode(XMLElement::ref(new XMLElement("last", "", *searchPayload->getLast())));
    }

    if (searchPayload->getEMail()) {
        searchElement.addNode(XMLElement::ref(new XMLElement("email", "", *searchPayload->getEMail())));
    }

    foreach(const SearchPayload::Item& item, searchPayload->getItems()) {
        XMLElement::ref itemElement(new XMLElement("item"));
        itemElement->setAttribute("jid", item.jid);
        itemElement->addNode(XMLElement::ref(new XMLElement("first", "", item.first)));
        itemElement->addNode(XMLElement::ref(new XMLElement("last", "", item.last)));
        itemElement->addNode(XMLElement::ref(new XMLElement("nick", "", item.nick)));
        itemElement->addNode(XMLElement::ref(new XMLElement("email", "", item.email)));

        searchElement.addNode(itemElement);
    }

    if (Form::ref form = searchPayload->getForm()) {
        searchElement.addNode(boost::make_shared<XMLRawTextNode>(FormSerializer().serialize(form)));
    }

    return searchElement.serialize();
}
Esempio n. 4
0
std::string RosterSerializer::serializePayload(std::shared_ptr<RosterPayload> roster)  const {
    XMLElement queryElement("query", "jabber:iq:roster");
    if (roster->getVersion()) {
        queryElement.setAttribute("ver", *roster->getVersion());
    }
    foreach(const RosterItemPayload& item, roster->getItems()) {
        std::shared_ptr<XMLElement> itemElement(new XMLElement("item"));
        itemElement->setAttribute("jid", item.getJID());
        itemElement->setAttribute("name", item.getName());

        switch (item.getSubscription()) {
            case RosterItemPayload::To: itemElement->setAttribute("subscription", "to"); break;
            case RosterItemPayload::From: itemElement->setAttribute("subscription", "from"); break;
            case RosterItemPayload::Both: itemElement->setAttribute("subscription", "both"); break;
            case RosterItemPayload::Remove: itemElement->setAttribute("subscription", "remove"); break;
            case RosterItemPayload::None: itemElement->setAttribute("subscription", "none"); break;
        }

        if (item.getSubscriptionRequested()) {
            itemElement->setAttribute("ask", "subscribe");
        }

        foreach(const std::string& group, item.getGroups()) {
            std::shared_ptr<XMLElement> groupElement(new XMLElement("group"));
            groupElement->addNode(std::make_shared<XMLTextNode>(group));
            itemElement->addNode(groupElement);
        }

        if (!item.getUnknownContent().empty()) {
            itemElement->addNode(std::make_shared<XMLRawTextNode>(item.getUnknownContent()));
        }


        queryElement.addNode(itemElement);
    }

    return queryElement.serialize();
}
Esempio n. 5
0
/*! \brief queries an item element
    \param itemIndex Index of the item in the feed
    \param element Element of intrest
    \return If no such element exist returns empty QString.
    \sa itemElements(), isError()
*/
QString RSSParser::itemElement(int itemIndex,RSSElement element) {
    QString enumString = enumToString(element);
    return itemElement(itemIndex,enumString);
    //return executeQuery(KXqItemQuery.arg(itemIndex+1).arg(enumString));
}