/* * Copyright (c) 2010-2016 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ #include namespace Swift { XMPPRosterImpl::XMPPRosterImpl() { } XMPPRosterImpl::~XMPPRosterImpl() { } void XMPPRosterImpl::addContact(const JID& jid, const std::string& name, const std::vector& groups, RosterItemPayload::Subscription subscription) { JID bareJID(jid.toBare()); std::map::iterator i = entries_.find(bareJID); if (i != entries_.end()) { std::string oldName = i->second.getName(); std::vector oldGroups = i->second.getGroups(); i->second = XMPPRosterItem(jid, name, groups, subscription); onJIDUpdated(bareJID, oldName, oldGroups); } else { entries_.insert(std::make_pair(bareJID, XMPPRosterItem(jid, name, groups, subscription))); onJIDAdded(bareJID); } } void XMPPRosterImpl::removeContact(const JID& jid) { entries_.erase(JID(jid.toBare())); onJIDRemoved(jid); } void XMPPRosterImpl::clear() { entries_.clear(); onRosterCleared(); } bool XMPPRosterImpl::containsJID(const JID& jid) { return entries_.find(JID(jid.toBare())) != entries_.end(); } std::string XMPPRosterImpl::getNameForJID(const JID& jid) const { std::map::const_iterator i = entries_.find(jid.toBare()); if (i != entries_.end()) { return i->second.getName(); } else { return ""; } } std::vector XMPPRosterImpl::getGroupsForJID(const JID& jid) { std::map::iterator i = entries_.find(jid.toBare()); if (i != entries_.end()) { return i->second.getGroups(); } else { return std::vector(); } } RosterItemPayload::Subscription XMPPRosterImpl::getSubscriptionStateForJID(const JID& jid) { std::map::iterator i = entries_.find(jid.toBare()); if (i != entries_.end()) { return i->second.getSubscription(); } else { return RosterItemPayload::None; } } std::vector XMPPRosterImpl::getItems() const { std::vector result; for (const auto& entry : entries_) { result.push_back(entry.second); } return result; } boost::optional XMPPRosterImpl::getItem(const JID& jid) const { std::map::const_iterator i = entries_.find(jid.toBare()); if (i != entries_.end()) { return i->second; } else { return boost::optional(); } } std::set XMPPRosterImpl::getGroups() const { std::set result; for (const auto& entry : entries_) { std::vector groups = entry.second.getGroups(); result.insert(groups.begin(), groups.end()); } return result; } }