/* * Copyright (c) 2010-2016 Isode Limited. * All rights reserved. * See the COPYING file for more information. */ #pragma once #include #include #include #include #include #include #include #include #include #include namespace Swift { class RosterItem; class GroupRosterItem; class ContactRosterItem; class Roster { public: Roster(bool sortByStatus = true, bool fullJIDMapping = false); ~Roster(); void addContact(const JID& jid, const JID& displayJID, const std::string& name, const std::string& group, const boost::filesystem::path& avatarPath); void removeContact(const JID& jid); void removeContactFromGroup(const JID& jid, const std::string& group); void removeGroup(const std::string& group); void removeAll(); void applyOnItems(const RosterItemOperation& operation); void applyOnAllItems(const RosterItemOperation& operation); void applyOnItem(const RosterItemOperation& operation, const JID& jid); void addFilter(RosterFilter* filter); void removeFilter(RosterFilter* filter); GroupRosterItem* getRoot() const; std::set getJIDs() const; std::vector getFilters() {return filters_;} boost::signal onChildrenChanged; boost::signal onGroupAdded; boost::signal onDataChanged; boost::signal onVCardUpdateRequested; boost::signal onFilterAdded; boost::signal onFilterRemoved; GroupRosterItem* getGroup(const std::string& groupName); void setBlockingSupported(bool isSupported); private: void handleDataChanged(RosterItem* item); void handleChildrenChanged(GroupRosterItem* item); void filterGroup(GroupRosterItem* item); void filterContact(ContactRosterItem* contact, GroupRosterItem* group); void filterAll(); GroupRosterItem* root_; std::vector filters_; typedef std::map > ItemMap; ItemMap itemMap_; bool fullJIDMapping_; bool sortByStatus_; bool blockingSupported_; }; }