std::string VCardUpdateAvatarManager::getAvatarHash(const JID& jid) const {
	std::map<JID, std::string>::const_iterator i = avatarHashes_.find(getAvatarJID(jid));
	if (i != avatarHashes_.end()) {
		return i->second;
	}
	else {
		return "";
	}
}
void VCardUpdateAvatarManager::handlePresenceReceived(boost::shared_ptr<Presence> presence) {
	boost::shared_ptr<VCardUpdate> update = presence->getPayload<VCardUpdate>();
	if (!update || presence->getPayload<ErrorPayload>()) {
		return;
	}
	JID from = getAvatarJID(presence->getFrom());
	if (getAvatarHash(from) == update->getPhotoHash()) {
		return;
	}
	SWIFT_LOG(debug) << "Updated hash: " << from << " -> " << update->getPhotoHash() << std::endl;
	if (avatarStorage_->hasAvatar(update->getPhotoHash())) {
		setAvatarHash(from, update->getPhotoHash());
	}
	else {
		vcardManager_->requestVCard(from);
	}
}
Exemplo n.º 3
0
std::string VCardAvatarManager::getAvatarHash(const JID& jid) const {
    JID avatarJID = getAvatarJID(jid);
    std::string hash = vcardManager_->getPhotoHash(avatarJID);
    if (!hash.empty()) {
        if (!avatarStorage_->hasAvatar(hash)) {
            VCard::ref vCard = vcardManager_->getVCard(avatarJID);
            if (vCard) {
                avatarStorage_->addAvatar(hash, vCard->getPhoto());
            }
            else {
                // Can happen if the cache is inconsistent.
                hash = "";
            }
        }
    }
    return hash;
}