summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRemko Tronçon <git@el-tramo.be>2010-09-06 09:19:02 (GMT)
committerRemko Tronçon <git@el-tramo.be>2010-09-06 11:06:49 (GMT)
commit1e2c3461458f4274d539daf51507ce81d845cce0 (patch)
tree9507863b011691f22212d5cc76d484dff1343d36 /Swiften/Serializer/PayloadSerializers/VCardSerializer.cpp
parente8dbe2e2b78cd5e4a66e2e580e12d05b2e69b120 (diff)
downloadswift-1e2c3461458f4274d539daf51507ce81d845cce0.zip
swift-1e2c3461458f4274d539daf51507ce81d845cce0.tar.bz2
Partial VCard support without losing unknown data.
Diffstat (limited to 'Swiften/Serializer/PayloadSerializers/VCardSerializer.cpp')
-rw-r--r--Swiften/Serializer/PayloadSerializers/VCardSerializer.cpp46
1 files changed, 43 insertions, 3 deletions
diff --git a/Swiften/Serializer/PayloadSerializers/VCardSerializer.cpp b/Swiften/Serializer/PayloadSerializers/VCardSerializer.cpp
index 8975818..5953ef6 100644
--- a/Swiften/Serializer/PayloadSerializers/VCardSerializer.cpp
+++ b/Swiften/Serializer/PayloadSerializers/VCardSerializer.cpp
@@ -10,7 +10,9 @@
#include "Swiften/Serializer/XML/XMLElement.h"
#include "Swiften/Serializer/XML/XMLTextNode.h"
+#include "Swiften/Serializer/XML/XMLRawTextNode.h"
#include "Swiften/StringCodecs/Hexify.h"
+#include "Swiften/Base/foreach.h"
namespace Swift {
@@ -19,12 +21,17 @@ VCardSerializer::VCardSerializer() : GenericPayloadSerializer<VCard>() {
String VCardSerializer::serializePayload(boost::shared_ptr<VCard> vcard) const {
XMLElement queryElement("vCard", "vcard-temp");
+ if (!vcard->getVersion().isEmpty()) {
+ boost::shared_ptr<XMLElement> versionElement(new XMLElement("VERSION"));
+ versionElement->addNode(boost::shared_ptr<XMLTextNode>(new XMLTextNode(vcard->getVersion())));
+ queryElement.addNode(versionElement);
+ }
if (!vcard->getFullName().isEmpty()) {
boost::shared_ptr<XMLElement> fullNameElement(new XMLElement("FN"));
fullNameElement->addNode(boost::shared_ptr<XMLTextNode>(new XMLTextNode(vcard->getFullName())));
queryElement.addNode(fullNameElement);
}
- if (!vcard->getGivenName().isEmpty() || !vcard->getFamilyName().isEmpty()) {
+ if (!vcard->getGivenName().isEmpty() || !vcard->getFamilyName().isEmpty() || !vcard->getMiddleName().isEmpty() || !vcard->getPrefix().isEmpty() || !vcard->getSuffix().isEmpty()) {
boost::shared_ptr<XMLElement> nameElement(new XMLElement("N"));
if (!vcard->getFamilyName().isEmpty()) {
boost::shared_ptr<XMLElement> familyNameElement(new XMLElement("FAMILY"));
@@ -36,13 +43,43 @@ String VCardSerializer::serializePayload(boost::shared_ptr<VCard> vcard) const
givenNameElement->addNode(boost::shared_ptr<XMLTextNode>(new XMLTextNode(vcard->getGivenName())));
nameElement->addNode(givenNameElement);
}
+ if (!vcard->getMiddleName().isEmpty()) {
+ boost::shared_ptr<XMLElement> middleNameElement(new XMLElement("MIDDLE"));
+ middleNameElement->addNode(boost::shared_ptr<XMLTextNode>(new XMLTextNode(vcard->getMiddleName())));
+ nameElement->addNode(middleNameElement);
+ }
+ if (!vcard->getPrefix().isEmpty()) {
+ boost::shared_ptr<XMLElement> prefixElement(new XMLElement("PREFIX"));
+ prefixElement->addNode(boost::shared_ptr<XMLTextNode>(new XMLTextNode(vcard->getPrefix())));
+ nameElement->addNode(prefixElement);
+ }
+ if (!vcard->getSuffix().isEmpty()) {
+ boost::shared_ptr<XMLElement> suffixElement(new XMLElement("SUFFIX"));
+ suffixElement->addNode(boost::shared_ptr<XMLTextNode>(new XMLTextNode(vcard->getSuffix())));
+ nameElement->addNode(suffixElement);
+ }
queryElement.addNode(nameElement);
}
- if (!vcard->getEMail().isEmpty()) {
+ foreach(const VCard::EMailAddress& emailAddress, vcard->getEMailAddresses()) {
boost::shared_ptr<XMLElement> emailElement(new XMLElement("EMAIL"));
boost::shared_ptr<XMLElement> userIDElement(new XMLElement("USERID"));
- userIDElement->addNode(boost::shared_ptr<XMLTextNode>(new XMLTextNode(vcard->getEMail())));
+ userIDElement->addNode(boost::shared_ptr<XMLTextNode>(new XMLTextNode(emailAddress.address)));
emailElement->addNode(userIDElement);
+ if (emailAddress.isHome) {
+ emailElement->addNode(boost::shared_ptr<XMLElement>(new XMLElement("HOME")));
+ }
+ if (emailAddress.isWork) {
+ emailElement->addNode(boost::shared_ptr<XMLElement>(new XMLElement("WORK")));
+ }
+ if (emailAddress.isInternet) {
+ emailElement->addNode(boost::shared_ptr<XMLElement>(new XMLElement("INTERNET")));
+ }
+ if (emailAddress.isPreferred) {
+ emailElement->addNode(boost::shared_ptr<XMLElement>(new XMLElement("PREF")));
+ }
+ if (emailAddress.isX400) {
+ emailElement->addNode(boost::shared_ptr<XMLElement>(new XMLElement("X400")));
+ }
queryElement.addNode(emailElement);
}
if (!vcard->getNickname().isEmpty()) {
@@ -64,6 +101,9 @@ String VCardSerializer::serializePayload(boost::shared_ptr<VCard> vcard) const
}
queryElement.addNode(photoElement);
}
+ if (!vcard->getUnknownContent().isEmpty()) {
+ queryElement.addNode(boost::shared_ptr<XMLRawTextNode>(new XMLRawTextNode(vcard->getUnknownContent())));
+ }
return queryElement.serialize();
}