diff options
author | Kevin Smith <git@kismith.co.uk> | 2010-04-20 09:43:31 (GMT) |
---|---|---|
committer | Kevin Smith <git@kismith.co.uk> | 2010-04-23 10:52:55 (GMT) |
commit | 6bd72c67896a20041556519548650590553f47c9 (patch) | |
tree | 20f6a3895647ad67adfe29ef688a618bf7c30a6a /Swiften/Parser/PayloadParsers/DelayParser.cpp | |
parent | bfe07e82cd79d56f1327425ce3e6c8a84908421b (diff) | |
download | swift-contrib-6bd72c67896a20041556519548650590553f47c9.zip swift-contrib-6bd72c67896a20041556519548650590553f47c9.tar.bz2 |
Add XEP-0203 (Delay) support.
Puts delay warnings in the chat log. Not optional yet.
Diffstat (limited to 'Swiften/Parser/PayloadParsers/DelayParser.cpp')
-rw-r--r-- | Swiften/Parser/PayloadParsers/DelayParser.cpp | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/Swiften/Parser/PayloadParsers/DelayParser.cpp b/Swiften/Parser/PayloadParsers/DelayParser.cpp new file mode 100644 index 0000000..a416ac1 --- /dev/null +++ b/Swiften/Parser/PayloadParsers/DelayParser.cpp @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2010 Kevin Smith + * Licensed under the GNU General Public License v3. + * See Documentation/Licenses/GPLv3.txt for more information. + */ + +#include "Swiften/Parser/PayloadParsers/DelayParser.h" + +#include <locale> +#include <iostream> + +#include <boost/date_time/time_facet.hpp> + +namespace Swift { + +DelayParser::DelayParser() : level_(0) { +} + +boost::posix_time::ptime DelayParser::dateFromString(const String& string) { + boost::posix_time::time_input_facet* facet = new boost::posix_time::time_input_facet("%Y-%m-%d %H:%M:%S%F%Q"); + boost::posix_time::ptime result(boost::posix_time::not_a_date_time); + std::locale dateLocale(std::locale::classic(), facet); + std::istringstream stream(string.getUTF8String()); + stream.imbue(dateLocale); + stream >> result; + return result; +} + +void DelayParser::handleStartElement(const String& /*element*/, const String& /*ns*/, const AttributeMap& attributes) { + if (level_ == 0) { + boost::posix_time::ptime stamp = dateFromString(attributes.getAttribute("stamp")); + getPayloadInternal()->setStamp(stamp); + if (!attributes.getAttribute("from").isEmpty()) { + std::cout << attributes.getAttribute("from"); + String from = attributes.getAttribute("from"); + getPayloadInternal()->setFrom(JID(from)); + } + } + ++level_; +} + +void DelayParser::handleEndElement(const String&, const String&) { + --level_; +} + +void DelayParser::handleCharacterData(const String&) { + +} + +} |