summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--Swift/Controllers/MUCController.cpp16
-rw-r--r--Swift/Controllers/MUCController.h1
2 files changed, 16 insertions, 1 deletions
diff --git a/Swift/Controllers/MUCController.cpp b/Swift/Controllers/MUCController.cpp
index da7a9e7..4d0acca 100644
--- a/Swift/Controllers/MUCController.cpp
+++ b/Swift/Controllers/MUCController.cpp
@@ -2,15 +2,17 @@
#include <boost/bind.hpp>
#include "Swiften/Base/foreach.h"
#include "Swift/Controllers/ChatWindow.h"
#include "Swift/Controllers/ChatWindowFactory.h"
+#include "Swiften/Avatars/AvatarManager.h"
#include "Swiften/MUC/MUC.h"
#include "Swiften/Client/StanzaChannel.h"
#include "Swiften/Roster/Roster.h"
+#include "Swiften/Roster/SetAvatar.h"
#include "Swiften/Roster/SetPresence.h"
#include "Swiften/Roster/TreeWidgetFactory.h"
namespace Swift {
/**
@@ -36,25 +38,37 @@ MUCController::MUCController (
muc_->joinAs(nick);
muc_->onOccupantJoined.connect(boost::bind(&MUCController::handleOccupantJoined, this, _1));
muc_->onOccupantPresenceChange.connect(boost::bind(&MUCController::handleOccupantPresenceChange, this, _1));
muc_->onOccupantLeft.connect(boost::bind(&MUCController::handleOccupantLeft, this, _1, _2, _3));
chatWindow_->convertToMUC();
chatWindow_->show();
+ if (avatarManager_ != NULL) {
+ avatarManager_->onAvatarChanged.connect(boost::bind(&MUCController::handleAvatarChanged, this, _1, _2));
+ }
}
MUCController::~MUCController() {
delete muc_;
delete roster_;
}
+void MUCController::handleAvatarChanged(const JID& jid, const String&) {
+ String path = avatarManager_->getAvatarPath(jid).string();
+ roster_->applyOnItems(SetAvatar(jid, path, JID::WithResource));
+}
+
void MUCController::handleWindowClosed() {
muc_->part();
}
void MUCController::handleOccupantJoined(const MUCOccupant& occupant) {
- roster_->addContact(JID(toJID_.getNode(), toJID_.getDomain(), occupant.getNick()), occupant.getNick(), "Occupants");
+ JID jid(JID(toJID_.getNode(), toJID_.getDomain(), occupant.getNick()));
+ roster_->addContact(jid, occupant.getNick(), "Occupants");
+ if (avatarManager_ != NULL) {
+ handleAvatarChanged(jid, "dummy");
+ }
}
void MUCController::handleOccupantLeft(const MUCOccupant& occupant, MUC::LeavingType, const String& /*reason*/) {
roster_->removeContact(JID(toJID_.getNode(), toJID_.getDomain(), occupant.getNick()));
}
diff --git a/Swift/Controllers/MUCController.h b/Swift/Controllers/MUCController.h
index 7ee6e81..aa5a274 100644
--- a/Swift/Controllers/MUCController.h
+++ b/Swift/Controllers/MUCController.h
@@ -29,12 +29,13 @@ namespace Swift {
void preSendMessageRequest(boost::shared_ptr<Message> message);
bool isIncomingMessageFromMe(boost::shared_ptr<Message> message);
String senderDisplayNameFromMessage(const JID& from);
private:
void handleWindowClosed();
+ void handleAvatarChanged(const JID& jid, const String&);
void handleOccupantJoined(const MUCOccupant& occupant);
void handleOccupantLeft(const MUCOccupant& occupant, MUC::LeavingType type, const String& reason);
void handleOccupantPresenceChange(boost::shared_ptr<Presence> presence);
private:
MUC *muc_;