From 2535c1d383fa16d02d547090bd2e64b79c3a24c8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Remko=20Tron=C3=A7on?= <git@el-tramo.be>
Date: Wed, 14 Sep 2011 22:31:36 +0200
Subject: Added reset() to PayloadAddingPresenceSender.


diff --git a/Swiften/Presence/PayloadAddingPresenceSender.cpp b/Swiften/Presence/PayloadAddingPresenceSender.cpp
index 1ece32a..5e8cd81 100644
--- a/Swiften/Presence/PayloadAddingPresenceSender.cpp
+++ b/Swiften/Presence/PayloadAddingPresenceSender.cpp
@@ -41,4 +41,8 @@ void PayloadAddingPresenceSender::setPayload(boost::shared_ptr<Payload> payload)
 	}
 }
 
+void PayloadAddingPresenceSender::reset() {
+	lastSentPresence.reset();
+}
+
 }
diff --git a/Swiften/Presence/PayloadAddingPresenceSender.h b/Swiften/Presence/PayloadAddingPresenceSender.h
index ddd460e..333842a 100644
--- a/Swiften/Presence/PayloadAddingPresenceSender.h
+++ b/Swiften/Presence/PayloadAddingPresenceSender.h
@@ -28,10 +28,18 @@ namespace Swift {
 			 * Sets the payload to be added to outgoing presences.
 			 * If initial presence has been sent, this will resend the last sent presence
 			 * with an updated payload. Initial presence is reset when unavailable presence is
-			 * sent.
+			 * sent, or when reset() is called.
 			 */
 			void setPayload(boost::shared_ptr<Payload>);
 
+ 			/**
+ 			 * Resets the presence sender.
+ 			 * This puts the presence sender back in the initial state (before initial
+ 			 * presence has been sent).
+ 			 * This also resets the chained sender.
+ 			 */
+ 			void reset();
+
 		private:
 			boost::shared_ptr<Presence> lastSentPresence;
 			PresenceSender* sender;
diff --git a/Swiften/Presence/UnitTest/PayloadAddingPresenceSenderTest.cpp b/Swiften/Presence/UnitTest/PayloadAddingPresenceSenderTest.cpp
index 0dd6f74..3a6ab31 100644
--- a/Swiften/Presence/UnitTest/PayloadAddingPresenceSenderTest.cpp
+++ b/Swiften/Presence/UnitTest/PayloadAddingPresenceSenderTest.cpp
@@ -23,6 +23,7 @@ class PayloadAddingPresenceSenderTest : public CppUnit::TestFixture {
 		CPPUNIT_TEST(testSendPresenceDoesNotAlterOriginalPayload);
 		CPPUNIT_TEST(testSetPayloadAfterInitialPresenceResendsPresence);
 		CPPUNIT_TEST(testSetPayloadAfterUnavailablePresenceDoesNotResendPresence);
+		CPPUNIT_TEST(testSetPayloadAfterResetDoesNotResendPresence);
 		CPPUNIT_TEST(testSendDirectedPresenceIsNotResent);
 		CPPUNIT_TEST_SUITE_END();
 
@@ -83,12 +84,24 @@ class PayloadAddingPresenceSenderTest : public CppUnit::TestFixture {
 		void testSetPayloadAfterUnavailablePresenceDoesNotResendPresence() {
 			boost::shared_ptr<PayloadAddingPresenceSender> testling(createSender());
 
+			testling->sendPresence(Presence::create("bar"));
+
 			Presence::ref presence = Presence::create("bar");
 			presence->setType(Presence::Unavailable);
 			testling->sendPresence(presence);
 
 			testling->setPayload(MyPayload::create("foo"));
 
+			CPPUNIT_ASSERT_EQUAL(2, static_cast<int>(stanzaChannel->sentStanzas.size()));
+		}
+
+		void testSetPayloadAfterResetDoesNotResendPresence() {
+			boost::shared_ptr<PayloadAddingPresenceSender> testling(createSender());
+			testling->sendPresence(Presence::create("bar"));
+
+			testling->reset();
+			testling->setPayload(MyPayload::create("foo"));
+
 			CPPUNIT_ASSERT_EQUAL(1, static_cast<int>(stanzaChannel->sentStanzas.size()));
 		}
 
-- 
cgit v0.10.2-6-g49f6