diff options
Diffstat (limited to 'Swiften')
-rw-r--r-- | Swiften/MUC/MUC.cpp | 5 | ||||
-rw-r--r-- | Swiften/MUC/MUC.h | 2 | ||||
-rw-r--r-- | Swiften/Roster/ContactRosterItem.cpp | 11 | ||||
-rw-r--r-- | Swiften/Roster/ContactRosterItem.h | 5 | ||||
-rw-r--r-- | Swiften/Roster/Roster.cpp | 4 | ||||
-rw-r--r-- | Swiften/Roster/Roster.h | 2 | ||||
-rw-r--r-- | Swiften/Roster/UnitTest/RosterTest.cpp | 24 |
7 files changed, 33 insertions, 20 deletions
diff --git a/Swiften/MUC/MUC.cpp b/Swiften/MUC/MUC.cpp index 60b81a0..b4265b5 100644 --- a/Swiften/MUC/MUC.cpp +++ b/Swiften/MUC/MUC.cpp @@ -88,16 +88,17 @@ void MUC::handleIncomingPresence(boost::shared_ptr<Presence> presence) { } else if (presence->getType() == Presence::Available) { std::map<String, MUCOccupant>::iterator it = occupants.find(nick); + MUCOccupant occupant(nick, role, affiliation); if (it != occupants.end()) { MUCOccupant oldOccupant = it->second; if (oldOccupant.getRole() != role) { - onOccupantRoleChanged(nick, role, oldOccupant.getRole()); + onOccupantRoleChanged(nick, occupant, oldOccupant.getRole()); } if (oldOccupant.getAffiliation() != affiliation) { onOccupantAffiliationChanged(nick, affiliation, oldOccupant.getAffiliation()); } } - std::pair<std::map<String, MUCOccupant>::iterator, bool> result = occupants.insert(std::make_pair(nick, MUCOccupant(nick, role, affiliation))); + std::pair<std::map<String, MUCOccupant>::iterator, bool> result = occupants.insert(std::make_pair(nick, occupant)); if (result.second) { onOccupantJoined(result.first->second); } diff --git a/Swiften/MUC/MUC.h b/Swiften/MUC/MUC.h index 4bf56c9..40fc2f6 100644 --- a/Swiften/MUC/MUC.h +++ b/Swiften/MUC/MUC.h @@ -41,7 +41,7 @@ namespace Swift { boost::signal<void (const String& /*nick*/)> onJoinComplete; boost::signal<void (boost::shared_ptr<ErrorPayload>)> onJoinFailed; boost::signal<void (boost::shared_ptr<Presence>)> onOccupantPresenceChange; - boost::signal<void (const String&, const MUCOccupant::Role& /*new*/, const MUCOccupant::Role& /*old*/)> onOccupantRoleChanged; + boost::signal<void (const String&, const MUCOccupant& /*now*/, const MUCOccupant::Role& /*old*/)> onOccupantRoleChanged; boost::signal<void (const String&, const MUCOccupant::Affiliation& /*new*/, const MUCOccupant::Affiliation& /*old*/)> onOccupantAffiliationChanged; boost::signal<void (const MUCOccupant&)> onOccupantJoined; boost::signal<void (const MUCOccupant&, LeavingType, const String& /*reason*/)> onOccupantLeft; diff --git a/Swiften/Roster/ContactRosterItem.cpp b/Swiften/Roster/ContactRosterItem.cpp index 2d5082c..a9591a5 100644 --- a/Swiften/Roster/ContactRosterItem.cpp +++ b/Swiften/Roster/ContactRosterItem.cpp @@ -10,7 +10,7 @@ namespace Swift { -ContactRosterItem::ContactRosterItem(const JID& jid, const String& name, GroupRosterItem* parent) : RosterItem(name, parent), jid_(jid) { +ContactRosterItem::ContactRosterItem(const JID& jid, const JID& displayJID, const String& name, GroupRosterItem* parent) : RosterItem(name, parent), jid_(jid), displayJID_(displayJID) { } ContactRosterItem::~ContactRosterItem() { @@ -48,6 +48,15 @@ const JID& ContactRosterItem::getJID() const { return jid_; } +void ContactRosterItem::setDisplayJID(const JID& jid) { + displayJID_ = jid; +} + +const JID& ContactRosterItem::getDisplayJID() const { + return displayJID_; +} + + typedef std::pair<String, boost::shared_ptr<Presence> > StringPresencePair; void ContactRosterItem::calculateShownPresence() { diff --git a/Swiften/Roster/ContactRosterItem.h b/Swiften/Roster/ContactRosterItem.h index d4c92aa..21f6024 100644 --- a/Swiften/Roster/ContactRosterItem.h +++ b/Swiften/Roster/ContactRosterItem.h @@ -22,7 +22,7 @@ namespace Swift { class GroupRosterItem; class ContactRosterItem : public RosterItem { public: - ContactRosterItem(const JID& jid, const String& name, GroupRosterItem* parent); + ContactRosterItem(const JID& jid, const JID& displayJID, const String& name, GroupRosterItem* parent); virtual ~ContactRosterItem(); StatusShow::Type getStatusShow() const; @@ -31,11 +31,14 @@ class ContactRosterItem : public RosterItem { void setAvatarPath(const String& path); const String& getAvatarPath() const; const JID& getJID() const; + void setDisplayJID(const JID& jid); + const JID& getDisplayJID() const; void applyPresence(const String& resource, boost::shared_ptr<Presence> presence); void clearPresence(); void calculateShownPresence(); private: JID jid_; + JID displayJID_; String avatarPath_; bool hidden_; std::map<String, boost::shared_ptr<Presence> > presences_; diff --git a/Swiften/Roster/Roster.cpp b/Swiften/Roster/Roster.cpp index 9291421..b7ed6c4 100644 --- a/Swiften/Roster/Roster.cpp +++ b/Swiften/Roster/Roster.cpp @@ -67,9 +67,9 @@ void Roster::handleChildrenChanged(GroupRosterItem* item) { onChildrenChanged(item); } -void Roster::addContact(const JID& jid, const String& name, const String& groupName) { +void Roster::addContact(const JID& jid, const JID& displayJID, const String& name, const String& groupName) { GroupRosterItem* group(getGroup(groupName)); - ContactRosterItem *item = new ContactRosterItem(jid, name, group); + ContactRosterItem *item = new ContactRosterItem(jid, displayJID, name, group); group->addChild(item); itemMap_[fullJIDMapping_ ? jid : jid.toBare()].push_back(item); item->onDataChanged.connect(boost::bind(&Roster::handleDataChanged, this, item)); diff --git a/Swiften/Roster/Roster.h b/Swiften/Roster/Roster.h index 78606e8..346157e 100644 --- a/Swiften/Roster/Roster.h +++ b/Swiften/Roster/Roster.h @@ -28,7 +28,7 @@ class Roster { Roster(bool fullJIDMapping = false); ~Roster(); - void addContact(const JID& jid, const String& name, const String& group); + void addContact(const JID& jid, const JID& displayJID, const String& name, const String& group); void removeContact(const JID& jid); void removeContactFromGroup(const JID& jid, const String& group); void applyOnItems(const RosterItemOperation& operation); diff --git a/Swiften/Roster/UnitTest/RosterTest.cpp b/Swiften/Roster/UnitTest/RosterTest.cpp index d170396..13a4ab0 100644 --- a/Swiften/Roster/UnitTest/RosterTest.cpp +++ b/Swiften/Roster/UnitTest/RosterTest.cpp @@ -43,9 +43,9 @@ class RosterTest : public CppUnit::TestFixture } void testGetGroup() { - roster_->addContact(jid1_, "Bert", "group1"); - roster_->addContact(jid2_, "Ernie", "group2"); - roster_->addContact(jid3_, "Cookie", "group1"); + roster_->addContact(jid1_, JID(), "Bert", "group1"); + roster_->addContact(jid2_, JID(), "Ernie", "group2"); + roster_->addContact(jid3_, JID(), "Cookie", "group1"); CPPUNIT_ASSERT_EQUAL(2, (int)roster_->getRoot()->getChildren().size()); CPPUNIT_ASSERT_EQUAL(String("group1"), roster_->getRoot()->getChildren()[0]->getDisplayName()); @@ -57,7 +57,7 @@ class RosterTest : public CppUnit::TestFixture } void testRemoveContact() { - roster_->addContact(jid1_, "Bert", "group1"); + roster_->addContact(jid1_, jid1_, "Bert", "group1"); CPPUNIT_ASSERT_EQUAL(String("Bert"), ((GroupRosterItem*)roster_->getRoot()->getChildren()[0])->getChildren()[0]->getDisplayName()); roster_->removeContact(jid1_); @@ -65,8 +65,8 @@ class RosterTest : public CppUnit::TestFixture } void testRemoveSecondContact() { - roster_->addContact(jid1_, "Bert", "group1"); - roster_->addContact(jid2_, "Cookie", "group1"); + roster_->addContact(jid1_, jid1_, "Bert", "group1"); + roster_->addContact(jid2_, jid2_, "Cookie", "group1"); CPPUNIT_ASSERT_EQUAL(String("Cookie"), ((GroupRosterItem*)roster_->getRoot()->getChildren()[0])->getChildren()[1]->getDisplayName()); roster_->removeContact(jid2_); @@ -77,8 +77,8 @@ class RosterTest : public CppUnit::TestFixture void testRemoveSecondContactSameBare() { JID jid4a("a@b/c"); JID jid4b("a@b/d"); - roster_->addContact(jid4a, "Bert", "group1"); - roster_->addContact(jid4b, "Cookie", "group1"); + roster_->addContact(jid4a, JID(), "Bert", "group1"); + roster_->addContact(jid4b, JID(), "Cookie", "group1"); CPPUNIT_ASSERT_EQUAL(String("Cookie"), ((GroupRosterItem*)roster_->getRoot()->getChildren()[0])->getChildren()[1]->getDisplayName()); roster_->removeContact(jid4b); @@ -90,11 +90,11 @@ class RosterTest : public CppUnit::TestFixture JID jid4a("a@b/c"); JID jid4b("a@b/d"); JID jid4c("a@b/e"); - roster_->addContact(jid4a, "Bird", "group1"); - roster_->addContact(jid4b, "Cookie", "group1"); + roster_->addContact(jid4a, JID(), "Bird", "group1"); + roster_->addContact(jid4b, JID(), "Cookie", "group1"); roster_->removeContact(jid4b); - roster_->addContact(jid4c, "Bert", "group1"); - roster_->addContact(jid4b, "Ernie", "group1"); + roster_->addContact(jid4c, JID(), "Bert", "group1"); + roster_->addContact(jid4b, JID(), "Ernie", "group1"); boost::shared_ptr<Presence> presence(new Presence()); presence->setShow(StatusShow::DND); presence->setFrom(jid4a); |