summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorTobias Markmann <tm@ayena.de>2014-10-29 14:02:39 (GMT)
committerSwift Review <review@swift.im>2014-10-30 15:41:49 (GMT)
commit5cf50d46aed4d2dac333e5e3b3bc2f57f7a1b835 (patch)
tree554e93a52e5c41e98b9e42e5d958819b87439b88 /Swift/Controllers
parent4041cc4dd4f0abc6641fed5890120efa691a27ca (diff)
downloadswift-5cf50d46aed4d2dac333e5e3b3bc2f57f7a1b835.zip
swift-5cf50d46aed4d2dac333e5e3b3bc2f57f7a1b835.tar.bz2
Prevent user from adding contacts twice to a roster.
This removes roster JIDs from the suggesting in the 'Add User'-dialog. In addition, an indication is added when a manually entered JID is invalid or already on the roster. Test-Information: Tested scenarios with recent JIDs and JIDs from the roster. Tested that 'Start Chat'-dialog suggestions still work. Change-Id: I1ff51637adb4224184b78a1af9090a04b1e18fff
Diffstat (limited to 'Swift/Controllers')
-rw-r--r--Swift/Controllers/Chat/UserSearchController.cpp23
-rw-r--r--Swift/Controllers/Chat/UserSearchController.h1
-rw-r--r--Swift/Controllers/UIInterfaces/UserSearchWindow.h2
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
@@ -18,6 +18,7 @@
#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>
@@ -194,6 +195,19 @@ void UserSearchController::handleNameSuggestionRequest(const JID &jid) {
}
}
+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);
@@ -207,6 +221,14 @@ void UserSearchController::handleContactSuggestionsRequested(std::string text) {
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 {
@@ -307,6 +329,7 @@ void UserSearchController::initializeUserWindow() {
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
@@ -69,6 +69,7 @@ namespace Swift {
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();
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
@@ -41,6 +41,7 @@ namespace Swift {
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;
@@ -50,5 +51,6 @@ namespace Swift {
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;
};
}