diff options
Diffstat (limited to 'Swift/Controllers/Chat')
| -rw-r--r-- | Swift/Controllers/Chat/MUCSearchController.cpp | 36 | ||||
| -rw-r--r-- | Swift/Controllers/Chat/MUCSearchController.h | 7 | 
2 files changed, 41 insertions, 2 deletions
| diff --git a/Swift/Controllers/Chat/MUCSearchController.cpp b/Swift/Controllers/Chat/MUCSearchController.cpp index 0cf02c7..e4592a9 100644 --- a/Swift/Controllers/Chat/MUCSearchController.cpp +++ b/Swift/Controllers/Chat/MUCSearchController.cpp @@ -21,12 +21,16 @@  namespace Swift { -MUCSearchController::MUCSearchController(const JID& jid, UIEventStream* uiEventStream, MUCSearchWindowFactory* factory, IQRouter* iqRouter) : jid_(jid) { +static const String SEARCHED_SERVICES = "searchedServices"; + +MUCSearchController::MUCSearchController(const JID& jid, UIEventStream* uiEventStream, MUCSearchWindowFactory* factory, IQRouter* iqRouter, SettingsProvider* settings) : jid_(jid) {  	iqRouter_ = iqRouter; +	settings_ = settings;  	uiEventStream_ = uiEventStream;  	uiEventConnection_ = uiEventStream_->onUIEvent.connect(boost::bind(&MUCSearchController::handleUIEvent, this, _1));  	window_ = NULL;  	factory_ = factory; +	loadServices();  }  MUCSearchController::~MUCSearchController() { @@ -39,6 +43,7 @@ void MUCSearchController::handleUIEvent(boost::shared_ptr<UIEvent> event) {  		if (!window_) {  			window_ = factory_->createMUCSearchWindow(uiEventStream_);  			window_->onAddService.connect(boost::bind(&MUCSearchController::handleAddService, this, _1, true)); +			window_->addSavedServices(savedServices_);  			handleAddService(JID(jid_.getDomain()), true);  		}  		window_->setMUC(""); @@ -48,7 +53,36 @@ void MUCSearchController::handleUIEvent(boost::shared_ptr<UIEvent> event) {  	}  } +void MUCSearchController::loadServices() { +	savedServices_.clear(); +	foreach (String stringItem, settings_->getStringSetting(SEARCHED_SERVICES).split('\n')) { +		savedServices_.push_back(JID(stringItem)); +	} +} + +void MUCSearchController::addAndSaveServices(const JID& jid) { +	savedServices_.erase(std::remove(savedServices_.begin(), savedServices_.end(), jid), savedServices_.end()); +	savedServices_.push_back(jid); +	String collapsed; +	bool storeThis = savedServices_.size() < 15; +	foreach (JID jidItem, savedServices_) { +		if (!storeThis) { +			storeThis = true; +			continue; +		} +		if (!collapsed.isEmpty()) { +			collapsed += "\n"; +		} +		collapsed += jidItem.toString(); +	} +	settings_->storeString(SEARCHED_SERVICES, collapsed); +	window_->addSavedServices(savedServices_); +} +  void MUCSearchController::handleAddService(const JID& jid, bool userTriggered) { +	if (userTriggered) { +		addAndSaveServices(jid); +	}  	if (std::find(services_.begin(), services_.end(), jid) != services_.end()) {  		if (!userTriggered) {  			/* No infinite recursion. (Some buggy servers do infinitely deep disco of themselves)*/ diff --git a/Swift/Controllers/Chat/MUCSearchController.h b/Swift/Controllers/Chat/MUCSearchController.h index 44b51d8..10988ad 100644 --- a/Swift/Controllers/Chat/MUCSearchController.h +++ b/Swift/Controllers/Chat/MUCSearchController.h @@ -17,6 +17,7 @@  #include "Swift/Controllers/UIEvents/UIEvent.h"  #include "Swift/Controllers/Chat/MUCSearchController.h" +#include "Swift/Controllers/Settings/SettingsProvider.h"  #include "Swiften/Elements/DiscoInfo.h"  #include "Swiften/Elements/DiscoItems.h"  #include "Swiften/Elements/ErrorPayload.h" @@ -85,7 +86,7 @@ namespace Swift {  	class MUCSearchController {  		public: -		MUCSearchController(const JID& jid, UIEventStream* uiEventStream, MUCSearchWindowFactory* mucSearchWindowFactory, IQRouter* iqRouter); +			MUCSearchController(const JID& jid, UIEventStream* uiEventStream, MUCSearchWindowFactory* mucSearchWindowFactory, IQRouter* iqRouter, SettingsProvider* settings);  			~MUCSearchController();  		private:  			void handleUIEvent(boost::shared_ptr<UIEvent> event); @@ -96,11 +97,15 @@ namespace Swift {  			void handleDiscoError(const JID& jid, const ErrorPayload& error);  			void removeService(const JID& jid);  			void refreshView(); +			void loadServices(); +			void addAndSaveServices(const JID& jid);  			UIEventStream* uiEventStream_;  			MUCSearchWindow* window_;  			MUCSearchWindowFactory* factory_; +			SettingsProvider* settings_;  			boost::bsignals::scoped_connection uiEventConnection_;  			std::vector<JID> services_; +			std::vector<JID> savedServices_;  			std::map<JID, MUCService> serviceDetails_;  			IQRouter* iqRouter_;  			JID jid_; | 
 Swift
 Swift