diff --git a/include/transport/localbuddy.h b/include/transport/localbuddy.h index c8f81174..16bf12c1 100644 --- a/include/transport/localbuddy.h +++ b/include/transport/localbuddy.h @@ -51,10 +51,20 @@ class LocalBuddy : public Buddy { } std::string getIconHash() { return m_iconHash; } - void setIconHash(const std::string &iconHash) { m_iconHash = iconHash; } + void setIconHash(const std::string &iconHash) { + bool changed = m_iconHash != iconHash; + m_iconHash = iconHash; + if (changed) + getRosterManager()->storeBuddy(this); + } std::vector getGroups() { return m_groups; } - void setGroups(const std::vector &groups) { m_groups = groups; } + void setGroups(const std::vector &groups) { + bool changed = m_groups.size() != groups.size(); + m_groups = groups; + if (changed) + getRosterManager()->storeBuddy(this); + } private: std::string m_name; diff --git a/src/buddy.cpp b/src/buddy.cpp index 55f35713..5e9b30b6 100644 --- a/src/buddy.cpp +++ b/src/buddy.cpp @@ -148,7 +148,6 @@ void Buddy::handleBuddyChanged() { if (presence) { m_rosterManager->getUser()->getComponent()->getStanzaChannel()->sendPresence(presence); } - m_rosterManager->handleBuddyChanged(this); } void Buddy::handleVCardReceived(const std::string &id, Swift::VCard::ref vcard) { diff --git a/src/rostermanager.cpp b/src/rostermanager.cpp index ea49430b..81a453de 100644 --- a/src/rostermanager.cpp +++ b/src/rostermanager.cpp @@ -152,9 +152,6 @@ void RosterManager::sendBuddySubscribePresence(Buddy *buddy) { } void RosterManager::handleBuddyChanged(Buddy *buddy) { - if (m_rosterStorage) { - m_rosterStorage->storeBuddy(buddy); - } } void RosterManager::setBuddyCallback(Buddy *buddy) {