Commit Graph

1043 Commits

Author SHA1 Message Date
701f5ba1b1 Fix(QML): Resolve text overlap in transaction input display
Split transaction input display into two rows to prevent overlap
between short_id and value fields on Android QML interface.

- First row: input index and short_id (with text eliding)
- Second row: value amount and unit (indented)

Fixes readability issues on small screens and long identifiers.
2025-12-10 10:36:36 +01:00
8448b2d697 Fix(qml): Real-time balance updates for confirmations and coinbase maturity
This commit fixes two critical balance update issues in the Android app:

1. Added balanceChanged.emit() on blockchain_updated event
   - Fixes coinbase outputs not showing when they mature (120 blocks)
   - Ensures balance updates when new blocks arrive
   - Resolves issue where only partial mining rewards were displayed

2. Fixed typo: satInt → satsInt in BalanceDetails.qml
   - Lightning swap button now works correctly

Related to previous fix on tx_height_changed event handler.
2025-12-07 10:47:38 +01:00
a3b58cc631 Fix(qml): emit balanceChanged on tx height change for real-time updates 2025-12-06 19:05:21 +01:00
544872a8f1 Update presplash image layout in Terms of Use wizard 2025-11-26 12:45:59 +01:00
64b88fbded Rename Bitcoin to Palladium in UI and codebase
Update all references to "Bitcoin" and "Electrum" in the UI and codebase to "Palladium" and "Pallectrum" respectively. This includes network names, wallet types, error messages, and other user-facing text. Also updates the BIP21 URI scheme from 'bitcoin' to 'palladium'.
2025-11-23 22:09:21 +01:00
6a39a1401a Replace BTC references with PLM in codebase
Update all instances of BTC currency references to PLM across multiple files including UI components, utility functions, and command descriptions to reflect the new currency denomination
2025-11-20 16:43:48 +01:00
SomberNight
ef8d53c46a lnurlw: follow-up: fix android edge-to-edge layout padding
as per https://github.com/spesmilo/electrum/pull/9993#issuecomment-3228252596
2025-10-03 02:11:43 +00:00
SomberNight
7d0ac64d06 Merge remote-tracking branch 'spesmilo/pr/9993': lnurl-withdraw
ref https://github.com/spesmilo/electrum/pull/9993
2025-10-02 23:34:40 +00:00
Sander van Grieken
0fcd8f76fc qml: small gridlayout fix in BalanceDetails 2025-09-19 15:36:07 +02:00
f321x
debb4da90d qml: android: add padding to report dialog in ExcDialog
Adds padding to the report content dialog in the QML ExceptionDialog if
required on android.
Followup https://github.com/spesmilo/electrum/pull/10178
2025-09-02 10:32:10 +02:00
f321x
0263b5ecc1 qml: adapt exception dialog to edge-to-edge layout
Even though the exception dialog inherits from ElDialog the padding
didn't work as it overwrites the properties of the ElDialog. So the
padding has to be applied separately to the ExceptionDialog.
2025-08-28 10:17:32 +02:00
Sander van Grieken
313c8a136a qml: use declarative form for invoiceResolved and requestResolved in WalletMainView
(cherry picked from commit 78b2e3df6c47ad5d5d119cbc2372e62807f372fd)
2025-08-27 16:46:41 +02:00
f321x
c2f5b3ba6b qml: lnurlw: bind walletCanReceive to in-liquidity
binds the walletCanReceive variable to the available inbound liquidity
so the withdraw button gets enabled when the channels reconnect if the
user opens a lnurlw request dialog before the channels have connected.
2025-08-27 15:35:14 +02:00
f321x
b90090e2dd qml: separate PI resolving from QEInvoiceParser
separates the resolving step from the QEInvoiceParser so the 'recipient'
can be resolved first and then either an QEInvoiceParser can be used if
it is a sending request that has been resolved (invoice, address,
lnurlp, ...), or RequestDetails can be used if the resolved 'recipient'
turns out to be a voucher/LNURLW string.

