diff options
Diffstat (limited to 'Swift/Controllers/HistoryViewController.cpp')
-rw-r--r-- | Swift/Controllers/HistoryViewController.cpp | 26 |
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()); } } |