From e30322061756a64cd23d949e16f21dfe2f18b192 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Remko=20Tron=C3=A7on?= <git@el-tramo.be>
Date: Sun, 3 Jan 2010 10:42:47 +0100
Subject: Don't send caps info and vcard info twice.


diff --git a/Swift/Controllers/MainController.cpp b/Swift/Controllers/MainController.cpp
index 29d67b5..946b7d0 100644
--- a/Swift/Controllers/MainController.cpp
+++ b/Swift/Controllers/MainController.cpp
@@ -202,17 +202,21 @@ void MainController::handleChangeStatusRequest(StatusShow::Type show, const Stri
 	if (presence->getType() != Presence::Unavailable && !client_->isAvailable()) {
 		performLoginFromCachedCredentials();
 		queuedPresence_ = presence;
-	} else {
+	} 
+	else {
 		sendPresence(presence);
 	}
 }
 
 void MainController::sendPresence(boost::shared_ptr<Presence> presence) {
+	// Copy presence before adding extra information
+	lastSentPresence_ = presence->clone();
+
+	// Add information and send
 	if (!vCardPhotoHash_.isEmpty()) {
 		presence->addPayload(boost::shared_ptr<VCardUpdate>(new VCardUpdate(vCardPhotoHash_)));
 	}
 	presence->addPayload(capsInfo_);
-	lastSentPresence_ = presence;
 	presenceSender_->sendPresence(presence);
 	if (presence->getType() == Presence::Unavailable) {
 		logout();
@@ -233,7 +237,8 @@ void MainController::handleInputIdleChanged(bool idle) {
 	else {
 		if (client_) {
 			sendPresence(preIdlePresence_);
-		} else {
+		} 
+		else {
 			queuedPresence_ = preIdlePresence_;
 		}
 	}
diff --git a/Swiften/Elements/Presence.h b/Swiften/Elements/Presence.h
index a1f15fa..f748e44 100644
--- a/Swiften/Elements/Presence.h
+++ b/Swiften/Elements/Presence.h
@@ -52,6 +52,10 @@ namespace Swift {
 				updatePayload(boost::shared_ptr<Priority>(new Priority(priority)));
 			}
 
+			boost::shared_ptr<Presence> clone() const {
+				return boost::shared_ptr<Presence>(new Presence(*this));
+			}
+
 		private:
 			Presence::Type type_;
 	};
-- 
cgit v0.10.2-6-g49f6