From a76d99e4b618f9e24b3c259a889587a9b77eefff Mon Sep 17 00:00:00 2001 From: Jan Kaluza Date: Wed, 14 Nov 2012 14:52:23 +0100 Subject: [PATCH] Call storeBuddy instead of handleBuddyChanged in handleSusbcription to save proper subscriptions into database. call onBuddyRemoved also in gateway-mode --- src/rostermanager.cpp | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/src/rostermanager.cpp b/src/rostermanager.cpp index 77ed09a3..0abec9f6 100644 --- a/src/rostermanager.cpp +++ b/src/rostermanager.cpp @@ -181,7 +181,7 @@ void RosterManager::sendBuddyRosterPush(Buddy *buddy) { if (buddy->getSubscription() != Buddy::Both) { buddy->setSubscription(Buddy::Both); - handleBuddyChanged(buddy); + storeBuddy(buddy); } } @@ -446,13 +446,15 @@ void RosterManager::handleSubscription(Swift::Presence::ref presence) { } if (buddy->getSubscription() != Buddy::Both) { buddy->setSubscription(Buddy::Both); - handleBuddyChanged(buddy); + storeBuddy(buddy); } break; // remove buddy case Swift::Presence::Unsubscribe: response->setType(Swift::Presence::Unsubscribed); onBuddyRemoved(buddy); + removeBuddy(buddy->getName()); + buddy = NULL; break; // just send response case Swift::Presence::Unsubscribed: @@ -462,13 +464,13 @@ void RosterManager::handleSubscription(Swift::Presence::ref presence) { // to be send later again if (buddy->getSubscription() != Buddy::Both) { buddy->setSubscription(Buddy::Both); - handleBuddyChanged(buddy); + storeBuddy(buddy); } break; case Swift::Presence::Subscribed: if (buddy->getSubscription() != Buddy::Both) { buddy->setSubscription(Buddy::Both); - handleBuddyChanged(buddy); + storeBuddy(buddy); } return; default: @@ -491,10 +493,19 @@ void RosterManager::handleSubscription(Swift::Presence::ref presence) { onBuddyAdded(buddy); response->setType(Swift::Presence::Subscribed); break; - // buddy is already there, so nothing to do, just answer case Swift::Presence::Unsubscribe: + buddyInfo.id = -1; + buddyInfo.alias = ""; + buddyInfo.legacyName = Buddy::JIDToLegacyName(presence->getTo()); + buddyInfo.subscription = "both"; + buddyInfo.flags = Buddy::buddyFlagsFromJID(presence->getTo()); + response->setType(Swift::Presence::Unsubscribed); -// onBuddyRemoved(buddy); + + buddy = m_component->getFactory()->createBuddy(this, buddyInfo); + onBuddyRemoved(buddy); + delete buddy; + buddy = NULL; break; // just send response case Swift::Presence::Unsubscribed: