diff options
| author | Remko Tronçon <git@el-tramo.be> | 2013-08-25 16:39:06 (GMT) | 
|---|---|---|
| committer | Remko Tronçon <git@el-tramo.be> | 2013-08-27 19:47:48 (GMT) | 
| commit | 1bb607f96e79845ce30dd5590b0d53cc394ac150 (patch) | |
| tree | 6156622ddd1b3238aec73536e0dc25b632965a71 /Swiften/Parser/PayloadParsers/UserLocationParser.cpp | |
| parent | c4431ee90f3f1daac0a12b35bfa3378d5c570eaa (diff) | |
| download | swift-contrib-1bb607f96e79845ce30dd5590b0d53cc394ac150.zip swift-contrib-1bb607f96e79845ce30dd5590b0d53cc394ac150.tar.bz2  | |
PubSub implementation & Sluift refactoring.
Change-Id: I04ff7111b73565c00bff6db183451774a633344f
Diffstat (limited to 'Swiften/Parser/PayloadParsers/UserLocationParser.cpp')
| -rw-r--r-- | Swiften/Parser/PayloadParsers/UserLocationParser.cpp | 106 | 
1 files changed, 106 insertions, 0 deletions
diff --git a/Swiften/Parser/PayloadParsers/UserLocationParser.cpp b/Swiften/Parser/PayloadParsers/UserLocationParser.cpp new file mode 100644 index 0000000..d3aac69 --- /dev/null +++ b/Swiften/Parser/PayloadParsers/UserLocationParser.cpp @@ -0,0 +1,106 @@ +/* + * Copyright (c) 2013 Remko Tronçon + * Licensed under the GNU General Public License. + * See the COPYING file for more information. + */ + +#include <Swiften/Parser/PayloadParsers/UserLocationParser.h> + +#include <boost/lexical_cast.hpp> + +#include <Swiften/Base/DateTime.h> + +using namespace Swift; + +UserLocationParser::UserLocationParser() : level(0) { +} + +UserLocationParser::~UserLocationParser() { +} + +void UserLocationParser::handleStartElement(const std::string&, const std::string&, const AttributeMap&) { +	if (level == 1) { +		currentText = ""; +	} +	++level; +} + +void UserLocationParser::handleEndElement(const std::string& element, const std::string&) { +	--level; +	if (level == 1) { +		try { +			if (element == "accuracy") { +				getPayloadInternal()->setAccuracy(boost::lexical_cast<float>(currentText)); +			} +			else if (element == "alt") { +				getPayloadInternal()->setAltitude(boost::lexical_cast<float>(currentText)); +			} +			else if (element == "area") { +				getPayloadInternal()->setArea(currentText); +			} +			else if (element == "bearing") { +				getPayloadInternal()->setBearing(boost::lexical_cast<float>(currentText)); +			} +			else if (element == "building") { +				getPayloadInternal()->setBuilding(currentText); +			} +			else if (element == "country") { +				getPayloadInternal()->setCountry(currentText); +			} +			else if (element == "countrycode") { +				getPayloadInternal()->setCountryCode(currentText); +			} +			else if (element == "datum") { +				getPayloadInternal()->setDatum(currentText); +			} +			else if (element == "description") { +				getPayloadInternal()->setDescription(currentText); +			} +			else if (element == "error") { +				getPayloadInternal()->setError(boost::lexical_cast<float>(currentText)); +			} +			else if (element == "floor") { +				getPayloadInternal()->setFloor(currentText); +			} +			else if (element == "lat") { +				getPayloadInternal()->setLatitude(boost::lexical_cast<float>(currentText)); +			} +			else if (element == "locality") { +				getPayloadInternal()->setLocality(currentText); +			} +			else if (element == "lon") { +				getPayloadInternal()->setLongitude(boost::lexical_cast<float>(currentText)); +			} +			else if (element == "postalcode") { +				getPayloadInternal()->setPostalCode(currentText); +			} +			else if (element == "region") { +				getPayloadInternal()->setRegion(currentText); +			} +			else if (element == "room") { +				getPayloadInternal()->setRoom(currentText); +			} +			else if (element == "speed") { +				getPayloadInternal()->setSpeed(boost::lexical_cast<float>(currentText)); +			} +			else if (element == "street") { +				getPayloadInternal()->setStreet(currentText); +			} +			else if (element == "text") { +				getPayloadInternal()->setText(currentText); +			} +			else if (element == "timestamp") { +				getPayloadInternal()->setTimestamp(stringToDateTime(currentText)); +			} +			else if (element == "uri") { +				getPayloadInternal()->setURI(currentText); +			} +		} +		catch (const boost::bad_lexical_cast&) { +		} +	} +} + +void UserLocationParser::handleCharacterData(const std::string& data) { +	currentText += data; +}  | 
 Swift