Send unavailable presences for available buddies when disconnecting the user

This commit is contained in:
HanzZ 2011-07-12 22:02:02 +02:00
parent 751eaaaf32
commit 3c0e38368c
2 changed files with 20 additions and 0 deletions

View file

@ -86,6 +86,8 @@ class RosterManager {
void sendCurrentPresences(const Swift::JID &to);
void sendUnavailablePresences(const Swift::JID &to);
private:
void setBuddyCallback(Buddy *buddy);

View file

@ -57,6 +57,8 @@ RosterManager::~RosterManager() {
m_rosterStorage->storeBuddies();
}
sendUnavailablePresences(m_user->getJID().toBare());
for (std::map<std::string, Buddy *>::const_iterator it = m_buddies.begin(); it != m_buddies.end(); it++) {
Buddy *buddy = (*it).second;
if (!buddy) {
@ -64,6 +66,7 @@ RosterManager::~RosterManager() {
}
delete buddy;
}
if (m_rosterStorage)
delete m_rosterStorage;
}
@ -347,4 +350,19 @@ void RosterManager::sendCurrentPresences(const Swift::JID &to) {
}
}
void RosterManager::sendUnavailablePresences(const Swift::JID &to) {
for (std::map<std::string, Buddy *>::const_iterator it = m_buddies.begin(); it != m_buddies.end(); it++) {
Buddy *buddy = (*it).second;
if (!buddy) {
continue;
}
Swift::Presence::ref presence = buddy->generatePresenceStanza(255);
if (presence) {
presence->setTo(to);
presence->setType(Swift::Presence::Unavailable);
m_component->getStanzaChannel()->sendPresence(presence);
}
}
}
}