diff options
| -rw-r--r-- | Swift/Controllers/Chat/ChatsManager.cpp | 19 | ||||
| -rw-r--r-- | Swift/Controllers/UIInterfaces/ChatListWindow.h | 11 | 
2 files changed, 25 insertions, 5 deletions
| diff --git a/Swift/Controllers/Chat/ChatsManager.cpp b/Swift/Controllers/Chat/ChatsManager.cpp index a2abbad..0efbdfd 100644 --- a/Swift/Controllers/Chat/ChatsManager.cpp +++ b/Swift/Controllers/Chat/ChatsManager.cpp @@ -132,7 +132,9 @@ void ChatsManager::loadRecents() {  		std::string activity(recent[1]);  		bool isMUC = recent[2] == "true";  		std::string nick(recent[3]); -		ChatListWindow::Chat chat(jid, nickResolver_->jidToNick(jid), activity, 0, isMUC, nick); +		Presence::ref presence = presenceOracle_->getHighestPriorityPresence(jid.toBare()); +		StatusShow::Type type = presence ? presence->getShow() : StatusShow::None; +		ChatListWindow::Chat chat(jid, nickResolver_->jidToNick(jid), activity, 0, type, isMUC, nick);  		prependRecent(chat);  	}  	handleUnreadCountChanged(NULL); @@ -177,7 +179,10 @@ ChatListWindow::Chat ChatsManager::createChatListChatItem(const JID& jid, const  	if (controller) {  		unreadCount = controller->getUnreadCount();  	} -	return ChatListWindow::Chat(jid, nickResolver_->jidToNick(jid), activity, unreadCount, false); + +	Presence::ref presence = presenceOracle_->getHighestPriorityPresence(jid.toBare()); +	StatusShow::Type type = presence ? presence->getShow() : StatusShow::None; +	return ChatListWindow::Chat(jid, nickResolver_->jidToNick(jid), activity, unreadCount, type, false);  }  void ChatsManager::handleChatActivity(const JID& jid, const std::string& activity) { @@ -265,6 +270,16 @@ void ChatsManager::handleUIEvent(boost::shared_ptr<UIEvent> event) {   */  void ChatsManager::handlePresenceChange(boost::shared_ptr<Presence> newPresence) {  	if (mucRegistry_->isMUC(newPresence->getFrom().toBare())) return; + +	foreach (ChatListWindow::Chat& chat, recentChats_) { +		if (newPresence->getFrom().toBare() == chat.jid.toBare()) { +			Presence::ref presence = presenceOracle_->getHighestPriorityPresence(chat.jid.toBare()); +			chat.setStatusType(presence ? presence->getShow() : StatusShow::None); +			chatListWindow_->setRecents(recentChats_); +			break; +		} +	} +  	//if (newPresence->getType() != Presence::Unavailable) return;  	JID fullJID(newPresence->getFrom());  	std::map<JID, ChatController*>::iterator it = chatControllers_.find(fullJID); diff --git a/Swift/Controllers/UIInterfaces/ChatListWindow.h b/Swift/Controllers/UIInterfaces/ChatListWindow.h index 477de04..94d400d 100644 --- a/Swift/Controllers/UIInterfaces/ChatListWindow.h +++ b/Swift/Controllers/UIInterfaces/ChatListWindow.h @@ -9,16 +9,17 @@  #include <list>  #include <boost/shared_ptr.hpp>  #include <Swiften/MUC/MUCBookmark.h> +#include <Swiften/Elements/StatusShow.h> -#include "Swiften/Base/boost_bsignals.h" +#include <Swiften/Base/boost_bsignals.h>  namespace Swift {  	class ChatListWindow {  		public:  			class Chat {  				public: -					Chat(const JID& jid, const std::string& chatName, const std::string& activity, int unreadCount, bool isMUC, const std::string& nick = "") -					: jid(jid), chatName(chatName), activity(activity), isMUC(isMUC), nick(nick), unreadCount(unreadCount) {} +					Chat(const JID& jid, const std::string& chatName, const std::string& activity, int unreadCount, StatusShow::Type statusType, bool isMUC, const std::string& nick = "") +					: jid(jid), chatName(chatName), activity(activity), statusType(statusType), isMUC(isMUC), nick(nick), unreadCount(unreadCount) {}  					/** Assume that nicks and other transient features aren't important for equality */  					bool operator==(const Chat& other) const {  						return jid.toBare() == other.jid.toBare() @@ -27,9 +28,13 @@ namespace Swift {  					void setUnreadCount(int unread) {  						unreadCount = unread;  					} +					void setStatusType(StatusShow::Type type) { +						statusType = type; +					}  					JID jid;  					std::string chatName;  					std::string activity; +					StatusShow::Type statusType;  					bool isMUC;  					std::string nick;  					int unreadCount; | 
 Swift
 Swift