From aebf16650e33f442d3cc3bbc87f034c3c146e596 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Remko=20Tron=C3=A7on?= Date: Mon, 14 Mar 2011 20:11:05 +0100 Subject: Make sure the avatar gets updated in the chat window. Combined avatar provider shouldn't look up avatars in the cache, because the specific providers can return different results if they use the bare JID. Resolves: #781 Release-Notes: Fixed a bug where the avatar was not updating in the chat window. diff --git a/Swiften/Avatars/CombinedAvatarProvider.cpp b/Swiften/Avatars/CombinedAvatarProvider.cpp index d7e716c..eea0b89 100644 --- a/Swiften/Avatars/CombinedAvatarProvider.cpp +++ b/Swiften/Avatars/CombinedAvatarProvider.cpp @@ -14,13 +14,7 @@ namespace Swift { std::string CombinedAvatarProvider::getAvatarHash(const JID& jid) const { - std::map::const_iterator i = avatars.find(jid); - if (i == avatars.end()) { - return getCombinedAvatarAndCache(jid); - } - else { - return i->second; - } + return getCombinedAvatarAndCache(jid); } void CombinedAvatarProvider::addProvider(AvatarProvider* provider) { diff --git a/Swiften/Avatars/UnitTest/CombinedAvatarProviderTest.cpp b/Swiften/Avatars/UnitTest/CombinedAvatarProviderTest.cpp index 3e1cba3..4894e14 100644 --- a/Swiften/Avatars/UnitTest/CombinedAvatarProviderTest.cpp +++ b/Swiften/Avatars/UnitTest/CombinedAvatarProviderTest.cpp @@ -26,6 +26,7 @@ class CombinedAvatarProviderTest : public CppUnit::TestFixture { CPPUNIT_TEST(testProviderUpdateWithAvatarDisappearingTriggersChange); CPPUNIT_TEST(testProviderUpdateAfterAvatarDisappearedTriggersChange); CPPUNIT_TEST(testProviderUpdateAfterGetDoesNotTriggerChange); + CPPUNIT_TEST(testProviderUpdateBareJIDAfterGetFullJID); CPPUNIT_TEST(testRemoveProviderDisconnectsUpdates); CPPUNIT_TEST_SUITE_END(); @@ -168,6 +169,19 @@ class CombinedAvatarProviderTest : public CppUnit::TestFixture { CPPUNIT_ASSERT_EQUAL(0, static_cast(changes.size())); } + void testProviderUpdateBareJIDAfterGetFullJID() { + std::auto_ptr testling(createProvider()); + avatarProvider1->useBare = true; + testling->addProvider(avatarProvider1); + + avatarProvider1->avatars[user1.toBare()] = avatarHash1; + testling->getAvatarHash(user1); + avatarProvider1->avatars[user1.toBare()] = avatarHash2; + avatarProvider1->onAvatarChanged(user1.toBare()); + + CPPUNIT_ASSERT_EQUAL(avatarHash2, testling->getAvatarHash(user1)); + } + private: std::auto_ptr createProvider() { std::auto_ptr result(new CombinedAvatarProvider()); @@ -181,8 +195,12 @@ class CombinedAvatarProviderTest : public CppUnit::TestFixture { private: struct DummyAvatarProvider : public AvatarProvider { + DummyAvatarProvider() : useBare(false) { + } + std::string getAvatarHash(const JID& jid) const { - std::map::const_iterator i = avatars.find(jid); + JID actualJID = useBare ? jid.toBare() : jid; + std::map::const_iterator i = avatars.find(actualJID); if (i != avatars.end()) { return i->second; } @@ -191,6 +209,7 @@ class CombinedAvatarProviderTest : public CppUnit::TestFixture { } } + bool useBare; std::map avatars; }; -- cgit v0.10.2-6-g49f6