Commit Graph

4079 Commits

Author SHA1 Message Date
f321x 560d90e8b8 qt, watchtower: cleanup imports 2026-04-27 16:28:24 +02:00
f321x 306cac192b lnaddr: rename LnAddr -> bolt11
The LnAddr, lndecode and lnencode naming didn't imply that it is
bolt 11 specific, making it confusing to work with, now that there are
also bolt 12 "lnaddr".
Renaming it to *bolt11* creates a clear separation to bolt 12 things and
reduces mental load.

This commit is pure renaming (using the PyCharm IDE refactor function),
except for the removal of the `object` inheritance of LnAddr/BOLT11Addr,
this is Python 2 legacy.
2026-04-27 16:28:19 +02:00
ghost43 9b26c1812d Merge pull request #10485 from accumulator/ndk28_qt610_rebase_p4a
p4a rebase, use ndk28 and qt6.10
2026-04-24 17:06:25 +00:00
ghost43 cc1874c9c9 Merge pull request #10575 from f321x/lnurlw_prefix
pi: handle lud-17 lnurl URIs
2026-04-24 15:00:07 +00:00
ghost43 ca212da72a Merge pull request #10605 from f321x/crash_reporter_start_new_window
qt: send start_new_window exc to reporter
2026-04-24 14:05:36 +00:00
f321x c8c44e354c qt: send start_new_window exc to reporter
Send more types of exceptions happening during daemon.load_wallet
in `ElectrumGui.start_new_window()` to the crash reporter to catch
e.g. assertion failures instead of showing them to the user as a warning
dialog.
2026-04-24 15:54:56 +02:00
ghost43 b9dc6aa34c Merge pull request #10591 from SomberNight/202604_fix_wallet_mktx_base_tx
wallet: make_unsigned_tx: fix base_tx for GUI simple-send batching
2026-04-24 13:01:24 +00:00
f321x d34129ef5c qml: deduplicate wallet name validation
Deduplicates the wallet name validation between wizard and daemon.
2026-04-23 16:11:36 +02:00
Sander van Grieken f2e8b466cd qml: add type hints for QVariant pyqtProperty workarounds 2026-04-22 10:15:30 +02:00
Sander van Grieken 3f34e6bee0 qml: additional styling InfoTextArea in dialogs 2026-04-22 10:15:30 +02:00
Sander van Grieken 31b1974089 qml: FlatButton: show indicator for press-and-hold functionality 2026-04-22 10:15:30 +02:00
Sander van Grieken 8e78d74723 qml: remove unused components 2026-04-22 10:15:30 +02:00
Sander van Grieken 3c5dc66068 qml: various styling updates 2026-04-22 10:15:30 +02:00
Sander van Grieken 7c83e749ef icons: square closebutton.png and copy_bw.png so they don't resize on highlight (qml)
and upscale qrcode-[_white].png for the same reason and so we don't need to apply scaling
2026-04-22 10:15:30 +02:00
Sander van Grieken 895679a6be qml: styling History, ProxyConfig and NostrConfigDialog 2026-04-22 10:15:30 +02:00
Sander van Grieken 87bb63e442 qml: use standard Button for buttons outside of buttoncontainer 2026-04-22 10:15:30 +02:00
Sander van Grieken 3a740256c5 qml: add missing button containers 2026-04-22 10:15:30 +02:00
Sander van Grieken 1c0851c6eb styling OpenChannelDialog 2026-04-22 10:15:30 +02:00
Sander van Grieken 738992ac9e qml: don't add navigationbar padding when on-screen keyboard is visible,
also allow stackview pages to override navigationbar background color to
allow correct color runoff below buttons
2026-04-22 10:15:30 +02:00
Sander van Grieken 28f744f778 qml: additional styling updates 2026-04-22 10:15:30 +02:00
Sander van Grieken e99b3023e9 qml: wizard styling, password dialog styling 2026-04-22 10:15:30 +02:00
Sander van Grieken cdb5c0b86d qml: styling updates qt6.10 2026-04-22 10:15:30 +02:00
Sander van Grieken fd5b867689 qml: don't import QtMultimedia when running on android (android 8 compat) 2026-04-22 10:15:30 +02:00
Sander van Grieken 9772a6d5b6 qml: add workarounds for issue assigning custom types to QObject properties
- on the python side, for pyqtProperty's with a setter, the pyqtProperty should be declared as QVariant type
- on the qml side, properties should be declared 'var', not the custom type.
2026-04-22 10:15:30 +02:00
ThomasV bca41d941d Merge pull request #10573 from f321x/qml_wallet_rename
qml: allow renaming wallets
2026-04-22 10:03:14 +02:00
SomberNight febe95e642 wallet: make_unsigned_tx: fix base_tx for GUI simple-send batching
fixes regression from https://github.com/spesmilo/electrum/commit/a9f20e4d3de9848247a9079b5b164d8006cf80db :
For the GUI / manual new tx constructions usecase, the flow relies on `base_tx.add_info_from_wallet(self)` being called before `base_tx_fee = base_tx.get_fee()`.

