From ee4e5ecb71cc6dc788543189ccc2195b5c885f8c Mon Sep 17 00:00:00 2001 From: HanzZ Date: Tue, 10 Apr 2012 18:49:40 +0200 Subject: [PATCH] send roster push on group change --- include/transport/localbuddy.h | 7 +------ src/localbuddy.cpp | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 6 deletions(-) diff --git a/include/transport/localbuddy.h b/include/transport/localbuddy.h index 16bf12c1..492a3c70 100644 --- a/include/transport/localbuddy.h +++ b/include/transport/localbuddy.h @@ -59,12 +59,7 @@ class LocalBuddy : public Buddy { } std::vector getGroups() { return m_groups; } - void setGroups(const std::vector &groups) { - bool changed = m_groups.size() != groups.size(); - m_groups = groups; - if (changed) - getRosterManager()->storeBuddy(this); - } + void setGroups(const std::vector &groups); private: std::string m_name; diff --git a/src/localbuddy.cpp b/src/localbuddy.cpp index 55f7e27c..6d8d7530 100644 --- a/src/localbuddy.cpp +++ b/src/localbuddy.cpp @@ -48,4 +48,24 @@ void LocalBuddy::setAlias(const std::string &alias) { } } +void LocalBuddy::setGroups(const std::vector &groups) { + bool changed = m_groups.size() != groups.size(); + if (!changed) { + for (int i = 0; i != m_groups.size(); i++) { + if (m_groups[i] != groups[i]) { + changed = true; + break; + } + } + } + + m_groups = groups; + if (changed) { + if (getRosterManager()->getUser()->getComponent()->inServerMode() || getRosterManager()->isRemoteRosterSupported()) { + getRosterManager()->sendBuddyRosterPush(this); + } + getRosterManager()->storeBuddy(this); + } +} + }