From d073e9d261bb7134723e77f142603a555f8f9629 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Remko=20Tron=C3=A7on?= <git@el-tramo.be>
Date: Sat, 12 Feb 2011 13:48:14 +0100
Subject: Share locale object between delay parsers.


diff --git a/Swiften/Parser/PayloadParsers/DelayParser.cpp b/Swiften/Parser/PayloadParsers/DelayParser.cpp
index b6fa240..8e8abff 100644
--- a/Swiften/Parser/PayloadParsers/DelayParser.cpp
+++ b/Swiften/Parser/PayloadParsers/DelayParser.cpp
@@ -12,15 +12,13 @@
 
 namespace Swift {
 
-DelayParser::DelayParser() : level_(0) {
+DelayParser::DelayParser(const std::locale& locale) : locale(locale), 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.imbue(locale);
+	boost::posix_time::ptime result(boost::posix_time::not_a_date_time);
 	stream >> result;
 	return result;
 }
diff --git a/Swiften/Parser/PayloadParsers/DelayParser.h b/Swiften/Parser/PayloadParsers/DelayParser.h
index ce92dc2..b2fbdea 100644
--- a/Swiften/Parser/PayloadParsers/DelayParser.h
+++ b/Swiften/Parser/PayloadParsers/DelayParser.h
@@ -12,7 +12,7 @@
 namespace Swift {
 	class DelayParser : public GenericPayloadParser<Delay> {
 		public:
-			DelayParser();
+			DelayParser(const std::locale& locale);
 
 			virtual void handleStartElement(const String& element, const String&, const AttributeMap& attributes);
 			virtual void handleEndElement(const String& element, const String&);
@@ -20,6 +20,9 @@ namespace Swift {
 
 		private:
 			boost::posix_time::ptime dateFromString(const String& string);
+
+		private:
+			std::locale locale;
 			int level_;
 	};
 }
diff --git a/Swiften/Parser/PayloadParsers/DelayParserFactory.cpp b/Swiften/Parser/PayloadParsers/DelayParserFactory.cpp
new file mode 100644
index 0000000..19d0530
--- /dev/null
+++ b/Swiften/Parser/PayloadParsers/DelayParserFactory.cpp
@@ -0,0 +1,18 @@
+/*
+ * 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/DelayParserFactory.h>
+
+#include <boost/date_time/time_facet.hpp>
+
+namespace Swift {
+
+DelayParserFactory::DelayParserFactory() {
+	boost::posix_time::time_input_facet* facet = new boost::posix_time::time_input_facet("%Y-%m-%d %H:%M:%S%F%Q");
+	locale = std::locale(std::locale::classic(), facet);
+}
+
+}
diff --git a/Swiften/Parser/PayloadParsers/DelayParserFactory.h b/Swiften/Parser/PayloadParsers/DelayParserFactory.h
index 8b1f91e..f3dd328 100644
--- a/Swiften/Parser/PayloadParsers/DelayParserFactory.h
+++ b/Swiften/Parser/PayloadParsers/DelayParserFactory.h
@@ -14,16 +14,17 @@ namespace Swift {
 
 	class DelayParserFactory : public PayloadParserFactory {
 		public:
-			DelayParserFactory() {
-			}
+			DelayParserFactory();
 
 			virtual bool canParse(const String& /*element*/, const String& ns, const AttributeMap&) const {
 				return ns == "urn:xmpp:delay";
 			}
 
 			virtual PayloadParser* createPayloadParser() {
-				return new DelayParser();
+				return new DelayParser(locale);
 			}
 
+		private:
+			std::locale locale;
 	};
 }
diff --git a/Swiften/Parser/SConscript b/Swiften/Parser/SConscript
index 6e77109..90b3b78 100644
--- a/Swiften/Parser/SConscript
+++ b/Swiften/Parser/SConscript
@@ -25,6 +25,7 @@ sources = [
 		"PayloadParsers/CapsInfoParser.cpp",
 		"PayloadParsers/DiscoInfoParser.cpp",
 		"PayloadParsers/DiscoItemsParser.cpp",
+		"PayloadParsers/DelayParserFactory.cpp",
 		"PayloadParsers/ErrorParser.cpp",
 		"PayloadParsers/FormParser.cpp",
 		"PayloadParsers/IBBParser.cpp",
-- 
cgit v0.10.2-6-g49f6