fixes https://github.com/spesmilo/electrum/issues/10587
maybe fixes https://github.com/spesmilo/electrum/issues/8876
    probably not a full fix: base_tx could have inputs for which add_info_from_wallet is not sufficient
2026-04-19 22:22:39 +00:00
f321x 24d93420fb qml: add top padding to nostr relay url list
The first relay url was close to the top of the ElTextArea and looked a
bit sliced. Adding some padding makes it look better.
2026-04-14 08:34:18 +02:00
f321x ef702d74cd pi: handle lud-17 URI payment identifier
LNURL-W/P can also be encoded in lud-17 form instead of bech32.
https://github.com/lnurl/luds/blob/luds/17.md
e.g.
lnurlw://example.com/api/test123
lnurlp://example.com/api/test123
2026-04-13 09:30:28 +02:00
f321x 8a12874c8e qml: allow renaming wallets
Allows to rename a wallet file from the QML Wallet Details view.
This seems like a feature we should support as the use-case of a wallet can
change or maybe the user didn't think about a proper name when setting
up the wallet. Especially with lightning channels it is not possible to
restore from seed to change the name.

Fixes #4377
2026-04-08 10:45:59 +02:00
ghost43 09a09057f6 Merge pull request #10548 from SomberNight/202603_lockdown_rpcserver
in GUI mode, only start a limited minimal RPC server
2026-03-31 15:25:52 +00:00
ThomasV efbe1907d7 Merge pull request #10556 from f321x/settings_dialog_guard_network
qt: SettingsDialog: guard self.network access
2026-03-27 15:54:36 +01:00
f321x 1aad09a61d qt: SettingsDialog: guard self.network access
Check if self.network before trying to access it. This would trigger an
exception when toggling the trampoline checkbox in offline mode:
```
 29.13 | E | gui.qt.exception_window.Exception_Hook | exception caught by crash reporter
Traceback (most recent call last):
  File "/home/user/Documents/electrum/electrum/gui/qt/settings_dialog.py", line 133, in on_trampoline_checked
    self.network.run_from_another_thread(
    ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'run_from_another_thread'
 31.00 | E | gui.qt.exception_window.Exception_Hook | exception caught by crash reporter
Traceback (most recent call last):
  File "/home/user/Documents/electrum/electrum/gui/qt/settings_dialog.py", line 131, in on_trampoline_checked
    self.network.start_gossip()
    ^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'start_gossip'
```
2026-03-27 15:40:22 +01:00
SomberNight 726d3995f4 qt gui: more defensive 'gui' RPC (i.e. URI) handling 2026-03-25 18:54:13 +00:00
ThomasV 3012c367ad Qt: move LN fee slider to payment dialog. fixes #10516 2026-03-25 10:53:38 +01:00
f321x cb023e22e4 qml: 2fa: make 2fa setup qr code clickable
This will make the 2fa app open when the user clicks on the qr code,
much more convenient than manually copy pasting the secret.
2026-03-24 14:50:45 +01:00
ThomasV 3cf2c325d5 Merge pull request #10506 from accumulator/spend_from_coin_selection_refactor
qt: perform 'fully spend' action with coin selection, keep separate from coin control when doing action
2026-03-24 12:46:02 +01:00
f321x 2c541d2663 qt: ElectrumGui: repr(UserFacingException) -> str()
Show UserFacingException in ElectrumGui.start_new_window
as str() to the user, ther doesn't seem to be a good reason
to show its repr?
2026-03-23 10:14:31 +01:00
SomberNight 42ad18b216 rm bip70 support
- could not find a single project that still actually cares about bip70 [0]
    - well except maybe BitPay.
        - but I cannot test with BitPay:
            - they have a testnet3 staging environment on test.bitpay.com
                - but the SSL cert they use for bip70 has expired in 2021
                - the webUI probably also has not been updated since then...
                    - they claim to have added LN support in 2022 in a blog post,
                        but it's not there on test.bitpay.com
            - on mainnet, they require KYC before payment
                - < ... angry noises >
            - their loss then, I don't care.
- this is code that no one wants to maintain

