diff options
Diffstat (limited to 'Swiften/Serializer/PayloadSerializers/StorageSerializer.cpp')
-rw-r--r-- | Swiften/Serializer/PayloadSerializers/StorageSerializer.cpp | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/Swiften/Serializer/PayloadSerializers/StorageSerializer.cpp b/Swiften/Serializer/PayloadSerializers/StorageSerializer.cpp new file mode 100644 index 0000000..4268381 --- /dev/null +++ b/Swiften/Serializer/PayloadSerializers/StorageSerializer.cpp @@ -0,0 +1,36 @@ +#include "Swiften/Serializer/PayloadSerializers/StorageSerializer.h" + +#include <boost/shared_ptr.hpp> + +#include "Swiften/Base/foreach.h" +#include "Swiften/Serializer/XML/XMLElement.h" +#include "Swiften/Serializer/XML/XMLTextNode.h" + +namespace Swift { + +StorageSerializer::StorageSerializer() : GenericPayloadSerializer<Storage>() { +} + +String StorageSerializer::serializePayload(boost::shared_ptr<Storage> storage) const { + XMLElement storageElement("storage", "storage:bookmarks"); + foreach(const Storage::Conference& conference, storage->getConferences()) { + boost::shared_ptr<XMLElement> conferenceElement(new XMLElement("conference")); + conferenceElement->setAttribute("name", conference.name); + conferenceElement->setAttribute("jid", conference.jid); + conferenceElement->setAttribute("autojoin", conference.autoJoin ? "1" : "0"); + if (!conference.nick.isEmpty()) { + boost::shared_ptr<XMLElement> nickElement(new XMLElement("nick")); + nickElement->addNode(boost::shared_ptr<XMLTextNode>(new XMLTextNode(conference.nick))); + conferenceElement->addNode(nickElement); + } + if (!conference.password.isEmpty()) { + boost::shared_ptr<XMLElement> passwordElement(new XMLElement("password")); + passwordElement->addNode(boost::shared_ptr<XMLTextNode>(new XMLTextNode(conference.password))); + conferenceElement->addNode(passwordElement); + } + storageElement.addNode(conferenceElement); + } + return storageElement.serialize(); +} + +} |