summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swiften/Serializer/PayloadSerializers/StorageSerializer.cpp')
-rw-r--r--Swiften/Serializer/PayloadSerializers/StorageSerializer.cpp36
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();
+}
+
+}