- this does not yet delete the signed bip70 payment data for historical txs
    - but it is no longer possible to export it from the GUI

[0]: https://bitcoinops.org/en/topics/bip70-payment-protocol/
2026-03-20 18:12:55 +00:00
SomberNight 2ea8d11524 fixup prev 2026-03-20 13:49:16 +00:00
Sander van Grieken 03e95accdc qt, qml: for new transaction notifications, instead of using sign, explicitly say sent/received.
For multiple transactions, split summary in total sent/received and a balance change.

move duplicated code to wallet.get_user_notifications_for_new_txns()
2026-03-20 12:52:22 +01:00
ThomasV 7ee2477b68 Merge pull request #10528 from f321x/qt_swapserver_list_resize
swaps: improve SwapServerDialog, provider CLI, bugfixes
2026-03-19 09:42:05 +01:00
f321x f56e6318e3 swaps: make SwapManager.percentage Decimal
If SwapManager.percentage was a 0.2 float, rounding differences would
cause an exception in the fee calculation inverse sanity check when entering 20
000 sats into the SwapDialog. By making self.percentage a decimal we can
prevent this kind of issue.

```
File "/home/user/code/vibecoding_vm/electrum/electrum/gui/qt/swap_dialog.py", line 294, in on_send_edited
    recv_amount = self.swap_manager.get_recv_amount(send_amount, is_reverse=self.is_reverse)
  File "/home/user/code/vibecoding_vm/electrum/electrum/submarine_swaps.py", line 1320, in get_recv_amount
    if abs(send_amount - inverted_send_amount) > 1:
           ~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~
TypeError: unsupported operand type(s) for -: 'int' and 'NoneType'
```
2026-03-19 09:17:34 +01:00
f321x efca1cc511 qt: PluginsDialog: add link to website
Adds a link to the plugins.electrum.org website so users who open the
plugins dialog out of curiosity get guided to the website and can
discover other plugins and learn more about the system.
2026-03-17 12:02:31 +01:00
f321x ffd259287d qt: SwapServerDialog: resize server list with dialog
Waste less space in the dialog by limiting the stretch to 10px and
resize the servers_list with the dialog by setting stretch=1 so it can
be made larger.

Fixes https://github.com/spesmilo/electrum/issues/10519
2026-03-16 12:20:36 +01:00
f321x d85985cdf2 qml: rbf/cancel: fix type error
self.oldfeeRate is initialized as int in `QETxRbfFeeBumper` and
`QETxCanceller`. However QML expects it to be a string. Initializing
it as string fixes the exception. Previously this didn't happen as
`Abstract_Wallet.add_info_from_wallet_and_network()` would never
return False, so the `get_tx()` method would immediately overwrite
the self.oldfeeRate variable with a string.

```
 20.95 | D | gui.qml.qetxfinalizer | TxMonMixin.__init__
 20.95 | E | gui.qml.qeapp.Exception_Hook | exception caught by crash reporter
TypeError: unable to convert a Python 'int' object to a C++ 'QString' instance
```
2026-03-09 14:39:40 +01:00
f321x 3d13d478c9 qml: rbf/cancel: abort update if adding tx info fails
Early return the update() methods of QETxRbfFeeBumper and QETxCanceller
if it fails to fetch missing tx information from the Network to prevent
an exception in `Abstract_Wallet.bump_fee()` and
`Abstract_Wallet.dscancel()`. See
https://github.com/spesmilo/electrum/issues/5502#issuecomment-40213084270
2026-03-09 14:19:36 +01:00
ghost43 cb696ed6f8 Merge pull request #10504 from accumulator/move_qt_event_listener
common_qt: move QtEventListener and qt_event_listener decorator to common_qt
2026-03-03 17:48:01 +00:00
Sander van Grieken 48916f56bc qt: perform 'fully spend' action with coin selection, keep separate from coin control when doing action.
Also stop timer when dialog is finished, to avoid re-generating txs with the same input coin set, which
results in an exception as these coins have signatures when the swap has started.
2026-03-03 18:46:03 +01:00
ghost43 0cb4e89aee Merge pull request #10503 from accumulator/qt_coins_fully_spend_menu
qt: utxo_list: only enable 'fully spend...' menu if there are unfrozen coins in the selection.
2026-03-03 17:37:58 +00:00
SomberNight 4c27b8de8d qt: utxo_list: add asserts to helper methods that coins are selected
- otherwise they default to selecting all coins, which is unlikely to be what the user intends
- prev commit makes sure this should never happen
2026-03-03 17:29:22 +00:00