Send unavailable presences only from buddies which were available when disconnecting

This commit is contained in:
HanzZ 2013-01-12 13:31:28 +01:00
parent eeda354422
commit cb2dbb3937
2 changed files with 18 additions and 1 deletions

View file

@ -609,7 +609,7 @@ void RosterManager::sendUnavailablePresences(const Swift::JID &to) {
continue;
}
Swift::Presence::ref presence = buddy->generatePresenceStanza(255);
if (presence) {
if (presence && presence->getType() == Swift::Presence::Available) {
presence->setTo(to);
presence->setType(Swift::Presence::Unavailable);
m_component->getStanzaChannel()->sendPresence(presence);

View file

@ -24,6 +24,7 @@ class RosterManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTest {
CPPUNIT_TEST_SUITE(RosterManagerTest);
CPPUNIT_TEST(setBuddy);
CPPUNIT_TEST(sendCurrentPresences);
CPPUNIT_TEST(sendUnavailablePresences);
CPPUNIT_TEST(sendCurrentPresence);
CPPUNIT_TEST(sendBuddySubscribePresence);
CPPUNIT_TEST(removeBuddy);
@ -120,6 +121,22 @@ class RosterManagerTest : public CPPUNIT_NS :: TestFixture, public BasicTest {
}
}
void sendUnavailablePresences() {
setBuddy();
received.clear();
User *user = userManager->getUser("user@localhost");
user->getRosterManager()->sendUnavailablePresences("user@localhost/resource");
CPPUNIT_ASSERT_EQUAL(3, (int) received.size());
for (int i = 0; i < 3; i++) {
CPPUNIT_ASSERT(dynamic_cast<Swift::Presence *>(getStanza(received[i])));
CPPUNIT_ASSERT_EQUAL(Swift::Presence::Unavailable, dynamic_cast<Swift::Presence *>(getStanza(received[i]))->getType());
CPPUNIT_ASSERT_EQUAL(std::string("user@localhost/resource"), dynamic_cast<Swift::Presence *>(getStanza(received[i]))->getTo().toString());
}
}
void sendCurrentPresence() {
setBuddy();
received.clear();