diff --git a/src/networkpluginserver.cpp b/src/networkpluginserver.cpp index 28275c63..bcea34f7 100644 --- a/src/networkpluginserver.cpp +++ b/src/networkpluginserver.cpp @@ -542,6 +542,10 @@ void NetworkPluginServer::handleBuddyChangedPayload(const std::string &data) { buddy->handleBuddyChanged(); } else { + if (payload.buddyname() == user->getUserInfo().uin) { + return; + } + std::vector groups; for (int i = 0; i < payload.group_size(); i++) { groups.push_back(payload.group(i)); @@ -556,6 +560,7 @@ void NetworkPluginServer::handleBuddyChangedPayload(const std::string &data) { delete buddy; return; } + buddy->setStatus(Swift::StatusShow((Swift::StatusShow::Type) payload.status()), payload.statusmessage()); buddy->setIconHash(payload.iconhash()); buddy->setBlocked(payload.blocked()); diff --git a/src/tests/networkpluginserver.cpp b/src/tests/networkpluginserver.cpp index 9a9d921c..d9e1655d 100644 --- a/src/tests/networkpluginserver.cpp +++ b/src/tests/networkpluginserver.cpp @@ -29,6 +29,7 @@ class NetworkPluginServerTest : public CPPUNIT_NS :: TestFixture, public BasicTe CPPUNIT_TEST_SUITE(NetworkPluginServerTest); CPPUNIT_TEST(handleBuddyChangedPayload); CPPUNIT_TEST(handleBuddyChangedPayloadNoEscaping); + CPPUNIT_TEST(handleBuddyChangedPayloadUserContactInRoster); CPPUNIT_TEST_SUITE_END(); public: @@ -90,6 +91,19 @@ class NetworkPluginServerTest : public CPPUNIT_NS :: TestFixture, public BasicTe cfg->load(ifs2); } + void handleBuddyChangedPayloadUserContactInRoster() { + User *user = userManager->getUser("user@localhost"); + + pbnetwork::Buddy buddy; + buddy.set_username("user@localhost"); + buddy.set_buddyname("user"); + + std::string message; + buddy.SerializeToString(&message); + + serv->handleBuddyChangedPayload(message); + CPPUNIT_ASSERT_EQUAL(0, (int) received.size()); + } }; CPPUNIT_TEST_SUITE_REGISTRATION (NetworkPluginServerTest); diff --git a/src/tests/usermanager.cpp b/src/tests/usermanager.cpp index a0adceff..5177d802 100644 --- a/src/tests/usermanager.cpp +++ b/src/tests/usermanager.cpp @@ -79,7 +79,7 @@ class UserManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTest { dynamic_cast(component->getStanzaChannel())->onPresenceReceived(response); loop->processEvents(); - CPPUNIT_ASSERT_EQUAL(4, (int) received.size()); + CPPUNIT_ASSERT_EQUAL(3, (int) received.size()); CPPUNIT_ASSERT(getStanza(received[0])->getPayload()); Swift::Presence *presence = dynamic_cast(getStanza(received[1])); @@ -90,9 +90,6 @@ class UserManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTest { CPPUNIT_ASSERT(presence); CPPUNIT_ASSERT_EQUAL(Swift::Presence::Subscribe, presence->getType()); - presence = dynamic_cast(getStanza(received[3])); - CPPUNIT_ASSERT(presence); - CPPUNIT_ASSERT_EQUAL(Swift::Presence::Subscribed, presence->getType()); } void connectTwoResources() {