summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRemko Tronçon <git@el-tramo.be>2009-06-20 09:00:52 (GMT)
committerRemko Tronçon <git@el-tramo.be>2009-06-20 14:37:51 (GMT)
commitfcd2d7cfb5a05be0fd13bfa3582b46c1a1b595aa (patch)
tree17e3eef980584b8f194d68d1d9b9eae967423885 /Swiften/Parser/PayloadParsers/VCardParser.cpp
parent6310bc00ceeb65f0cf6fc0ada9d1b188517d8a76 (diff)
downloadswift-fcd2d7cfb5a05be0fd13bfa3582b46c1a1b595aa.zip
swift-fcd2d7cfb5a05be0fd13bfa3582b46c1a1b595aa.tar.bz2
Added beginnings of a vCard parser.
Only implemented PHOTO subtag, because it's the only thing we need right now.
Diffstat (limited to 'Swiften/Parser/PayloadParsers/VCardParser.cpp')
-rw-r--r--Swiften/Parser/PayloadParsers/VCardParser.cpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/Swiften/Parser/PayloadParsers/VCardParser.cpp b/Swiften/Parser/PayloadParsers/VCardParser.cpp
new file mode 100644
index 0000000..a6fe2be
--- /dev/null
+++ b/Swiften/Parser/PayloadParsers/VCardParser.cpp
@@ -0,0 +1,38 @@
+#include "Swiften/Parser/PayloadParsers/VCardParser.h"
+#include "Swiften/Base/foreach.h"
+#include "Swiften/StringCodecs/Base64.h"
+
+namespace Swift {
+
+VCardParser::VCardParser() {
+}
+
+void VCardParser::handleStartElement(const String& element, const String&, const AttributeMap&) {
+ elementStack_.push_back(element);
+ currentText_ = "";
+}
+
+void VCardParser::handleEndElement(const String&, const String&) {
+ String elementHierarchy = getElementHierarchy();
+ if (elementHierarchy == "/vCard/PHOTO/TYPE") {
+ getPayloadInternal()->setPhotoType(currentText_);
+ }
+ else if (elementHierarchy == "/vCard/PHOTO/BINVAL") {
+ getPayloadInternal()->setPhoto(Base64::decode(currentText_));
+ }
+ elementStack_.pop_back();
+}
+
+void VCardParser::handleCharacterData(const String& text) {
+ currentText_ += text;
+}
+
+String VCardParser::getElementHierarchy() const {
+ String result;
+ foreach(const String& element, elementStack_) {
+ result += "/" + element;
+ }
+ return result;
+}
+
+}