# Conflicts:
#	electrum/gui/qml/qeinvoice.py
2025-08-27 15:35:03 +02:00
f321x
fdeada3f51 lnurl: implement LNURL-withdraw
adds handling of lnurl-withdraw payment identifiers which allow users to
withdraw bitcoin from a service by scanning a qr code or pasting the
lnurl-w code as "sending" address.
2025-08-27 15:31:43 +02:00
f321x
f1dfe5e248 qml: LoadingWalletDialog: add some padding
add some padding at the bottom of the LoadingWalletDialog so the
spinning circle is not directly at the bottom of the dialog, looks a bit
nicer this way.
2025-08-27 15:17:19 +02:00
f321x
5f0180910c qml: add padding to ElDialog for android e2e 2025-08-27 15:17:16 +02:00
f321x
53595e1be7 qml: pad main view if e2e enforcement is active 2025-08-27 15:17:13 +02:00
ghost43
0c6ff6ab62 Merge pull request #10122 from accumulator/qml_invoice_validation_error
qml: handle invoice validation errors on save
2025-08-18 14:32:57 +00:00
Sander van Grieken
bd6dfc53a2 qml: avoid hue wrap-around for fees < 1sat/vbyte, limit precision. 2025-08-15 11:35:33 +02:00
Sander van Grieken
43c6f45040 qml: handle invoice validation errors on save 2025-08-12 20:27:58 +02:00
f321x
e6f73522cb fix: wizard: qml: call checkIfLast in WCHaveSeed
When the user has already loaded a wallet in QML and tries to restore a
new wallet `WCHaveSeed.qml` incorrectly shows a `Finish` button instead
of a `Next` button and raises a KeyError if the user clicks on Finish
instead of resolving the passphrase input view (regression from
https://github.com/spesmilo/electrum/pull/10016).

This happens because `last` of `have_seed` depends on
`NewWalletWizard.is_single_password()` and NewWalletWizard.wants_ext(wizard_data).
`is_single_password()` is true if a wallet is already loaded,
while `wants_ext(wizard_data)` is false as `wants_ext()` depends on `seed_extend: True` in
`wizard_data` which only gets set after `apply()` of `WCHaveSeed` gets
called, however the evaluation of `WCHaveSeed` being the last view
happens before the view is shown.
By calling `checkIsLast()` in the validation timer of `WCHaveSeed` the
`last` property gets set again after `apply()` has been called, so
the view is guaranteed to correctly show either the `Finish` or `Next` button
after a seed has been entered.
2025-08-11 15:05:17 +02:00
Sander van Grieken
9b1566705d qml: swap: disable choose provider button during active swap. 2025-08-04 12:56:46 +02:00
Sander van Grieken
aaed64c45a android: pass on QR binary scan result data as well
qml: add signals for QEQRScanner and fallbacks, add QEBytes container type
so we can pass along byte arrays between QML and python, port qr scan
occurrences to new signals.
2025-07-24 13:58:45 +02:00
ghost43
43ae7e6df8 Merge pull request #10052 from SomberNight/202507_qt_crash_felix_2
crash reporter: rm `Never`, add confirm to `Send`, and only show window once per exc group
2025-07-21 13:50:35 +00:00
SomberNight
bfd3c0e48c Merge branch spesmilo/pr/10016' into 202507_pr10016_qml_wizard_passphrase 2025-07-20 22:02:01 +00:00
SomberNight
970f84151d crash reporter: remove "Never" btn and config.SHOW_CRASH_REPORTER opt
- always hook into sys.excepthook and show the crash reporter
- if we don't hook into sys.excepthook and an exception propagates out on a Qt thread,
  that kills the Qt GUI
  - ref https://github.com/spesmilo/electrum/pull/10049#issuecomment-3089278083
2025-07-18 16:44:08 +00:00
SomberNight
2ed691b8f0 crash reporter: add popup asking to confirm to send_report 2025-07-18 16:44:05 +00:00
SomberNight
627f5a88b3 qml: ExceptionDialog: feedback from sendReport needs even higher z
follow-up 1559129016
2025-07-18 15:26:08 +00:00
Sander van Grieken
b9ea17674d qml: fix passphrase/seed extension wordwrap 2025-07-16 13:05:44 +02:00
f321x
290da21187 qml: change wizard passphrase flow 2025-07-15 00:19:25 +02:00
Sander van Grieken
78a7c85f49 qml: swap: like on desktop, use pkh of nostr pubkey as color 2025-07-11 16:33:40 +02:00
accumulator
62a30c5688 Merge pull request #10017 from f321x/fix_qml_wizard_exception
fix: qml: wizard: delete seed_type from wizard_data if not set explicitly
2025-07-11 11:52:05 +02:00
f321x
aefb180007 fix: qml: wizard: delete seed_type if not set
deletes the `seed_type` key from `wizard_data` in `WCWalletType` if it
is not explicitly set to prevent a stale value from a previous wizard
flow if the user goes back in the wizard and selects a different wallet
type instead of completing the wizard with the previously selected
wallet type.
This happens as the `apply()` function gets called with the
previously set radio button (e.g. 2fa) if the user goes back, if he then
selects multisig the `2fa_segwit` `seed_type` won't get cleared and
cause the exception later.
Example exception when first selecting 2fa, then going back and creating
a multisig wallet:
```
32.77 | E | gui.qml.qeapp.Exception_Hook | exception caught by crash reporter
Traceback (most recent call last):
  File "/home/vagrant/electrum/electrum/gui/qml/qewizard.py", line 40, in submit
    view = self.resolve_next(self._current.view, wdata)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/vagrant/electrum/electrum/wizard.py", line 78, in resolve_next
    view_accept(wizard_data)
  File "/home/vagrant/electrum/electrum/wizard.py", line 501, in maybe_master_pubkey
    wizard_data['multisig_master_pubkey'] = self.keystore_from_data(wizard_data['wallet_type'], wizard_data).get_master_public_key()
                                            ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/vagrant/electrum/electrum/wizard.py", line 339, in keystore_from_data
    return keystore.from_seed(data['seed'], passphrase=seed_extension, for_multisig=for_multisig)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/home/vagrant/electrum/electrum/keystore.py", line 1197, in from_seed
    raise BitcoinException('Unexpected seed type {}'.format(repr(t)))
electrum.util.BitcoinException: Unexpected seed type '2fa_segwit'
```

Triggered by the following wizard stack:
```
 30.94 | D | wizard | view=create_seed
 30.94 | D | wizard | resolve_next view is confirm_seed
 30.94 | D | wizard | wizard stack:
0: 0x7fdc6804ae80 - {}

1: 0x7fdc6ac61400 - {'wallet_name': 'wallet_1'}

2: 0x7fdc680d8a80 - {'seed_type': '2fa_segwit', 'wallet_name': 'wallet_1', 'wallet_type': 'multisig'}

3: 0x7fdc6804ab00 - {'multisig_cosigner_data': {}, 'multisig_participants': 2, 'multisig_signatures': 2, 'seed_type': '2fa_segwit', 'wallet_name': 'wallet_1', 'wallet_type': 'multisig'}

4: 0x7fdc6807f0c0 - {'keystore_type': 'createseed', 'multisig_cosigner_data': {}, 'multisig_participants': 2, 'multisig_signatures': 2, 'seed_type': '2fa_segwit', 'wallet_name': 'wallet_1', 'wallet_type': 'multisig'}

c: 0x7fdc6807c380 - {'keystore_type': 'createseed', 'multisig_cosigner_data': {}, 'multisig_participants': 2, 'multisig_signatures': 2, 'seed': '<redacted>', 'seed_extend': False, 'seed_extra_words': '<redacted>', 'seed_type': '2fa_segwit', 'seed_variant': 'electrum', 'wallet_name': 'wallet_1', 'wallet_type': 'multisig'}
 30.94 | W | gui.qml.qeapp | next view: confirm_seed
```
2025-07-09 16:29:20 +02:00
f321x
86dd267d15 fix: qml: update tx label on detailsChanged signal
when setting a transaction label in the qml
`LightningPaymentDetails` or `TxDetails` dialogs which get opened
directly by the `ReceiveDialog` (`onRequestPaid`) the label is not applied on the main
transaction list as no callback for `detailsChanged` is registered which
gets called when the label changes. As a result the label is only
visible after the main list gets reloaded (e.g. restart).
This commit adds callbacks for `detailsChanged` to fix this.
2025-07-07 15:55:14 +02:00
Sander van Grieken
39c0523773 qml: only save invoice if canSave 2025-06-30 12:56:22 +02:00
cloudclaim
06d1b730b7 chore: fix some minor issues in the comments
Signed-off-by: cloudclaim <824973921@qq.com>
2025-06-29 10:07:38 +08:00
SomberNight
71627b91c4 qml: set BtcField.textAsSats initial value to match its text
textAsSats was being set to 0 initially, regardless of actual text, only healing after onTextChanged.

fixes https://github.com/spesmilo/electrum/issues/9974
2025-06-24 09:19:13 +00:00
SomberNight
becb912397 gui: "Choose Swap Provider" screen: show hex pubkey, and longer prefix
- makes it consistent between the qml and qt guis that now both show the hex pubkey
  - previously qml was showing npub
- don't truncate to first 10 chars, as that's still easy to bruteforce
  - the qt gui has space to display the full pubkey (64 hex chars)
    and can use the TreeWidget's columns to truncate as needed
  - qml has less space, truncate to 32 hex chars there (128 bits should be enough against bruteforce)
2025-06-09 15:12:32 +00:00
accumulator
6b928c5032 Merge pull request #9916 from f321x/fix_flaky_swapserver_list_qml
fix: use single long lived swap transport in qeswaphelper
2025-06-06 14:50:09 +02:00
Sander van Grieken
89cab31b81 qml: swaphelper: update offer model properly 2025-06-06 14:38:24 +02:00
f321x
3a39abc415 fix: use single long lived transport in qeswaphelper
changes qeswaphelper to shate a single, long lived transport instance
instead of opening new transports to do swaps and fetch offers.
This allows to continuosly fetch offers, so events which get returned
later by slow relays don't get missed and the fee values stay updated.
Also fixes a race causing the list to miss some swapservers, as the
current implementation fetches only until
`swap_manager.is_initialized()` is set, which will get set as soon as an
event of the configured swapserver is received. So if the event of the
configured swapserver is received as first, all server events coming in
after it would get ignored.
2025-06-06 14:38:11 +02:00
Sander van Grieken
0a6f6ab006 qml: use color for accounting addresses 2025-06-06 13:38:48 +02:00
ThomasV
6373269b42 Merge pull request #9895 from accumulator/qml_network_settings_update_fix
qml: fix updating network settings
2025-06-03 14:43:43 +02:00
Sander van Grieken
7df2a1159b qml: fix updating network settings
Previously the server parameters were each handled differently, e.g. auto-connect was only applied when updating Network.server
and not when Config.autoConnect was updated. Similarly, updating Network.server did not restart the network, leading to >1 connection
when Network.oneServer was set to True before updating Network.server.

Consolidate server parameter updates into a single call, remove the individual setters, and move Config.autoConnect and Config.autoConnectDefined to Network.
2025-06-03 13:22:45 +02:00
ThomasV
69527df9d6 Merge pull request #9894 from f321x/remove_sending_balance_warning
qml: rm small available sending balance warning
2025-06-03 12:59:58 +02:00
f321x
88a77f387d qml: rm small available sending balance warning 2025-06-03 12:30:52 +02:00
Sander van Grieken
d87b0f8e81 qml: improve nostr dialog helptext 2025-06-03 10:50:28 +02:00
Sander van Grieken
c6fb55d416 qml: lightningpaymentdetails show Paid banner instead of just Status:settled 2025-06-02 17:21:42 +02:00
Sander van Grieken
df2c1d6ae1 qml: no feebump hint if only option is CPFP 2025-06-02 17:14:31 +02:00