From 59c3d7532b7768c6ab0c8cf6f4c587206c080c14 Mon Sep 17 00:00:00 2001 From: Richard Maudsley 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) { notifier_->setTemporarilyDisabled(presence->getShow() == StatusShow::DND); // Add information and send - if (!vCardPhotoHash_.empty()) { - presence->updatePayload(boost::make_shared(vCardPhotoHash_)); - } + presence->updatePayload(boost::make_shared(vCardPhotoHash_)); client_->getPresenceSender()->sendPresence(presence); if (presence->getType() == Presence::Unavailable) { logout(); @@ -768,10 +766,13 @@ void MainController::handleServerDiscoInfoResponse(boost::shared_ptr } 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