diff options
author | Tobias Markmann <tm@ayena.de> | 2015-10-01 10:09:04 (GMT) |
---|---|---|
committer | Kevin Smith <kevin.smith@isode.com> | 2015-10-30 14:23:56 (GMT) |
commit | 50a3962e4d0b16fd0316be54121cfb293c3117bd (patch) | |
tree | dc85f9fd75c14542f5f1f00a3878891400ef2f41 /Swift/Controllers | |
parent | 3a153509d27882e29456ffc7bf67d9cf32d86d52 (diff) | |
download | swift-50a3962e4d0b16fd0316be54121cfb293c3117bd.zip swift-50a3962e4d0b16fd0316be54121cfb293c3117bd.tar.bz2 |
Ignore DND drops of JIDs for contacts already in the conversation
Swift allows dropping contacts from group chats or the roster
on a chat window to invite them or start an impromptu chat.
With this commit Swift will ignore drops which only contain
JIDs that are already part of the conversation.
Test-Information:
Tested the described behavior with roster and room contact
drags in anonymous and non-anonymous rooms.
Change-Id: I2f06082ea4bc1140210f9f1a165bdf276a130273
Diffstat (limited to 'Swift/Controllers')
-rw-r--r-- | Swift/Controllers/Roster/Roster.cpp | 22 | ||||
-rw-r--r-- | Swift/Controllers/Roster/Roster.h | 2 |
2 files changed, 24 insertions, 0 deletions
diff --git a/Swift/Controllers/Roster/Roster.cpp b/Swift/Controllers/Roster/Roster.cpp index 84561e5..77d6b78 100644 --- a/Swift/Controllers/Roster/Roster.cpp +++ b/Swift/Controllers/Roster/Roster.cpp @@ -51,6 +51,28 @@ GroupRosterItem* Roster::getRoot() const { return root_; } +std::set<JID> Roster::getJIDs() const { + std::set<JID> jids; + + std::deque<RosterItem*> queue; + queue.push_back(root_); + while (!queue.empty()) { + RosterItem* item = *queue.begin(); + queue.pop_front(); + GroupRosterItem* group = dynamic_cast<GroupRosterItem*>(item); + ContactRosterItem *contact = dynamic_cast<ContactRosterItem*>(item); + if (contact) { + jids.insert(contact->getJID()); + jids.insert(contact->getDisplayJID()); + } + else if (group) { + queue.insert(queue.begin(), group->getChildren().begin(), group->getChildren().end()); + } + } + + return jids; +} + GroupRosterItem* Roster::getGroup(const std::string& groupName) { foreach (RosterItem *item, root_->getChildren()) { GroupRosterItem *group = dynamic_cast<GroupRosterItem*>(item); diff --git a/Swift/Controllers/Roster/Roster.h b/Swift/Controllers/Roster/Roster.h index c25feaa..269ec4d 100644 --- a/Swift/Controllers/Roster/Roster.h +++ b/Swift/Controllers/Roster/Roster.h @@ -42,6 +42,8 @@ class Roster { void addFilter(RosterFilter* filter); void removeFilter(RosterFilter* filter); GroupRosterItem* getRoot() const; + std::set<JID> getJIDs() const; + std::vector<RosterFilter*> getFilters() {return filters_;} boost::signal<void (GroupRosterItem*)> onChildrenChanged; boost::signal<void (GroupRosterItem*)> onGroupAdded; |