diff options
| author | Remko Tronçon <git@el-tramo.be> | 2010-09-06 09:19:02 (GMT) |
|---|---|---|
| committer | Remko Tronçon <git@el-tramo.be> | 2010-09-06 11:06:49 (GMT) |
| commit | 1e2c3461458f4274d539daf51507ce81d845cce0 (patch) | |
| tree | 9507863b011691f22212d5cc76d484dff1343d36 /Swiften/Serializer/PayloadSerializers/VCardSerializer.cpp | |
| parent | e8dbe2e2b78cd5e4a66e2e580e12d05b2e69b120 (diff) | |
| download | swift-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.cpp | 46 |
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 | |||
| @@ -8,25 +8,32 @@ | |||
| 8 | 8 | ||
| 9 | #include <boost/shared_ptr.hpp> | 9 | #include <boost/shared_ptr.hpp> |
| 10 | 10 | ||
| 11 | #include "Swiften/Serializer/XML/XMLElement.h" | 11 | #include "Swiften/Serializer/XML/XMLElement.h" |
| 12 | #include "Swiften/Serializer/XML/XMLTextNode.h" | 12 | #include "Swiften/Serializer/XML/XMLTextNode.h" |
| 13 | #include "Swiften/Serializer/XML/XMLRawTextNode.h" | ||
| 13 | #include "Swiften/StringCodecs/Hexify.h" | 14 | #include "Swiften/StringCodecs/Hexify.h" |
| 15 | #include "Swiften/Base/foreach.h" | ||
| 14 | 16 | ||
| 15 | namespace Swift { | 17 | namespace Swift { |
| 16 | 18 | ||
| 17 | VCardSerializer::VCardSerializer() : GenericPayloadSerializer<VCard>() { | 19 | VCardSerializer::VCardSerializer() : GenericPayloadSerializer<VCard>() { |
| 18 | } | 20 | } |
| 19 | 21 | ||
| 20 | String VCardSerializer::serializePayload(boost::shared_ptr<VCard> vcard) const { | 22 | String VCardSerializer::serializePayload(boost::shared_ptr<VCard> vcard) const { |
| 21 | XMLElement queryElement("vCard", "vcard-temp"); | 23 | XMLElement queryElement("vCard", "vcard-temp"); |
| 24 | if (!vcard->getVersion().isEmpty()) { | ||
| 25 | boost::shared_ptr<XMLElement> versionElement(new XMLElement("VERSION")); | ||
| 26 | versionElement->addNode(boost::shared_ptr<XMLTextNode>(new XMLTextNode(vcard->getVersion()))); | ||
| 27 | queryElement.addNode(versionElement); | ||
| 28 | } | ||
| 22 | if (!vcard->getFullName().isEmpty()) { | 29 | if (!vcard->getFullName().isEmpty()) { |
| 23 | boost::shared_ptr<XMLElement> fullNameElement(new XMLElement("FN")); | 30 | boost::shared_ptr<XMLElement> fullNameElement(new XMLElement("FN")); |
| 24 | fullNameElement->addNode(boost::shared_ptr<XMLTextNode>(new XMLTextNode(vcard->getFullName()))); | 31 | fullNameElement->addNode(boost::shared_ptr<XMLTextNode>(new XMLTextNode(vcard->getFullName()))); |
| 25 | queryElement.addNode(fullNameElement); | 32 | queryElement.addNode(fullNameElement); |
| 26 | } | 33 | } |
| 27 | if (!vcard->getGivenName().isEmpty() || !vcard->getFamilyName().isEmpty()) { | 34 | if (!vcard->getGivenName().isEmpty() || !vcard->getFamilyName().isEmpty() || !vcard->getMiddleName().isEmpty() || !vcard->getPrefix().isEmpty() || !vcard->getSuffix().isEmpty()) { |
| 28 | boost::shared_ptr<XMLElement> nameElement(new XMLElement("N")); | 35 | boost::shared_ptr<XMLElement> nameElement(new XMLElement("N")); |
| 29 | if (!vcard->getFamilyName().isEmpty()) { | 36 | if (!vcard->getFamilyName().isEmpty()) { |
| 30 | boost::shared_ptr<XMLElement> familyNameElement(new XMLElement("FAMILY")); | 37 | boost::shared_ptr<XMLElement> familyNameElement(new XMLElement("FAMILY")); |
| 31 | familyNameElement->addNode(boost::shared_ptr<XMLTextNode>(new XMLTextNode(vcard->getFamilyName()))); | 38 | familyNameElement->addNode(boost::shared_ptr<XMLTextNode>(new XMLTextNode(vcard->getFamilyName()))); |
| 32 | nameElement->addNode(familyNameElement); | 39 | nameElement->addNode(familyNameElement); |
| @@ -34,17 +41,47 @@ String VCardSerializer::serializePayload(boost::shared_ptr<VCard> vcard) const | |||
| 34 | if (!vcard->getGivenName().isEmpty()) { | 41 | if (!vcard->getGivenName().isEmpty()) { |
| 35 | boost::shared_ptr<XMLElement> givenNameElement(new XMLElement("GIVEN")); | 42 | boost::shared_ptr<XMLElement> givenNameElement(new XMLElement("GIVEN")); |
| 36 | givenNameElement->addNode(boost::shared_ptr<XMLTextNode>(new XMLTextNode(vcard->getGivenName()))); | 43 | givenNameElement->addNode(boost::shared_ptr<XMLTextNode>(new XMLTextNode(vcard->getGivenName()))); |
| 37 | nameElement->addNode(givenNameElement); | 44 | nameElement->addNode(givenNameElement); |
| 38 | } | 45 | } |
| 46 | if (!vcard->getMiddleName().isEmpty()) { | ||
| 47 | boost::shared_ptr<XMLElement> middleNameElement(new XMLElement("MIDDLE")); | ||
| 48 | middleNameElement->addNode(boost::shared_ptr<XMLTextNode>(new XMLTextNode(vcard->getMiddleName()))); | ||
| 49 | nameElement->addNode(middleNameElement); | ||
| 50 | } | ||
| 51 | if (!vcard->getPrefix().isEmpty()) { | ||
| 52 | boost::shared_ptr<XMLElement> prefixElement(new XMLElement("PREFIX")); | ||
| 53 | prefixElement->addNode(boost::shared_ptr<XMLTextNode>(new XMLTextNode(vcard->getPrefix()))); | ||
| 54 | nameElement->addNode(prefixElement); | ||
| 55 | } | ||
| 56 | if (!vcard->getSuffix().isEmpty()) { | ||
| 57 | boost::shared_ptr<XMLElement> suffixElement(new XMLElement("SUFFIX")); | ||
| 58 | suffixElement->addNode(boost::shared_ptr<XMLTextNode>(new XMLTextNode(vcard->getSuffix()))); | ||
| 59 | nameElement->addNode(suffixElement); | ||
| 60 | } | ||
| 39 | queryElement.addNode(nameElement); | 61 | queryElement.addNode(nameElement); |
| 40 | } | 62 | } |
| 41 | if (!vcard->getEMail().isEmpty()) { | 63 | foreach(const VCard::EMailAddress& emailAddress, vcard->getEMailAddresses()) { |
| 42 | boost::shared_ptr<XMLElement> emailElement(new XMLElement("EMAIL")); | 64 | boost::shared_ptr<XMLElement> emailElement(new XMLElement("EMAIL")); |
| 43 | boost::shared_ptr<XMLElement> userIDElement(new XMLElement("USERID")); | 65 | boost::shared_ptr<XMLElement> userIDElement(new XMLElement("USERID")); |
| 44 | userIDElement->addNode(boost::shared_ptr<XMLTextNode>(new XMLTextNode(vcard->getEMail()))); | 66 | userIDElement->addNode(boost::shared_ptr<XMLTextNode>(new XMLTextNode(emailAddress.address))); |
| 45 | emailElement->addNode(userIDElement); | 67 | emailElement->addNode(userIDElement); |
| 68 | if (emailAddress.isHome) { | ||
| 69 | emailElement->addNode(boost::shared_ptr<XMLElement>(new XMLElement("HOME"))); | ||
| 70 | } | ||
| 71 | if (emailAddress.isWork) { | ||
| 72 | emailElement->addNode(boost::shared_ptr<XMLElement>(new XMLElement("WORK"))); | ||
| 73 | } | ||
| 74 | if (emailAddress.isInternet) { | ||
| 75 | emailElement->addNode(boost::shared_ptr<XMLElement>(new XMLElement("INTERNET"))); | ||
| 76 | } | ||
| 77 | if (emailAddress.isPreferred) { | ||
| 78 | emailElement->addNode(boost::shared_ptr<XMLElement>(new XMLElement("PREF"))); | ||
| 79 | } | ||
| 80 | if (emailAddress.isX400) { | ||
| 81 | emailElement->addNode(boost::shared_ptr<XMLElement>(new XMLElement("X400"))); | ||
| 82 | } | ||
| 46 | queryElement.addNode(emailElement); | 83 | queryElement.addNode(emailElement); |
| 47 | } | 84 | } |
| 48 | if (!vcard->getNickname().isEmpty()) { | 85 | if (!vcard->getNickname().isEmpty()) { |
| 49 | boost::shared_ptr<XMLElement> nickElement(new XMLElement("NICKNAME")); | 86 | boost::shared_ptr<XMLElement> nickElement(new XMLElement("NICKNAME")); |
| 50 | nickElement->addNode(boost::shared_ptr<XMLTextNode>(new XMLTextNode(vcard->getNickname()))); | 87 | nickElement->addNode(boost::shared_ptr<XMLTextNode>(new XMLTextNode(vcard->getNickname()))); |
| @@ -62,9 +99,12 @@ String VCardSerializer::serializePayload(boost::shared_ptr<VCard> vcard) const | |||
| 62 | binvalElement->addNode(XMLTextNode::ref(new XMLTextNode(Hexify::hexify(vcard->getPhoto())))); | 99 | binvalElement->addNode(XMLTextNode::ref(new XMLTextNode(Hexify::hexify(vcard->getPhoto())))); |
| 63 | photoElement->addNode(binvalElement); | 100 | photoElement->addNode(binvalElement); |
| 64 | } | 101 | } |
| 65 | queryElement.addNode(photoElement); | 102 | queryElement.addNode(photoElement); |
| 66 | } | 103 | } |
| 104 | if (!vcard->getUnknownContent().isEmpty()) { | ||
| 105 | queryElement.addNode(boost::shared_ptr<XMLRawTextNode>(new XMLRawTextNode(vcard->getUnknownContent()))); | ||
| 106 | } | ||
| 67 | return queryElement.serialize(); | 107 | return queryElement.serialize(); |
| 68 | } | 108 | } |
| 69 | 109 | ||
| 70 | } | 110 | } |
Swift