From 73249404d4bf63b07de7b1b6890d1a7880c816da Mon Sep 17 00:00:00 2001 From: f321x Date: Fri, 27 Jun 2025 09:40:12 +0200 Subject: [PATCH] qt: SwapDialog: update on changes, don't translate fstr and differenciate between a single 'provider' and multiple or 0 'providers'. Also update SwapDialog and SwapServerDialog when new offers are incoming. Stops translating f-string. --- electrum/gui/qt/swap_dialog.py | 25 +++++++++++++++++++++++-- electrum/submarine_swaps.py | 3 ++- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/electrum/gui/qt/swap_dialog.py b/electrum/gui/qt/swap_dialog.py index 2b776be80..e4753d5e0 100644 --- a/electrum/gui/qt/swap_dialog.py +++ b/electrum/gui/qt/swap_dialog.py @@ -14,6 +14,7 @@ from electrum.bitcoin import DummyAddress from electrum.transaction import PartialTxOutput, PartialTransaction from electrum.fee_policy import FeePolicy from electrum.crypto import sha256 +from electrum.submarine_swaps import NostrTransport from electrum.gui import messages from . import util @@ -54,8 +55,10 @@ class SwapDialog(WindowModalDialog, QtEventListener): self.is_reverse = is_reverse if is_reverse is not None else True vbox = QVBoxLayout(self) - recent_offers = transport.get_recent_offers() if not self.config.SWAPSERVER_URL else [] - self.server_button = QPushButton(_(f' {len(recent_offers)} providers')) + self.server_button = QPushButton() + self.set_server_button_text(len(transport.get_recent_offers()) \ + if not self.config.SWAPSERVER_URL and isinstance(transport, NostrTransport) else 0 + ) self.server_button.clicked.connect(lambda: self.choose_swap_server(transport)) self.server_button.setEnabled(not self.config.SWAPSERVER_URL) self.description_label = WWLabel(self.get_description()) @@ -142,6 +145,15 @@ class SwapDialog(WindowModalDialog, QtEventListener): self.on_send_edited() self.on_recv_edited() + @qt_event_listener + def on_event_swap_offers_changed(self, recent_offers: Sequence['SwapOffer']): + self.set_server_button_text(len(recent_offers)) + self.update() + + def set_server_button_text(self, offer_count: int): + button_text = f' {offer_count} ' + (_('providers') if offer_count != 1 else _('provider')) + self.server_button.setText(button_text) + def timer_actions(self): if self.needs_tx_update: self.update_tx() @@ -471,6 +483,7 @@ class SwapServerDialog(WindowModalDialog, QtEventListener): self.ok_button = OkButton(self) vbox.addLayout(Buttons(CancelButton(self), self.ok_button)) self.setMinimumWidth(650) + self.register_callbacks() def run(self): if self.exec() != 1: @@ -479,6 +492,14 @@ class SwapServerDialog(WindowModalDialog, QtEventListener): return item.data(self.Columns.PUBKEY, ROLE_NPUB) return None + def closeEvent(self, event): + self.unregister_callbacks() + event.accept() + + @qt_event_listener + def on_event_swap_offers_changed(self, recent_offers: Sequence['SwapOffer']): + self.update_servers_list(recent_offers) + def update_servers_list(self, servers: Sequence['SwapOffer']): self.servers_list.clear() from electrum.util import age diff --git a/electrum/submarine_swaps.py b/electrum/submarine_swaps.py index b63bf29c1..d8edc1423 100644 --- a/electrum/submarine_swaps.py +++ b/electrum/submarine_swaps.py @@ -32,7 +32,7 @@ from .transaction import ( from .util import ( log_exceptions, ignore_exceptions, BelowDustLimit, OldTaskGroup, ca_path, gen_nostr_ann_pow, get_nostr_ann_pow_amount, make_aiohttp_proxy_connector, get_running_loop, get_asyncio_loop, wait_for2, - run_sync_function_on_asyncio_thread + run_sync_function_on_asyncio_thread, trigger_callback ) from . import lnutil from .lnutil import hex_to_bytes, REDEEM_AFTER_DOUBLE_SPENT_DELAY, Keypair @@ -1648,6 +1648,7 @@ class NostrTransport(SwapServerTransport): if self.config.SWAPSERVER_NPUB == offer.server_npub: self.sm.update_pairs(pairs) self._offers[offer.server_npub] = offer + trigger_callback('swap_offers_changed', self.get_recent_offers()) # mirror event to other relays await self.taskgroup.spawn(self.rebroadcast_event(event, server_relays))