Send unavailable presences only from buddies which were available when disconnecting
This commit is contained in:
parent
eeda354422
commit
cb2dbb3937
2 changed files with 18 additions and 1 deletions
|
@ -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);
|
||||
|
|
|
@ -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();
|
||||
|
|
Loading…
Add table
Reference in a new issue