diff --git a/res/ui/transfer.ui b/res/ui/transfer.ui index ae2c1b4b23d48808e61a85ad74a20e08333917d1..71e077897ca067494ae853a3f50c3981e09a86ac 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 4ae914410921a2e7a541956155c10bc3fd93a1a6..80fe8b4d6d05854e9f505ea1d1d10f4729645d59 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 a2aea2012bdb1d9dcd3fa21c3c2dc154a76069b2..6f4a0195e13294bdb5ca850ec9ee2667a8df15d3 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): """