summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
Diffstat (limited to 'Swift/Controllers/HistoryViewController.cpp')
-rw-r--r--Swift/Controllers/HistoryViewController.cpp26
1 files changed, 19 insertions, 7 deletions
diff --git a/Swift/Controllers/HistoryViewController.cpp b/Swift/Controllers/HistoryViewController.cpp
index f88d097..9c10874 100644
--- a/Swift/Controllers/HistoryViewController.cpp
+++ b/Swift/Controllers/HistoryViewController.cpp
@@ -10,15 +10,20 @@
#include <Swift/Controllers/UIEvents/RequestHistoryUIEvent.h>
#include <Swift/Controllers/HistoryController.h>
#include <Swiften/History/HistoryMessage.h>
+#include <Swiften/Base/foreach.h>
+#include <Swiften/Client/NickResolver.h>
+#include <Swiften/Avatars/AvatarManager.h>
namespace Swift {
HistoryViewController::HistoryViewController(
+ const JID& selfJID,
UIEventStream* uiEventStream,
HistoryController* historyController,
NickResolver* nickResolver,
AvatarManager* avatarManager,
HistoryWindowFactory* historyWindowFactory) :
+ selfJID_(selfJID),
uiEventStream_(uiEventStream),
historyController_(historyController),
nickResolver_(nickResolver),
@@ -47,9 +52,13 @@ void HistoryViewController::handleUIEvent(boost::shared_ptr<UIEvent> rawEvent) {
roster_ = new Roster(false, true);
historyWindow_->setRosterModel(roster_);
- std::vector<JID> contacts = historyController_->getAllContacts();
- for (std::vector<JID>::iterator it = contacts.begin(); it != contacts.end(); it++) {
- roster_->addContact(*it, *it, *it, "Recent", "");
+ historyController_->getAllContacts(selfJID_, rooms_, contacts_);
+
+ foreach (const JID& muc, rooms_) {
+ roster_->addContact(muc, muc, nickResolver_->jidToNick(muc), "MUC", byteArrayToString(avatarManager_->getAvatar(muc)));
+ }
+ foreach (const JID& contact, contacts_) {
+ roster_->addContact(contact, contact, nickResolver_->jidToNick(contact), "Contacts", byteArrayToString(avatarManager_->getAvatar(contact)));
}
}
@@ -58,17 +67,20 @@ void HistoryViewController::handleUIEvent(boost::shared_ptr<UIEvent> rawEvent) {
}
void HistoryViewController::handleSelectedContactChanged(RosterItem* newContact) {
- // TODO: check if actually changed
// FIXME: signal is triggerd twice.
if (newContact == NULL) {
return;
}
ContactRosterItem* contact = dynamic_cast<ContactRosterItem*>(newContact);
+ JID contactJID = contact->getJID();
+ bool isRoom = rooms_.count(contactJID);
- std::vector<HistoryMessage> messages; //TODO = historyController_->getMessages(contact->getJID());
- for (std::vector<HistoryMessage>::iterator it = messages.begin(); it != messages.end(); it++) {
- historyWindow_->addMessage(*it);
+ std::vector<HistoryMessage> messages = historyController_->getMessages(selfJID_, contactJID, isRoom);
+ foreach (const HistoryMessage& message, messages) {
+ bool senderIsSelf = message.getFromJID() == selfJID_;
+ std::string avatarPath = byteArrayToString(avatarManager_->getAvatar(message.getFromJID()));
+ historyWindow_->addMessage(message.getMessage(), nickResolver_->jidToNick(message.getFromJID()), senderIsSelf, avatarPath, message.getTime());
}
}