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); + } +} + }