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