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
@@ -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
15namespace Swift { 17namespace Swift {
16 18
17VCardSerializer::VCardSerializer() : GenericPayloadSerializer<VCard>() { 19VCardSerializer::VCardSerializer() : GenericPayloadSerializer<VCard>() {
18} 20}
19 21
20String VCardSerializer::serializePayload(boost::shared_ptr<VCard> vcard) const { 22String 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}