summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Swiften/Elements/VCard.h16
-rw-r--r--Swiften/Parser/PayloadParsers/VCardParser.cpp12
-rw-r--r--Swiften/Serializer/PayloadSerializers/VCardSerializer.cpp26
3 files changed, 54 insertions, 0 deletions
diff --git a/Swiften/Elements/VCard.h b/Swiften/Elements/VCard.h
index f389ba7..a42d7e3 100644
--- a/Swiften/Elements/VCard.h
+++ b/Swiften/Elements/VCard.h
@@ -9,6 +9,18 @@ namespace Swift {
public:
VCard() {}
+ void setFullName(const String& fullName) { fullName_ = fullName; }
+ const String& getFullName() const { return fullName_; }
+
+ void setFamilyName(const String& familyName) { familyName_ = familyName; }
+ const String& getFamilyName() const { return familyName_; }
+
+ void setGivenName(const String& givenName) { givenName_ = givenName; }
+ const String& getGivenName() const { return givenName_; }
+
+ void setEMail(const String& email) { email_ = email; }
+ const String& getEMail() const { return email_; }
+
void setNickname(const String& nick) { nick_ = nick; }
const String& getNickname() const { return nick_; }
@@ -19,6 +31,10 @@ namespace Swift {
const String& getPhotoType() { return photoType_; }
private:
+ String fullName_;
+ String familyName_;
+ String givenName_;
+ String email_;
ByteArray photo_;
String photoType_;
String nick_;
diff --git a/Swiften/Parser/PayloadParsers/VCardParser.cpp b/Swiften/Parser/PayloadParsers/VCardParser.cpp
index b7845a7..87416ab 100644
--- a/Swiften/Parser/PayloadParsers/VCardParser.cpp
+++ b/Swiften/Parser/PayloadParsers/VCardParser.cpp
@@ -23,6 +23,18 @@ void VCardParser::handleEndElement(const String&, const String&) {
else if (elementHierarchy == "/vCard/NICKNAME") {
getPayloadInternal()->setNickname(currentText_);
}
+ else if (elementHierarchy == "/vCard/FN") {
+ getPayloadInternal()->setFullName(currentText_);
+ }
+ else if (elementHierarchy == "/vCard/N/FAMILY") {
+ getPayloadInternal()->setFamilyName(currentText_);
+ }
+ else if (elementHierarchy == "/vCard/N/GIVEN") {
+ getPayloadInternal()->setGivenName(currentText_);
+ }
+ else if (elementHierarchy == "/vCard/EMAIL/USERID") {
+ getPayloadInternal()->setEMail(currentText_);
+ }
elementStack_.pop_back();
}
diff --git a/Swiften/Serializer/PayloadSerializers/VCardSerializer.cpp b/Swiften/Serializer/PayloadSerializers/VCardSerializer.cpp
index 26e1623..fbb0274 100644
--- a/Swiften/Serializer/PayloadSerializers/VCardSerializer.cpp
+++ b/Swiften/Serializer/PayloadSerializers/VCardSerializer.cpp
@@ -12,6 +12,32 @@ VCardSerializer::VCardSerializer() : GenericPayloadSerializer<VCard>() {
String VCardSerializer::serializePayload(boost::shared_ptr<VCard> vcard) const {
XMLElement queryElement("vCard", "vcard-temp");
+ 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()) {
+ boost::shared_ptr<XMLElement> nameElement(new XMLElement("N"));
+ if (!vcard->getFamilyName().isEmpty()) {
+ boost::shared_ptr<XMLElement> familyNameElement(new XMLElement("FAMILY"));
+ familyNameElement->addNode(boost::shared_ptr<XMLTextNode>(new XMLTextNode(vcard->getFamilyName())));
+ nameElement->addNode(familyNameElement);
+ }
+ if (!vcard->getGivenName().isEmpty()) {
+ boost::shared_ptr<XMLElement> givenNameElement(new XMLElement("GIVEN"));
+ givenNameElement->addNode(boost::shared_ptr<XMLTextNode>(new XMLTextNode(vcard->getGivenName())));
+ nameElement->addNode(givenNameElement);
+ }
+ queryElement.addNode(nameElement);
+ }
+ if (!vcard->getEMail().isEmpty()) {
+ 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())));
+ emailElement->addNode(userIDElement);
+ queryElement.addNode(emailElement);
+ }
if (!vcard->getNickname().isEmpty()) {
boost::shared_ptr<XMLElement> nickElement(new XMLElement("NICKNAME"));
nickElement->addNode(boost::shared_ptr<XMLTextNode>(new XMLTextNode(vcard->getNickname())));