diff options
| author | Tobias Markmann <tm@ayena.de> | 2012-03-14 21:36:10 (GMT) | 
|---|---|---|
| committer | Kevin Smith <git@kismith.co.uk> | 2012-03-20 18:15:37 (GMT) | 
| commit | 3d27d98ccc232ae7bfacfd5a3f85f44b6c2e9cc9 (patch) | |
| tree | cae0589a1826560668683d2129fe024148d4e43d /Swift/Controllers/ContactEditController.cpp | |
| parent | 138223ab9ca917420d107d95a113e7628c27bac5 (diff) | |
| download | swift-contrib-3d27d98ccc232ae7bfacfd5a3f85f44b6c2e9cc9.zip swift-contrib-3d27d98ccc232ae7bfacfd5a3f85f44b6c2e9cc9.tar.bz2  | |
Naming suggestion for 'Add Contact'-dialog and "Edit Contact"-dialog based on vCards.
License: This patch is BSD-licensed, see http://www.opensource.org/licenses/bsd-license.php
Diffstat (limited to 'Swift/Controllers/ContactEditController.cpp')
| -rw-r--r-- | Swift/Controllers/ContactEditController.cpp | 37 | 
1 files changed, 35 insertions, 2 deletions
diff --git a/Swift/Controllers/ContactEditController.cpp b/Swift/Controllers/ContactEditController.cpp index b4729a8..a8b171c 100644 --- a/Swift/Controllers/ContactEditController.cpp +++ b/Swift/Controllers/ContactEditController.cpp @@ -1,30 +1,32 @@  /*   * Copyright (c) 2010 Remko Tronçon   * Licensed under the GNU General Public License v3.   * See Documentation/Licenses/GPLv3.txt for more information.   */  #include <Swift/Controllers/ContactEditController.h> +#include <boost/algorithm/string.hpp>  #include <boost/bind.hpp>  #include <boost/smart_ptr/make_shared.hpp>  #include <Swift/Controllers/UIEvents/RequestContactEditorUIEvent.h>  #include <Swift/Controllers/UIEvents/UIEventStream.h>  #include <Swift/Controllers/UIEvents/RemoveRosterItemUIEvent.h>  #include <Swift/Controllers/UIInterfaces/ContactEditWindowFactory.h>  #include <Swift/Controllers/Roster/RosterController.h> +#include <Swiften/VCards/VCardManager.h>  namespace Swift { -ContactEditController::ContactEditController(RosterController* rosterController, ContactEditWindowFactory* contactEditWindowFactory, UIEventStream* uiEventStream) : rosterController(rosterController), contactEditWindowFactory(contactEditWindowFactory), uiEventStream(uiEventStream), contactEditWindow(NULL) { +ContactEditController::ContactEditController(RosterController* rosterController, VCardManager* vcardManager, ContactEditWindowFactory* contactEditWindowFactory, UIEventStream* uiEventStream) : rosterController(rosterController), vcardManager(vcardManager), contactEditWindowFactory(contactEditWindowFactory), uiEventStream(uiEventStream), contactEditWindow(NULL) {  	uiEventStream->onUIEvent.connect(boost::bind(&ContactEditController::handleUIEvent, this, _1));  }  ContactEditController::~ContactEditController() {  	if (contactEditWindow) {  		contactEditWindow->onChangeContactRequest.disconnect(boost::bind(&ContactEditController::handleChangeContactRequest, this, _1, _2));  		contactEditWindow->onRemoveContactRequest.disconnect(boost::bind(&ContactEditController::handleRemoveContactRequest, this));  		delete contactEditWindow;  	} @@ -38,28 +40,59 @@ void ContactEditController::handleUIEvent(UIEvent::ref event) {  	}  	if (!contactEditWindow) {  		contactEditWindow = contactEditWindowFactory->createContactEditWindow();  		contactEditWindow->onRemoveContactRequest.connect(boost::bind(&ContactEditController::handleRemoveContactRequest, this));  		contactEditWindow->onChangeContactRequest.connect(boost::bind(&ContactEditController::handleChangeContactRequest, this, _1, _2));  	}  	currentContact = rosterController->getItem(editEvent->getJID());  	assert(currentContact); -	contactEditWindow->setContact(currentContact->getJID(), currentContact->getName(), currentContact->getGroups(), rosterController->getGroups()); +	jid = rosterController->getItem(editEvent->getJID())->getJID(); +	contactEditWindow->setContact(jid, currentContact->getName(), currentContact->getGroups(), rosterController->getGroups());  	contactEditWindow->show(); + +	if (vcardManager) { +		VCard::ref vcard = vcardManager->getVCardAndRequestWhenNeeded(jid); +		if (vcard) { +			handleVCardChanged(jid, vcard); +		} +	} +} + +void ContactEditController::handleVCardChanged(const JID &jid, VCard::ref vcard) { +	if (jid == this->jid) { +		contactEditWindow->setNameSuggestions(nameSuggestionsFromVCard(vcard)); +	}  }  void ContactEditController::setAvailable(bool b) {  	if (contactEditWindow) {  		contactEditWindow->setEnabled(b);  	}  } +std::vector<std::string> ContactEditController::nameSuggestionsFromVCard(VCard::ref vcard) { +	std::vector<std::string> suggestions; +	if (!vcard->getNickname().empty()) { +		suggestions.push_back(vcard->getNickname()); +	} +	if (!vcard->getFullName().empty()) { +		suggestions.push_back(vcard->getFullName()); +	} +	if (!vcard->getGivenName().empty()) { +		std::string suggestedName; +		suggestedName = vcard->getGivenName(); +		boost::algorithm::trim(suggestedName); +		suggestions.push_back(suggestedName); +	} +	return suggestions; +} +  void ContactEditController::handleRemoveContactRequest() {  	assert(currentContact);  	uiEventStream->send(boost::make_shared<RemoveRosterItemUIEvent>(currentContact->getJID()));  	contactEditWindow->hide();  }  void ContactEditController::handleChangeContactRequest(const std::string& name, const std::set<std::string>& newGroups) {  	std::vector<std::string> oldGroupsVector = currentContact->getGroups();  	std::set<std::string> oldGroups(oldGroupsVector.begin(), oldGroupsVector.end());  | 
 Swift