summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Smith <git@kismith.co.uk>2010-04-20 09:43:31 (GMT)
committerKevin Smith <git@kismith.co.uk>2010-04-23 10:52:55 (GMT)
commit6bd72c67896a20041556519548650590553f47c9 (patch)
tree20f6a3895647ad67adfe29ef688a618bf7c30a6a /Swiften/Parser/PayloadParsers/DelayParser.cpp
parentbfe07e82cd79d56f1327425ce3e6c8a84908421b (diff)
downloadswift-6bd72c67896a20041556519548650590553f47c9.zip
swift-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.cpp50
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&) {
+
+}
+
+}