diff options
| -rw-r--r-- | Swiften/Elements/VCard.h | 16 | ||||
| -rw-r--r-- | Swiften/Parser/PayloadParsers/VCardParser.cpp | 12 | ||||
| -rw-r--r-- | Swiften/Serializer/PayloadSerializers/VCardSerializer.cpp | 26 | 
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()))); | 
 Swift
 Swift