From 549dc6aa0642d6cf0d5ae2260f4195cb5b212e59 Mon Sep 17 00:00:00 2001
From: Tobias Markmann <tm@ayena.de>
Date: Mon, 13 Oct 2014 16:41:11 +0200
Subject: Remove empty fields from XEP-0055 search query before sending it over
 the wire.

This clears both, empty fields of XEP-0004 data forms and the XEP-0055 predefiened
fixed form.

Test-Information:
Verified using Swift's debug console and M-Link.

Change-Id: I3cd2314abfe5111f66569d39aae9b8587157ec07

diff --git a/Swift/QtUI/UserSearch/QtUserSearchWindow.cpp b/Swift/QtUI/UserSearch/QtUserSearchWindow.cpp
index 29ee306..babe115 100644
--- a/Swift/QtUI/UserSearch/QtUserSearchWindow.cpp
+++ b/Swift/QtUI/UserSearch/QtUserSearchWindow.cpp
@@ -212,17 +212,18 @@ void QtUserSearchWindow::handleSearch() {
 	boost::shared_ptr<SearchPayload> search(new SearchPayload());
 	if (fieldsPage_->getFormWidget()) {
 		search->setForm(fieldsPage_->getFormWidget()->getCompletedForm());
+		search->getForm()->clearEmptyTextFields();
 	} else {
-		if (fieldsPage_->nickInput_->isEnabled()) {
+		if (fieldsPage_->nickInput_->isEnabled() && !fieldsPage_->nickInput_->text().isEmpty()) {
 			search->setNick(Q2PSTRING(fieldsPage_->nickInput_->text()));
 		}
-		if (fieldsPage_->firstInput_->isEnabled()) {
+		if (fieldsPage_->firstInput_->isEnabled() && !fieldsPage_->firstInput_->text().isEmpty()) {
 			search->setFirst(Q2PSTRING(fieldsPage_->firstInput_->text()));
 		}
-		if (fieldsPage_->lastInput_->isEnabled()) {
+		if (fieldsPage_->lastInput_->isEnabled() && !fieldsPage_->lastInput_->text().isEmpty()) {
 			search->setLast(Q2PSTRING(fieldsPage_->lastInput_->text()));
 		}
-		if (fieldsPage_->emailInput_->isEnabled()) {
+		if (fieldsPage_->emailInput_->isEnabled() && !fieldsPage_->emailInput_->text().isEmpty()) {
 			search->setEMail(Q2PSTRING(fieldsPage_->emailInput_->text()));
 		}
 	}
diff --git a/Swiften/Elements/Form.cpp b/Swiften/Elements/Form.cpp
index c4ae410..4915e2a 100644
--- a/Swiften/Elements/Form.cpp
+++ b/Swiften/Elements/Form.cpp
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010-2013 Remko Tronçon
+ * Copyright (c) 2010-2014 Remko Tronçon
  * Licensed under the GNU General Public License v3.
  * See Documentation/Licenses/GPLv3.txt for more information.
  */
@@ -42,4 +42,24 @@ const std::vector<Form::FormItem>& Form::getItems() const {
 	return items_;
 }
 
+void Form::clearEmptyTextFields() {
+	std::vector<FormField::ref> populatedFields;
+	foreach (FormField::ref field, fields_) {
+		if (field->getType() == FormField::TextSingleType) {
+			if (!field->getTextSingleValue().empty()) {
+				populatedFields.push_back(field);
+			}
+		}
+		else if (field->getType() == FormField::TextMultiType) {
+			if (!field->getTextMultiValue().empty()) {
+				populatedFields.push_back(field);
+			}
+		}
+		else {
+			populatedFields.push_back(field);
+		}
+	}
+	fields_ = populatedFields;
+}
+
 }
diff --git a/Swiften/Elements/Form.h b/Swiften/Elements/Form.h
index 76ed674..16cef98 100644
--- a/Swiften/Elements/Form.h
+++ b/Swiften/Elements/Form.h
@@ -1,5 +1,5 @@
 /*
- * Copyright (c) 2010 Kevin Smith
+ * Copyright (c) 2010-2014 Kevin Smith
  * Licensed under the GNU General Public License v3.
  * See Documentation/Licenses/GPLv3.txt for more information.
  */
@@ -57,6 +57,8 @@ namespace Swift {
 			const std::vector<FormItem>& getItems() const;
 			void clearItems() { items_.clear(); }
 
+			void clearEmptyTextFields();
+
 		private:
 			std::vector<boost::shared_ptr<FormField> > fields_;
 			std::vector<boost::shared_ptr<FormField> > reportedFields_;
-- 
cgit v0.10.2-6-g49f6