From 8a18d6692c246adf14a8b0aec270f9b96d1b4baf Mon Sep 17 00:00:00 2001 From: Kevin Smith Date: Thu, 12 May 2011 17:02:33 +0100 Subject: Remove duplicate entries from the recent chat list. Resolves: #860 diff --git a/Swift/Controllers/Chat/ChatsManager.cpp b/Swift/Controllers/Chat/ChatsManager.cpp index b60f9a3..0af1a81 100644 --- a/Swift/Controllers/Chat/ChatsManager.cpp +++ b/Swift/Controllers/Chat/ChatsManager.cpp @@ -129,9 +129,9 @@ void ChatsManager::loadRecents() { bool isMUC = recent[2] == "true"; std::string nick(recent[3]); ChatListWindow::Chat chat(jid, nickResolver_->jidToNick(jid), activity, isMUC, nick); - recentChats_.push_back(chat); - chatListWindow_->setRecents(recentChats_); + prependRecent(chat); } + chatListWindow_->setRecents(recentChats_); } void ChatsManager::setupBookmarks() { @@ -171,12 +171,21 @@ void ChatsManager::handleChatActivity(const JID& jid, const std::string& activit /* FIXME: MUC use requires changes here. */ ChatListWindow::Chat chat(jid, nickResolver_->jidToNick(jid), activity, false); /* FIXME: handle nick changes */ - recentChats_.erase(std::remove(recentChats_.begin(), recentChats_.end(), chat), recentChats_.end()); - recentChats_.push_front(chat); + appendRecent(chat); chatListWindow_->setRecents(recentChats_); saveRecents(); } +void ChatsManager::appendRecent(const ChatListWindow::Chat& chat) { + recentChats_.erase(std::remove(recentChats_.begin(), recentChats_.end(), chat), recentChats_.end()); + recentChats_.push_front(chat); +} + +void ChatsManager::prependRecent(const ChatListWindow::Chat& chat) { + recentChats_.erase(std::remove(recentChats_.begin(), recentChats_.end(), chat), recentChats_.end()); + recentChats_.push_back(chat); +} + void ChatsManager::handleUserLeftMUC(MUCController* mucController) { std::map::iterator it; for (it = mucControllers_.begin(); it != mucControllers_.end(); it++) { diff --git a/Swift/Controllers/Chat/ChatsManager.h b/Swift/Controllers/Chat/ChatsManager.h index f489034..170e87c 100644 --- a/Swift/Controllers/Chat/ChatsManager.h +++ b/Swift/Controllers/Chat/ChatsManager.h @@ -64,6 +64,8 @@ namespace Swift { void handleUserLeftMUC(MUCController* mucController); void handleBookmarksReady(); void handleChatActivity(const JID& jid, const std::string& activity); + void appendRecent(const ChatListWindow::Chat& chat); + void prependRecent(const ChatListWindow::Chat& chat); void setupBookmarks(); void loadRecents(); void saveRecents(); diff --git a/Swift/Controllers/UIInterfaces/ChatListWindow.h b/Swift/Controllers/UIInterfaces/ChatListWindow.h index f717684..a52f24d 100644 --- a/Swift/Controllers/UIInterfaces/ChatListWindow.h +++ b/Swift/Controllers/UIInterfaces/ChatListWindow.h @@ -17,7 +17,7 @@ namespace Swift { public: Chat(const JID& jid, const std::string& chatName, const std::string& activity, bool isMUC, const std::string& nick = "") : jid(jid), chatName(chatName), activity(activity), isMUC(isMUC), nick(nick) {} /** Assume that nicks aren't important for equality */ - bool operator==(const Chat& other) const {return jid == other.jid && isMUC == other.isMUC;}; + bool operator==(const Chat& other) const {return jid.toBare() == other.jid.toBare() && isMUC == other.isMUC;}; JID jid; std::string chatName; std::string activity; -- cgit v0.10.2-6-g49f6