diff options
Diffstat (limited to 'Swift/Controllers')
-rw-r--r-- | Swift/Controllers/Chat/UserSearchController.cpp | 23 | ||||
-rw-r--r-- | Swift/Controllers/Chat/UserSearchController.h | 1 | ||||
-rw-r--r-- | Swift/Controllers/UIInterfaces/UserSearchWindow.h | 2 |
3 files changed, 26 insertions, 0 deletions
diff --git a/Swift/Controllers/Chat/UserSearchController.cpp b/Swift/Controllers/Chat/UserSearchController.cpp index f1849c9..2d3f1ae 100644 --- a/Swift/Controllers/Chat/UserSearchController.cpp +++ b/Swift/Controllers/Chat/UserSearchController.cpp @@ -15,12 +15,13 @@ #include <Swiften/Disco/GetDiscoItemsRequest.h> #include <Swiften/Disco/DiscoServiceWalker.h> #include <Swiften/VCards/VCardManager.h> #include <Swiften/Presence/PresenceOracle.h> #include <Swiften/Avatars/AvatarManager.h> #include <Swift/Controllers/ContactEditController.h> +#include <Swift/Controllers/Intl.h> #include <Swift/Controllers/UIEvents/UIEventStream.h> #include <Swift/Controllers/UIEvents/RequestChatWithUserDialogUIEvent.h> #include <Swift/Controllers/UIEvents/RequestAddUserDialogUIEvent.h> #include <Swift/Controllers/UIEvents/RequestInviteToMUCUIEvent.h> #include <Swift/Controllers/UIInterfaces/UserSearchWindow.h> #include <Swift/Controllers/UIInterfaces/UserSearchWindowFactory.h> @@ -191,12 +192,25 @@ void UserSearchController::handleNameSuggestionRequest(const JID &jid) { VCard::ref vcard = vcardManager_->getVCardAndRequestWhenNeeded(jid); if (vcard) { handleVCardChanged(jid, vcard); } } +void UserSearchController::handleJIDEditingFinished(const JID& jid) { + if (jid.isValid()) { + if (rosterController_->getItem(jid)) { + window_->setWarning(QT_TRANSLATE_NOOP("", "This contact is already on your contact list.")); + } else { + window_->setWarning(boost::optional<std::string>()); + } + } + else { + window_->setWarning(QT_TRANSLATE_NOOP("", "The address you have entered is invalid.")); + } +} + void UserSearchController::handleContactSuggestionsRequested(std::string text) { const std::vector<JID> existingJIDs = window_->getJIDs(); std::vector<Contact::ref> suggestions = contactSuggester_->getSuggestions(text, false); /* do not suggest contacts that have already been added to the chat list */ std::vector<Contact::ref>::iterator i = suggestions.begin(); while (i != suggestions.end()) { @@ -204,12 +218,20 @@ void UserSearchController::handleContactSuggestionsRequested(std::string text) { foreach (const JID& jid, existingJIDs) { if ((*i)->jid == jid) { found = true; break; } } + + // remove contact suggestions which are already on the contact list in add-contact-mode + if (type_ == AddContact) { + if (!found && !!rosterController_->getItem((*i)->jid)) { + found = true; + } + } + if (found) { i = suggestions.erase(i); } else { i++; } } @@ -304,12 +326,13 @@ void UserSearchController::initializeUserWindow() { window_->onNameSuggestionRequested.connect(boost::bind(&UserSearchController::handleNameSuggestionRequest, this, _1)); window_->onFormRequested.connect(boost::bind(&UserSearchController::handleFormRequested, this, _1)); window_->onSearchRequested.connect(boost::bind(&UserSearchController::handleSearch, this, _1, _2)); window_->onContactSuggestionsRequested.connect(boost::bind(&UserSearchController::handleContactSuggestionsRequested, this, _1)); window_->onJIDUpdateRequested.connect(boost::bind(&UserSearchController::handleJIDUpdateRequested, this, _1)); window_->onJIDAddRequested.connect(boost::bind(&UserSearchController::handleJIDAddRequested, this, _1)); + window_->onJIDEditFieldChanged.connect(boost::bind(&UserSearchController::handleJIDEditingFinished, this, _1)); window_->setSelectedService(JID(jid_.getDomain())); window_->clear(); } } } diff --git a/Swift/Controllers/Chat/UserSearchController.h b/Swift/Controllers/Chat/UserSearchController.h index d630580..b89bffd 100644 --- a/Swift/Controllers/Chat/UserSearchController.h +++ b/Swift/Controllers/Chat/UserSearchController.h @@ -66,12 +66,13 @@ namespace Swift { void handleContactSuggestionsRequested(std::string text); void handleVCardChanged(const JID& jid, VCard::ref vcard); void handleAvatarChanged(const JID& jid); void handlePresenceChanged(Presence::ref presence); void handleJIDUpdateRequested(const std::vector<JID>& jids); void handleJIDAddRequested(const std::vector<JID>& jids); + void handleJIDEditingFinished(const JID& jid); Contact::ref convertJIDtoContact(const JID& jid); void endDiscoWalker(); void initializeUserWindow(); private: Type type_; diff --git a/Swift/Controllers/UIInterfaces/UserSearchWindow.h b/Swift/Controllers/UIInterfaces/UserSearchWindow.h index 9a095aa..224c0b5 100644 --- a/Swift/Controllers/UIInterfaces/UserSearchWindow.h +++ b/Swift/Controllers/UIInterfaces/UserSearchWindow.h @@ -38,17 +38,19 @@ namespace Swift { virtual std::string getReason() const = 0; virtual std::vector<JID> getJIDs() const = 0; virtual void setCanStartImpromptuChats(bool supportsImpromptu) = 0; virtual void updateContacts(const std::vector<Contact::ref>& contacts) = 0; virtual void addContacts(const std::vector<Contact::ref>& contacts) = 0; virtual void setCanSupplyDescription(bool allowed) = 0; + virtual void setWarning(const boost::optional<std::string>& message) = 0; virtual void show() = 0; boost::signal<void (const JID&)> onFormRequested; boost::signal<void (boost::shared_ptr<SearchPayload>, const JID&)> onSearchRequested; boost::signal<void (const JID&)> onNameSuggestionRequested; boost::signal<void (const std::string&)> onContactSuggestionsRequested; boost::signal<void (const std::vector<JID>&)> onJIDUpdateRequested; boost::signal<void (const std::vector<JID>&)> onJIDAddRequested; + boost::signal<void (const JID&)> onJIDEditFieldChanged; }; } |