/* * Created by victoria on 2021-05-13. */ #include "conversations.h" #include "qomemo/device.h" #include "shared/qxmppfactories.h" #include using namespace QXmpp::Omemo; using namespace QXmpp::Factories; QXmppElement Variant::Conversations::deviceToXml(const Device &device) { auto result = createElement("device"); result.setAttribute("id", QString::number(device.id)); return result; } Device Variant::Conversations::deviceFromXml(const QXmppElement &xml) { Device result{}; if (!elementMatches(xml, "device")) return result; result.id = xml.attribute("id").toInt(); return result; } QXmppElement Variant::Conversations::deviceListToXml(const DeviceList &deviceList) { auto element = createElement("list", "eu.siacs.conversations.axolotl"); for (const auto &device : deviceList.devices) { element.appendChild(deviceToXml(device)); } return element; } DeviceList Variant::Conversations::deviceListFromXml(const QXmppElement &xml) { DeviceList result{}; if (!elementMatches(xml, "list", "eu.siacs.conversations.axolotl")) return result; auto deviceElement = xml.firstChildElement("device"); while (!deviceElement.isNull()) { result.devices.push_back(deviceFromXml(deviceElement)); deviceElement = deviceElement.nextSiblingElement("device"); } return result; } QXmppIq Variant::Conversations::deviceListSetIq(const DeviceList &deviceList) { QXmppIq iq{}; iq.setType(QXmppIq::Set); auto item = createElement("item"); item.appendChild(deviceListToXml(deviceList)); auto publish = createElement("publish"); publish.setAttribute("node", "eu.siacs.conversations.axolotl.devicelist"); publish.appendChild(item); auto pubSub = createElement("pubsub", "http://jabber.org/protocol/pubsub"); pubSub.appendChild(publish); pubSub.appendChild(createOpenPublishOptions()); iq.extensions().push_back(pubSub); return iq; }