summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorKevin Smith <git@kismith.co.uk>2011-05-12 16:02:33 (GMT)
committerKevin Smith <git@kismith.co.uk>2011-05-12 16:02:33 (GMT)
commit8a18d6692c246adf14a8b0aec270f9b96d1b4baf (patch)
treee2f327fa3f1bb6486949e0be3dfec25f8b855d9e
parente8c0dfa8173b3e6bf1b8274d183f633585a0bec5 (diff)
downloadswift-contrib-8a18d6692c246adf14a8b0aec270f9b96d1b4baf.zip
swift-contrib-8a18d6692c246adf14a8b0aec270f9b96d1b4baf.tar.bz2
Remove duplicate entries from the recent chat list.
Resolves: #860
-rw-r--r--Swift/Controllers/Chat/ChatsManager.cpp17
-rw-r--r--Swift/Controllers/Chat/ChatsManager.h2
-rw-r--r--Swift/Controllers/UIInterfaces/ChatListWindow.h2
3 files changed, 16 insertions, 5 deletions
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<JID, MUCController*>::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;