Browse Source

payment_identifier: move adding openalias to contacts out of _do_resolve.

This fixes "cannot pickle '_thread.RLock' object" when paying from Contacts tab
master
Sander van Grieken 2 years ago
parent
commit
f7bf4e146d
  1. 7
      electrum/gui/qt/send_tab.py
  2. 9
      electrum/payment_identifier.py

7
electrum/gui/qt/send_tab.py

@ -483,7 +483,7 @@ class SendTab(QWidget, MessageBoxMixin, Logger):
self.prepare_for_send_tab_network_lookup()
self.payto_e.payment_identifier.resolve(on_finished=self.resolve_done_signal.emit)
def on_resolve_done(self, pi):
def on_resolve_done(self, pi: 'PaymentIdentifier'):
# TODO: resolve can happen while typing, we don't want message dialogs to pop up
# currently we don't set error for emaillike recipients to avoid just that
self.logger.debug('payment identifier resolve done')
@ -492,6 +492,11 @@ class SendTab(QWidget, MessageBoxMixin, Logger):
self.show_error(pi.error)
self.do_clear()
return
# if openalias add openalias to contacts
if pi.type == PaymentIdentifierType.OPENALIAS:
key = pi.emaillike if pi.emaillike else pi.domainlike
pi.contacts[key] = ('openalias', pi.openalias_data.get('name'))
self.update_fields()
def get_message(self):

9
electrum/payment_identifier.py

@ -301,14 +301,12 @@ class PaymentIdentifier(Logger):
try:
if self.emaillike or self.domainlike:
# TODO: parallel lookup?
data = await self.resolve_openalias()
key = self.emaillike if self.emaillike else self.domainlike
data = await self.resolve_openalias(key)
if data:
self.openalias_data = data
self.logger.debug(f'OA: {data!r}')
name = data.get('name')
address = data.get('address')
key = self.emaillike if self.emaillike else self.domainlike
self.contacts[key] = ('openalias', name)
if not data.get('validated'):
self.warning = _(
'WARNING: the alias "{}" could not be validated via an additional '
@ -639,8 +637,7 @@ class PaymentIdentifier(Logger):
amount = lnaddr.get_amount_sat()
return pubkey, amount, description
async def resolve_openalias(self) -> Optional[dict]:
key = self.emaillike if self.emaillike else self.domainlike
async def resolve_openalias(self, key: str) -> Optional[dict]:
# TODO: below check needed? we already matched RE_EMAIL/RE_DOMAIN
# if not (('.' in key) and ('<' not in key) and (' ' not in key)):
# return None

Loading…
Cancel
Save