From 846b0b867c9b2bffb55a1a3d655f7e311fbe6537 Mon Sep 17 00:00:00 2001
From: inso <insomniak.fr@gmaiL.com>
Date: Fri, 29 Jul 2016 23:38:06 +0200
Subject: [PATCH] Fix issue #482

We now disable the Accept button during user search
because when the search ends, it will rejects any modal dialog
and disturbs users
---
 res/ui/transfer.ui                   |  3 ++
 src/sakia/gui/transfer.py            |  2 +
 src/sakia/gui/widgets/search_user.py | 65 +++++++++++++++-------------
 3 files changed, 40 insertions(+), 30 deletions(-)

diff --git a/res/ui/transfer.ui b/res/ui/transfer.ui
index ae2c1b4b..71e07789 100644
--- a/res/ui/transfer.ui
+++ b/res/ui/transfer.ui
@@ -175,6 +175,9 @@
         </item>
         <item>
          <widget class="SearchUserWidget" name="search_user" native="true">
+          <property name="enabled">
+           <bool>false</bool>
+          </property>
           <property name="sizePolicy">
            <sizepolicy hsizetype="Minimum" vsizetype="Preferred">
             <horstretch>0</horstretch>
diff --git a/src/sakia/gui/transfer.py b/src/sakia/gui/transfer.py
index 4ae91441..80fe8b4d 100644
--- a/src/sakia/gui/transfer.py
+++ b/src/sakia/gui/transfer.py
@@ -62,6 +62,8 @@ class TransferMoneyDialog(QObject):
         self.ui.search_user.init(self.app)
         self.ui.search_user.change_account(self.account)
         self.ui.search_user.change_community(self.community)
+        self.ui.search_user.search_started.connect(lambda: self.ui.button_box.setEnabled(False))
+        self.ui.search_user.search_completed.connect(lambda: self.ui.button_box.setEnabled(True))
 
         regexp = QRegExp('^([ a-zA-Z0-9-_:/;*?\[\]\(\)\\\?!^+=@&~#{}|<>%.]{0,255})$')
         validator = QRegExpValidator(regexp)
diff --git a/src/sakia/gui/widgets/search_user.py b/src/sakia/gui/widgets/search_user.py
index a2aea201..6f4a0195 100644
--- a/src/sakia/gui/widgets/search_user.py
+++ b/src/sakia/gui/widgets/search_user.py
@@ -15,6 +15,8 @@ class SearchUserWidget(QWidget, Ui_SearchUserWidget):
     _search_placeholder = QT_TRANSLATE_NOOP("SearchUserWidget", "Research a pubkey, an uid...")
 
     identity_selected = pyqtSignal(Identity)
+    search_started = pyqtSignal()
+    search_completed = pyqtSignal()
     reset = pyqtSignal()
 
     def __init__(self, parent):
@@ -60,38 +62,41 @@ class SearchUserWidget(QWidget, Ui_SearchUserWidget):
         """
         Search nodes when return is pressed in combobox lineEdit
         """
+        self.search_started.emit()
         text = self.combobox_search.lineEdit().text()
-
-        if len(text) < 2:
-            return False
-        try:
-            response = await self.community.bma_access.future_request(bma.wot.Lookup, {'search': text})
-
-            nodes = {}
-            for identity in response['results']:
-                nodes[identity['pubkey']] = identity['uids'][0]['uid']
-
-            if nodes:
-                self.nodes = list()
-                self.blockSignals(True)
-                self.combobox_search.clear()
-                self.combobox_search.lineEdit().setText(text)
-                for pubkey, uid in nodes.items():
-                    self.nodes.append({'pubkey': pubkey, 'uid': uid})
-                    self.combobox_search.addItem(uid)
-                self.blockSignals(False)
-                self.combobox_search.showPopup()
-        except errors.DuniterError as e:
-            if e.ucode == errors.NO_MATCHING_IDENTITY:
-                self.nodes = list()
-                self.blockSignals(True)
-                self.combobox_search.clear()
-                self.blockSignals(False)
-                self.combobox_search.showPopup()
-            else:
+        self.combobox_search.lineEdit().clear()
+        self.combobox_search.lineEdit().setPlaceholderText(self.tr("Looking for {0}...".format(text)))
+
+        if len(text) > 2:
+            try:
+                response = await self.community.bma_access.future_request(bma.wot.Lookup, {'search': text})
+
+                nodes = {}
+                for identity in response['results']:
+                    nodes[identity['pubkey']] = identity['uids'][0]['uid']
+
+                if nodes:
+                    self.nodes = list()
+                    self.blockSignals(True)
+                    self.combobox_search.clear()
+                    self.combobox_search.lineEdit().setText(text)
+                    for pubkey, uid in nodes.items():
+                        self.nodes.append({'pubkey': pubkey, 'uid': uid})
+                        self.combobox_search.addItem(uid)
+                    self.blockSignals(False)
+                    self.combobox_search.showPopup()
+            except errors.DuniterError as e:
+                if e.ucode == errors.NO_MATCHING_IDENTITY:
+                    self.nodes = list()
+                    self.blockSignals(True)
+                    self.combobox_search.clear()
+                    self.blockSignals(False)
+                    self.combobox_search.showPopup()
+                else:
+                    pass
+            except NoPeerAvailable:
                 pass
-        except NoPeerAvailable:
-            pass
+        self.search_completed.emit()
 
     def select_node(self, index):
         """
-- 
GitLab