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 | |||
@@ -49,10 +49,32 @@ Roster::~Roster() { | |||
49 | 49 | ||
50 | GroupRosterItem* Roster::getRoot() const { | 50 | GroupRosterItem* Roster::getRoot() const { |
51 | return root_; | 51 | return root_; |
52 | } | 52 | } |
53 | 53 | ||
54 | std::set<JID> Roster::getJIDs() const { | ||
55 | std::set<JID> jids; | ||
56 | |||
57 | std::deque<RosterItem*> queue; | ||
58 | queue.push_back(root_); | ||
59 | while (!queue.empty()) { | ||
60 | RosterItem* item = *queue.begin(); | ||
61 | queue.pop_front(); | ||
62 | GroupRosterItem* group = dynamic_cast<GroupRosterItem*>(item); | ||
63 | ContactRosterItem *contact = dynamic_cast<ContactRosterItem*>(item); | ||
64 | if (contact) { | ||
65 | jids.insert(contact->getJID()); | ||
66 | jids.insert(contact->getDisplayJID()); | ||
67 | } | ||
68 | else if (group) { | ||
69 | queue.insert(queue.begin(), group->getChildren().begin(), group->getChildren().end()); | ||
70 | } | ||
71 | } | ||
72 | |||
73 | return jids; | ||
74 | } | ||
75 | |||
54 | GroupRosterItem* Roster::getGroup(const std::string& groupName) { | 76 | GroupRosterItem* Roster::getGroup(const std::string& groupName) { |
55 | foreach (RosterItem *item, root_->getChildren()) { | 77 | foreach (RosterItem *item, root_->getChildren()) { |
56 | GroupRosterItem *group = dynamic_cast<GroupRosterItem*>(item); | 78 | GroupRosterItem *group = dynamic_cast<GroupRosterItem*>(item); |
57 | if (group && group->getDisplayName() == groupName) { | 79 | if (group && group->getDisplayName() == groupName) { |
58 | return group; | 80 | return group; |
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 | |||
@@ -40,10 +40,12 @@ class Roster { | |||
40 | void applyOnAllItems(const RosterItemOperation& operation); | 40 | void applyOnAllItems(const RosterItemOperation& operation); |
41 | void applyOnItem(const RosterItemOperation& operation, const JID& jid); | 41 | void applyOnItem(const RosterItemOperation& operation, const JID& jid); |
42 | void addFilter(RosterFilter* filter); | 42 | void addFilter(RosterFilter* filter); |
43 | void removeFilter(RosterFilter* filter); | 43 | void removeFilter(RosterFilter* filter); |
44 | GroupRosterItem* getRoot() const; | 44 | GroupRosterItem* getRoot() const; |
45 | std::set<JID> getJIDs() const; | ||
46 | |||
45 | std::vector<RosterFilter*> getFilters() {return filters_;} | 47 | std::vector<RosterFilter*> getFilters() {return filters_;} |
46 | boost::signal<void (GroupRosterItem*)> onChildrenChanged; | 48 | boost::signal<void (GroupRosterItem*)> onChildrenChanged; |
47 | boost::signal<void (GroupRosterItem*)> onGroupAdded; | 49 | boost::signal<void (GroupRosterItem*)> onGroupAdded; |
48 | boost::signal<void (RosterItem*)> onDataChanged; | 50 | boost::signal<void (RosterItem*)> onDataChanged; |
49 | boost::signal<void (JID&)> onVCardUpdateRequested; | 51 | boost::signal<void (JID&)> onVCardUpdateRequested; |