From 97ccbb55df2af9268f37e0bad7109d958acf6d19 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Remko=20Tron=C3=A7on?= Date: Tue, 21 Jul 2009 15:07:59 +0200 Subject: Add more fields to the VCard element support. Extra fields: Fullname, Given/Family name, E-Mail. 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() { String VCardSerializer::serializePayload(boost::shared_ptr vcard) const { XMLElement queryElement("vCard", "vcard-temp"); + if (!vcard->getFullName().isEmpty()) { + boost::shared_ptr fullNameElement(new XMLElement("FN")); + fullNameElement->addNode(boost::shared_ptr(new XMLTextNode(vcard->getFullName()))); + queryElement.addNode(fullNameElement); + } + if (!vcard->getGivenName().isEmpty() || !vcard->getFamilyName().isEmpty()) { + boost::shared_ptr nameElement(new XMLElement("N")); + if (!vcard->getFamilyName().isEmpty()) { + boost::shared_ptr familyNameElement(new XMLElement("FAMILY")); + familyNameElement->addNode(boost::shared_ptr(new XMLTextNode(vcard->getFamilyName()))); + nameElement->addNode(familyNameElement); + } + if (!vcard->getGivenName().isEmpty()) { + boost::shared_ptr givenNameElement(new XMLElement("GIVEN")); + givenNameElement->addNode(boost::shared_ptr(new XMLTextNode(vcard->getGivenName()))); + nameElement->addNode(givenNameElement); + } + queryElement.addNode(nameElement); + } + if (!vcard->getEMail().isEmpty()) { + boost::shared_ptr emailElement(new XMLElement("EMAIL")); + boost::shared_ptr userIDElement(new XMLElement("USERID")); + userIDElement->addNode(boost::shared_ptr(new XMLTextNode(vcard->getEMail()))); + emailElement->addNode(userIDElement); + queryElement.addNode(emailElement); + } if (!vcard->getNickname().isEmpty()) { boost::shared_ptr nickElement(new XMLElement("NICKNAME")); nickElement->addNode(boost::shared_ptr(new XMLTextNode(vcard->getNickname()))); -- cgit v0.10.2-6-g49f6