From 59c3d7532b7768c6ab0c8cf6f4c587206c080c14 Mon Sep 17 00:00:00 2001
From: Richard Maudsley <richard.maudsley@isode.com>
Date: Tue, 24 Jun 2014 17:09:00 +0100
Subject: Fix VCard update not being broadcast when clearing avatar.

Test-Information:

Connect two clients, set and clear the avatar from one of the clients, check that the second client receives a presence update with the correct hash and that the contacts avatar is updated in the roster and any open chat windows.

Change-Id: I96ad8a9cfaa618aa07acf1cb4452855435ba1179

diff --git a/Swift/Controllers/MainController.cpp b/Swift/Controllers/MainController.cpp
index 45a0df7..df137f4 100644
--- a/Swift/Controllers/MainController.cpp
+++ b/Swift/Controllers/MainController.cpp
@@ -468,9 +468,7 @@ void MainController::sendPresence(boost::shared_ptr<Presence> presence) {
 	notifier_->setTemporarilyDisabled(presence->getShow() == StatusShow::DND);
 
 	// Add information and send
-	if (!vCardPhotoHash_.empty()) {
-		presence->updatePayload(boost::make_shared<VCardUpdate>(vCardPhotoHash_));
-	}
+	presence->updatePayload(boost::make_shared<VCardUpdate>(vCardPhotoHash_));
 	client_->getPresenceSender()->sendPresence(presence);
 	if (presence->getType() == Presence::Unavailable) {
 		logout();
@@ -768,10 +766,13 @@ void MainController::handleServerDiscoInfoResponse(boost::shared_ptr<DiscoInfo>
 }
 
 void MainController::handleVCardReceived(const JID& jid, VCard::ref vCard) {
-	if (!jid.equals(jid_, JID::WithoutResource) || !vCard || vCard->getPhoto().empty()) {
+	if (!jid.equals(jid_, JID::WithoutResource) || !vCard) {
 		return;
 	}
-	std::string hash = Hexify::hexify(networkFactories_->getCryptoProvider()->getSHA1Hash(vCard->getPhoto()));
+	std::string hash;
+	if (!vCard->getPhoto().empty()) {
+		hash = Hexify::hexify(networkFactories_->getCryptoProvider()->getSHA1Hash(vCard->getPhoto()));
+	}
 	if (hash != vCardPhotoHash_) {
 		vCardPhotoHash_ = hash;
 		if (client_ && client_->isAvailable()) {
-- 
cgit v0.10.2-6-g49f6