diff --git a/electrum/gui/qt/main_window.py b/electrum/gui/qt/main_window.py index 41585acee..907db59f8 100644 --- a/electrum/gui/qt/main_window.py +++ b/electrum/gui/qt/main_window.py @@ -1687,7 +1687,6 @@ class ElectrumWindow(QMainWindow, MessageBoxMixin, Logger): elif isinstance(e, InvoiceError): self.show_error(_('InvoiceError: {}').format(e)) else: - self.show_error(_('Error: {}').format(e)) raise e def task(): success = self.wallet.lnworker.pay(invoice, attempts=LN_NUM_PAYMENT_ATTEMPTS, amount_sat=amount, timeout=30) diff --git a/electrum/lnworker.py b/electrum/lnworker.py index 66c85df49..414a6f4b8 100644 --- a/electrum/lnworker.py +++ b/electrum/lnworker.py @@ -14,6 +14,7 @@ import json from datetime import datetime, timezone from functools import partial from collections import defaultdict +import concurrent import dns.resolver import dns.exception @@ -660,7 +661,11 @@ class LNWallet(LNWorker): fut = asyncio.run_coroutine_threadsafe( self._pay(invoice, attempts, amount_sat), self.network.asyncio_loop) - return fut.result(timeout=timeout) + try: + return fut.result(timeout=timeout) + except concurrent.futures.TimeoutError: + raise PaymentFailure(_("Payment timed out")) + def get_channel_by_short_id(self, short_channel_id): with self.lock: