diff options
Diffstat (limited to 'Swift/Controllers/Chat')
| -rw-r--r-- | Swift/Controllers/Chat/ChatController.cpp | 19 | ||||
| -rw-r--r-- | Swift/Controllers/Chat/ChatController.h | 11 | ||||
| -rw-r--r-- | Swift/Controllers/Chat/ChatsManager.cpp | 34 | ||||
| -rw-r--r-- | Swift/Controllers/Chat/ChatsManager.h | 5 | ||||
| -rw-r--r-- | Swift/Controllers/Chat/UnitTest/ChatsManagerTest.cpp | 14 | 
5 files changed, 49 insertions, 34 deletions
diff --git a/Swift/Controllers/Chat/ChatController.cpp b/Swift/Controllers/Chat/ChatController.cpp index 9a56300..ea0e8ea 100644 --- a/Swift/Controllers/Chat/ChatController.cpp +++ b/Swift/Controllers/Chat/ChatController.cpp @@ -1,5 +1,5 @@  /* - * Copyright (c) 2010 Kevin Smith + * Copyright (c) 2010-2012 Kevin Smith   * Licensed under the GNU General Public License v3.   * See Documentation/Licenses/GPLv3.txt for more information.   */ @@ -27,7 +27,7 @@  #include <Swift/Controllers/UIEvents/SendFileUIEvent.h>  #include <Swiften/Elements/DeliveryReceipt.h>  #include <Swiften/Elements/DeliveryReceiptRequest.h> -#include <Swift/Controllers/UIEvents/ToggleRequestDeliveryReceiptsUIEvent.h> +#include <Swift/Controllers/SettingConstants.h>  #include <Swiften/Base/Log.h> @@ -36,8 +36,8 @@ namespace Swift {  /**   * The controller does not gain ownership of the stanzaChannel, nor the factory.   */ -ChatController::ChatController(const JID& self, StanzaChannel* stanzaChannel, IQRouter* iqRouter, ChatWindowFactory* chatWindowFactory, const JID &contact, NickResolver* nickResolver, PresenceOracle* presenceOracle, AvatarManager* avatarManager, bool isInMUC, bool useDelayForLatency, UIEventStream* eventStream, EventController* eventController, TimerFactory* timerFactory, EntityCapsProvider* entityCapsProvider, bool userWantsReceipts) -	: ChatControllerBase(self, stanzaChannel, iqRouter, chatWindowFactory, contact, presenceOracle, avatarManager, useDelayForLatency, eventStream, eventController, timerFactory, entityCapsProvider), eventStream_(eventStream), userWantsReceipts_(userWantsReceipts) { +ChatController::ChatController(const JID& self, StanzaChannel* stanzaChannel, IQRouter* iqRouter, ChatWindowFactory* chatWindowFactory, const JID &contact, NickResolver* nickResolver, PresenceOracle* presenceOracle, AvatarManager* avatarManager, bool isInMUC, bool useDelayForLatency, UIEventStream* eventStream, EventController* eventController, TimerFactory* timerFactory, EntityCapsProvider* entityCapsProvider, bool userWantsReceipts, SettingsProvider* settings) +	: ChatControllerBase(self, stanzaChannel, iqRouter, chatWindowFactory, contact, presenceOracle, avatarManager, useDelayForLatency, eventStream, eventController, timerFactory, entityCapsProvider), eventStream_(eventStream), userWantsReceipts_(userWantsReceipts), settings_(settings) {  	isInMUC_ = isInMUC;  	lastWasPresence_ = false;  	chatStateNotifier_ = new ChatStateNotifier(stanzaChannel, contact, entityCapsProvider); @@ -73,7 +73,8 @@ ChatController::ChatController(const JID& self, StanzaChannel* stanzaChannel, IQ  	chatWindow_->onFileTransferCancel.connect(boost::bind(&ChatController::handleFileTransferCancel, this, _1));  	chatWindow_->onSendFileRequest.connect(boost::bind(&ChatController::handleSendFileRequest, this, _1));  	handleBareJIDCapsChanged(toJID_); -	eventStream_->onUIEvent.connect(boost::bind(&ChatController::handleUIEvent, this, _1)); + +	settings_->onSettingChanged.connect(boost::bind(&ChatController::handleSettingChanged, this, _1));  }  void ChatController::handleContactNickChanged(const JID& jid, const std::string& /*oldNick*/) { @@ -83,7 +84,7 @@ void ChatController::handleContactNickChanged(const JID& jid, const std::string&  }  ChatController::~ChatController() { -	eventStream_->onUIEvent.disconnect(boost::bind(&ChatController::handleUIEvent, this, _1)); +	settings_->onSettingChanged.disconnect(boost::bind(&ChatController::handleSettingChanged, this, _1));  	nickResolver_->onNickChanged.disconnect(boost::bind(&ChatController::handleContactNickChanged, this, _1, _2));  	delete chatStateNotifier_;  	delete chatStateTracker_; @@ -174,9 +175,9 @@ void ChatController::setContactIsReceivingPresence(bool isReceivingPresence) {  	receivingPresenceFromUs_ = isReceivingPresence;  } -void ChatController::handleUIEvent(boost::shared_ptr<UIEvent> event) { -	if (boost::shared_ptr<ToggleRequestDeliveryReceiptsUIEvent> toggleAllowReceipts = boost::dynamic_pointer_cast<ToggleRequestDeliveryReceiptsUIEvent>(event)) { -		userWantsReceipts_ = toggleAllowReceipts->getEnabled(); +void ChatController::handleSettingChanged(const std::string& settingPath) { +	if (settingPath == SettingConstants::REQUEST_DELIVERYRECEIPTS.getKey()) { +		userWantsReceipts_ = settings_->getSetting(SettingConstants::REQUEST_DELIVERYRECEIPTS);  		checkForDisplayingDisplayReceiptsAlert();  	}  } diff --git a/Swift/Controllers/Chat/ChatController.h b/Swift/Controllers/Chat/ChatController.h index 9c01923..2a66772 100644 --- a/Swift/Controllers/Chat/ChatController.h +++ b/Swift/Controllers/Chat/ChatController.h @@ -1,12 +1,12 @@  /* - * Copyright (c) 2010 Kevin Smith + * Copyright (c) 2010-2012 Kevin Smith   * Licensed under the GNU General Public License v3.   * See Documentation/Licenses/GPLv3.txt for more information.   */  #pragma once -#include "Swift/Controllers/Chat/ChatControllerBase.h" +#include <Swift/Controllers/Chat/ChatControllerBase.h>  #include <map>  #include <string> @@ -20,11 +20,11 @@ namespace Swift {  	class NickResolver;  	class EntityCapsProvider;  	class FileTransferController; -	class UIEvent; +	class SettingsProvider;  	class ChatController : public ChatControllerBase {  		public: -			ChatController(const JID& self, StanzaChannel* stanzaChannel, IQRouter* iqRouter, ChatWindowFactory* chatWindowFactory, const JID &contact, NickResolver* nickResolver, PresenceOracle* presenceOracle, AvatarManager* avatarManager, bool isInMUC, bool useDelayForLatency, UIEventStream* eventStream, EventController* eventController, TimerFactory* timerFactory, EntityCapsProvider* entityCapsProvider, bool userWantsReceipts); +			ChatController(const JID& self, StanzaChannel* stanzaChannel, IQRouter* iqRouter, ChatWindowFactory* chatWindowFactory, const JID &contact, NickResolver* nickResolver, PresenceOracle* presenceOracle, AvatarManager* avatarManager, bool isInMUC, bool useDelayForLatency, UIEventStream* eventStream, EventController* eventController, TimerFactory* timerFactory, EntityCapsProvider* entityCapsProvider, bool userWantsReceipts, SettingsProvider* settings);  			virtual ~ChatController();  			virtual void setToJID(const JID& jid);  			virtual void setOnline(bool online); @@ -51,7 +51,7 @@ namespace Swift {  			void handleFileTransferAccept(std::string /* id */, std::string /* filename */);  			void handleSendFileRequest(std::string filename); -			void handleUIEvent(boost::shared_ptr<UIEvent> event); +			void handleSettingChanged(const std::string& settingPath);  			void checkForDisplayingDisplayReceiptsAlert();  		private: @@ -71,6 +71,7 @@ namespace Swift {  			bool receivingPresenceFromUs_;  			bool userWantsReceipts_;  			std::map<std::string, FileTransferController*> ftControllers; +			SettingsProvider* settings_;  	};  } diff --git a/Swift/Controllers/Chat/ChatsManager.cpp b/Swift/Controllers/Chat/ChatsManager.cpp index c19c524..a2b286f 100644 --- a/Swift/Controllers/Chat/ChatsManager.cpp +++ b/Swift/Controllers/Chat/ChatsManager.cpp @@ -21,7 +21,6 @@  #include <Swift/Controllers/UIEvents/AddMUCBookmarkUIEvent.h>  #include <Swift/Controllers/UIEvents/RemoveMUCBookmarkUIEvent.h>  #include <Swift/Controllers/UIEvents/EditMUCBookmarkUIEvent.h> -#include <Swift/Controllers/UIEvents/ToggleRequestDeliveryReceiptsUIEvent.h>  #include <Swift/Controllers/UIInterfaces/ChatListWindowFactory.h>  #include <Swift/Controllers/UIInterfaces/JoinMUCWindow.h>  #include <Swift/Controllers/UIInterfaces/JoinMUCWindowFactory.h> @@ -39,6 +38,8 @@  #include <Swiften/Avatars/AvatarManager.h>  #include <Swiften/Elements/MUCInvitationPayload.h>  #include <Swiften/Roster/XMPPRoster.h> +#include <Swift/Controllers/Settings/SettingsProvider.h> +#include <Swift/Controllers/SettingConstants.h>  namespace Swift { @@ -64,10 +65,11 @@ ChatsManager::ChatsManager(  		EntityCapsProvider* entityCapsProvider,   		MUCManager* mucManager,  		MUCSearchWindowFactory* mucSearchWindowFactory, -		ProfileSettingsProvider* settings, +		ProfileSettingsProvider* profileSettings,  		FileTransferOverview* ftOverview,  		XMPPRoster* roster, -		bool eagleMode) : +		bool eagleMode, +		SettingsProvider* settings) :  			jid_(jid),   			joinMUCWindowFactory_(joinMUCWindowFactory),   			useDelayForLatency_(useDelayForLatency),  @@ -76,7 +78,8 @@ ChatsManager::ChatsManager(  			mucManager(mucManager),  			ftOverview_(ftOverview),  			roster_(roster), -			eagleMode_(eagleMode) { +			eagleMode_(eagleMode), +			settings_(settings) {  	timerFactory_ = timerFactory;  	eventController_ = eventController;  	stanzaChannel_ = stanzaChannel; @@ -89,7 +92,7 @@ ChatsManager::ChatsManager(  	presenceSender_ = presenceSender;  	uiEventStream_ = uiEventStream;  	mucBookmarkManager_ = NULL; -	profileSettings_ = settings; +	profileSettings_ = profileSettings;  	presenceOracle_->onPresenceChange.connect(boost::bind(&ChatsManager::handlePresenceChange, this, _1));  	uiEventConnection_ = uiEventStream_->onUIEvent.connect(boost::bind(&ChatsManager::handleUIEvent, this, _1)); @@ -99,18 +102,22 @@ ChatsManager::ChatsManager(  	chatListWindow_->onClearRecentsRequested.connect(boost::bind(&ChatsManager::handleClearRecentsRequested, this));  	joinMUCWindow_ = NULL; -	mucSearchController_ = new MUCSearchController(jid_, mucSearchWindowFactory, iqRouter, settings); +	mucSearchController_ = new MUCSearchController(jid_, mucSearchWindowFactory, iqRouter, profileSettings_);  	mucSearchController_->onMUCSelected.connect(boost::bind(&ChatsManager::handleMUCSelectedAfterSearch, this, _1));  	ftOverview_->onNewFileTransferController.connect(boost::bind(&ChatsManager::handleNewFileTransferController, this, _1));  	roster_->onJIDAdded.connect(boost::bind(&ChatsManager::handleJIDAddedToRoster, this, _1));  	roster_->onJIDRemoved.connect(boost::bind(&ChatsManager::handleJIDRemovedFromRoster, this, _1));  	roster_->onJIDUpdated.connect(boost::bind(&ChatsManager::handleJIDUpdatedInRoster, this, _1));  	roster_->onRosterCleared.connect(boost::bind(&ChatsManager::handleRosterCleared, this)); + +	settings_->onSettingChanged.connect(boost::bind(&ChatsManager::handleSettingChanged, this, _1)); +  	setupBookmarks();  	loadRecents();  }  ChatsManager::~ChatsManager() { +	settings_->onSettingChanged.disconnect(boost::bind(&ChatsManager::handleSettingChanged, this, _1));  	roster_->onJIDAdded.disconnect(boost::bind(&ChatsManager::handleJIDAddedToRoster, this, _1));  	roster_->onJIDRemoved.disconnect(boost::bind(&ChatsManager::handleJIDRemovedFromRoster, this, _1));  	roster_->onJIDUpdated.disconnect(boost::bind(&ChatsManager::handleJIDUpdatedInRoster, this, _1)); @@ -348,6 +355,13 @@ void ChatsManager::handleUserLeftMUC(MUCController* mucController) {  	}  } +void ChatsManager::handleSettingChanged(const std::string& settingPath) { +	if (settingPath == SettingConstants::REQUEST_DELIVERYRECEIPTS.getKey()) { +		userWantsReceipts_ = settings_->getSetting(SettingConstants::REQUEST_DELIVERYRECEIPTS); +		return; +	} +} +  void ChatsManager::handleUIEvent(boost::shared_ptr<UIEvent> event) {  	boost::shared_ptr<RequestChatUIEvent> chatEvent = boost::dynamic_pointer_cast<RequestChatUIEvent>(event);  	if (chatEvent) { @@ -364,11 +378,7 @@ void ChatsManager::handleUIEvent(boost::shared_ptr<UIEvent> event) {  		mucBookmarkManager_->addBookmark(addMUCBookmarkEvent->getBookmark());  		return;  	} -	boost::shared_ptr<ToggleRequestDeliveryReceiptsUIEvent> toggleRequestDeliveryReceiptsEvent = boost::dynamic_pointer_cast<ToggleRequestDeliveryReceiptsUIEvent>(event); -	if (toggleRequestDeliveryReceiptsEvent) { -		userWantsReceipts_ = toggleRequestDeliveryReceiptsEvent->getEnabled(); -		return; -	} +  	boost::shared_ptr<EditMUCBookmarkUIEvent> editMUCBookmarkEvent = boost::dynamic_pointer_cast<EditMUCBookmarkUIEvent>(event);  	if (editMUCBookmarkEvent) { @@ -489,7 +499,7 @@ ChatController* ChatsManager::getChatControllerOrFindAnother(const JID &contact)  ChatController* ChatsManager::createNewChatController(const JID& contact) {  	assert(chatControllers_.find(contact) == chatControllers_.end()); -	ChatController* controller = new ChatController(jid_, stanzaChannel_, iqRouter_, chatWindowFactory_, contact, nickResolver_, presenceOracle_, avatarManager_, mucRegistry_->isMUC(contact.toBare()), useDelayForLatency_, uiEventStream_, eventController_, timerFactory_, entityCapsProvider_, userWantsReceipts_); +	ChatController* controller = new ChatController(jid_, stanzaChannel_, iqRouter_, chatWindowFactory_, contact, nickResolver_, presenceOracle_, avatarManager_, mucRegistry_->isMUC(contact.toBare()), useDelayForLatency_, uiEventStream_, eventController_, timerFactory_, entityCapsProvider_, userWantsReceipts_, settings_);  	chatControllers_[contact] = controller;  	controller->setAvailableServerFeatures(serverDiscoInfo_);  	controller->onActivity.connect(boost::bind(&ChatsManager::handleChatActivity, this, contact, _1, false)); diff --git a/Swift/Controllers/Chat/ChatsManager.h b/Swift/Controllers/Chat/ChatsManager.h index 0c7f492..4d1fc14 100644 --- a/Swift/Controllers/Chat/ChatsManager.h +++ b/Swift/Controllers/Chat/ChatsManager.h @@ -46,10 +46,11 @@ namespace Swift {  	class FileTransferOverview;  	class FileTransferController;  	class XMPPRoster; +	class SettingsProvider;  	class ChatsManager {  		public: -			ChatsManager(JID jid, StanzaChannel* stanzaChannel, IQRouter* iqRouter, EventController* eventController, ChatWindowFactory* chatWindowFactory, JoinMUCWindowFactory* joinMUCWindowFactory, NickResolver* nickResolver, PresenceOracle* presenceOracle, PresenceSender* presenceSender, UIEventStream* uiEventStream, ChatListWindowFactory* chatListWindowFactory, bool useDelayForLatency, TimerFactory* timerFactory, MUCRegistry* mucRegistry, EntityCapsProvider* entityCapsProvider, MUCManager* mucManager, MUCSearchWindowFactory* mucSearchWindowFactory, ProfileSettingsProvider* settings, FileTransferOverview* ftOverview, XMPPRoster* roster, bool eagleMode); +			ChatsManager(JID jid, StanzaChannel* stanzaChannel, IQRouter* iqRouter, EventController* eventController, ChatWindowFactory* chatWindowFactory, JoinMUCWindowFactory* joinMUCWindowFactory, NickResolver* nickResolver, PresenceOracle* presenceOracle, PresenceSender* presenceSender, UIEventStream* uiEventStream, ChatListWindowFactory* chatListWindowFactory, bool useDelayForLatency, TimerFactory* timerFactory, MUCRegistry* mucRegistry, EntityCapsProvider* entityCapsProvider, MUCManager* mucManager, MUCSearchWindowFactory* mucSearchWindowFactory, ProfileSettingsProvider* settings, FileTransferOverview* ftOverview, XMPPRoster* roster, bool eagleMode, SettingsProvider* settings);  			virtual ~ChatsManager();  			void setAvatarManager(AvatarManager* avatarManager);  			void setOnline(bool enabled); @@ -86,6 +87,7 @@ namespace Swift {  			void handleJIDRemovedFromRoster(const JID&);  			void handleJIDUpdatedInRoster(const JID&);  			void handleRosterCleared(); +			void handleSettingChanged(const std::string& settingPath);  			void updatePresenceReceivingStateOnChatController(const JID&); @@ -125,5 +127,6 @@ namespace Swift {  			XMPPRoster* roster_;  			bool eagleMode_;  			bool userWantsReceipts_; +			SettingsProvider* settings_;  	};  } diff --git a/Swift/Controllers/Chat/UnitTest/ChatsManagerTest.cpp b/Swift/Controllers/Chat/UnitTest/ChatsManagerTest.cpp index 8162bec..cd868e6 100644 --- a/Swift/Controllers/Chat/UnitTest/ChatsManagerTest.cpp +++ b/Swift/Controllers/Chat/UnitTest/ChatsManagerTest.cpp @@ -1,5 +1,5 @@  /* - * Copyright (c) 2010-2011 Kevin Smith + * Copyright (c) 2010-2012 Kevin Smith   * Licensed under the GNU General Public License v3.   * See Documentation/Licenses/GPLv3.txt for more information.   */ @@ -43,12 +43,12 @@  #include "Swift/Controllers/UIEvents/RequestChatUIEvent.h"  #include "Swift/Controllers/UIEvents/JoinMUCUIEvent.h"  #include "Swift/Controllers/UIEvents/UIEventStream.h" -#include "Swift/Controllers/UIEvents/ToggleRequestDeliveryReceiptsUIEvent.h"  #include <Swift/Controllers/ProfileSettingsProvider.h>  #include "Swift/Controllers/FileTransfer/FileTransferOverview.h"  #include "Swiften/Elements/DeliveryReceiptRequest.h"  #include "Swiften/Elements/DeliveryReceipt.h"  #include <Swiften/Base/Algorithm.h> +#include <Swift/Controllers/SettingConstants.h>  using namespace Swift; @@ -102,7 +102,7 @@ public:  		ftOverview_ = new FileTransferOverview(ftManager_);  		mocks_->ExpectCall(chatListWindowFactory_, ChatListWindowFactory::createChatListWindow).With(uiEventStream_).Return(chatListWindow_); -		manager_ = new ChatsManager(jid_, stanzaChannel_, iqRouter_, eventController_, chatWindowFactory_, joinMUCWindowFactory_, nickResolver_, presenceOracle_, directedPresenceSender_, uiEventStream_, chatListWindowFactory_, true, NULL, mucRegistry_, entityCapsManager_, mucManager_, mucSearchWindowFactory_, profileSettings_, ftOverview_, xmppRoster_, false); +		manager_ = new ChatsManager(jid_, stanzaChannel_, iqRouter_, eventController_, chatWindowFactory_, joinMUCWindowFactory_, nickResolver_, presenceOracle_, directedPresenceSender_, uiEventStream_, chatListWindowFactory_, true, NULL, mucRegistry_, entityCapsManager_, mucManager_, mucSearchWindowFactory_, profileSettings_, ftOverview_, xmppRoster_, false, settings_);  		avatarManager_ = new NullAvatarManager();  		manager_->setAvatarManager(avatarManager_); @@ -110,7 +110,6 @@ public:  	void tearDown() {  		//delete chatListWindowFactory -		delete settings_;  		delete profileSettings_;  		delete avatarManager_;  		delete manager_; @@ -132,6 +131,7 @@ public:  		delete capsProvider_;  		delete chatListWindow_;  		delete mocks_; +		delete settings_;  	}  	void testFirstOpenWindowIncoming() { @@ -353,7 +353,7 @@ public:  		MockChatWindow* window = new MockChatWindow();//mocks_->InterfaceMock<ChatWindow>();  		mocks_->ExpectCall(chatWindowFactory_, ChatWindowFactory::createChatWindow).With(messageJID, uiEventStream_).Return(window); -		uiEventStream_->send(boost::shared_ptr<UIEvent>(new ToggleRequestDeliveryReceiptsUIEvent(true))); +		settings_->storeSetting(SettingConstants::REQUEST_DELIVERYRECEIPTS, true);  		boost::shared_ptr<Message> message = makeDeliveryReceiptTestMessage(messageJID, "1");  		manager_->handleIncomingMessage(message); @@ -376,7 +376,7 @@ public:  		MockChatWindow* window = new MockChatWindow();//mocks_->InterfaceMock<ChatWindow>();  		mocks_->ExpectCall(chatWindowFactory_, ChatWindowFactory::createChatWindow).With(messageJID, uiEventStream_).Return(window); -		uiEventStream_->send(boost::shared_ptr<UIEvent>(new ToggleRequestDeliveryReceiptsUIEvent(true))); +		settings_->storeSetting(SettingConstants::REQUEST_DELIVERYRECEIPTS, true);  		boost::shared_ptr<Message> message = makeDeliveryReceiptTestMessage(messageJID, "1");  		manager_->handleIncomingMessage(message); @@ -412,7 +412,7 @@ public:  		MockChatWindow* window = new MockChatWindow();//mocks_->InterfaceMock<ChatWindow>();  		mocks_->ExpectCall(chatWindowFactory_, ChatWindowFactory::createChatWindow).With(messageJID, uiEventStream_).Return(window); -		uiEventStream_->send(boost::shared_ptr<UIEvent>(new ToggleRequestDeliveryReceiptsUIEvent(true))); +		settings_->storeSetting(SettingConstants::REQUEST_DELIVERYRECEIPTS, true);  		boost::shared_ptr<Message> message = makeDeliveryReceiptTestMessage(messageJID, "1");  		manager_->handleIncomingMessage(message);  | 
 Swift