diff options
Diffstat (limited to 'Swift/Controllers/Chat/MUCSearchController.cpp')
| -rw-r--r-- | Swift/Controllers/Chat/MUCSearchController.cpp | 36 | 
1 files changed, 35 insertions, 1 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)*/  | 
 Swift