summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTobias Markmann <tm@ayena.de>2015-10-01 10:09:04 (GMT)
committerKevin Smith <kevin.smith@isode.com>2015-10-30 14:23:56 (GMT)
commit50a3962e4d0b16fd0316be54121cfb293c3117bd (patch)
treedc85f9fd75c14542f5f1f00a3878891400ef2f41 /Swift/Controllers
parent3a153509d27882e29456ffc7bf67d9cf32d86d52 (diff)
downloadswift-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.cpp22
-rw-r--r--Swift/Controllers/Roster/Roster.h2
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
50GroupRosterItem* Roster::getRoot() const { 50GroupRosterItem* Roster::getRoot() const {
51 return root_; 51 return root_;
52} 52}
53 53
54std::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
54GroupRosterItem* Roster::getGroup(const std::string& groupName) { 76GroupRosterItem* 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;