Commit Graph

3749 Commits

Author SHA1 Message Date
SomberNight
f366f3e7fb qt gui: be more resilient against import issues of QtMultimedia
The user should still be able to open the Preferences dialog, despite the camera functionality being broken.

see https://github.com/spesmilo/electrum/issues/9949

```
  6.36 | E | gui.qt.exception_window.Exception_Hook | exception caught by crash reporter
Traceback (most recent call last):
  File "electrum\gui\qt\main_window.py", line 2672, in settings_dialog
  File "electrum\gui\qt\settings_dialog.py", line 229, in __init__
  File "electrum\gui\qt\qrreader\__init__.py", line 96, in find_system_cameras
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
  File "PyInstaller\loader\pyimod02_importers.py", line 450, in exec_module
  File "electrum\gui\qt\qrreader\qtmultimedia\__init__.py", line 28, in <module>
  File "<frozen importlib._bootstrap>", line 1360, in _find_and_load
  File "<frozen importlib._bootstrap>", line 1331, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 935, in _load_unlocked
  File "PyInstaller\loader\pyimod02_importers.py", line 450, in exec_module
  File "electrum\gui\qt\qrreader\qtmultimedia\camera_dialog.py", line 32, in <module>
RuntimeError: PyQt6.QtMultimedia cannot import type '���d�⌂' from PyQt6.QtCore

```
2025-06-13 14:22:31 +00:00
ThomasV
40e244dfe9 Merge pull request #9948 from f321x/disable_disabling_i_agree_ToU
qt: fix: ToU 'I Accept' button not getting enabled
2025-06-13 15:06:06 +02:00
f321x
52e2ced62e qt: fix: ToU 'I Accept' button not getting enabled
The 'I Accept' button might not get enabled for some users where startup
is very slow.
The first check if the 'I Agree' button should be enabled gets fired
100ms after constructing the Dialog, which might not be enough.
So we can either remove the logic completely (done here) to prevent these
issues, or alternatively increase the initial timer to some large timout
after which the window should be assembled fully (e.g. 2 seconds). As
the user is not able to read the whole terms in few seconds this would
be a viable option too.
2025-06-13 14:45:27 +02:00
f321x
cc848be61c qt: fix: set ApplicationAttribute.AA_DontShowIconsInMenus False
Explicitly sets the AA_DontShowIconsInMenus attribute to false as it
defaults to true on some Qt versions / environments which causes icons
to not show up in the menus (e.g. MacOS).
see https://forum.qt.io/post/813228
The attribute has to be set on self.app after the QApplication has been
instanciated (https://doc.qt.io/qt-6/qt.html#ApplicationAttribute-enum)
2025-06-13 12:21:57 +02:00
f321x
97f9521cb1 fix: handle ! amount for payment identifiers
fixes exceptions ocurring when entering a '!' amount with a payment
identifier that is not allowed to send max (e.g. bolt11).
fixes exception when "Max" is still set from previous PI and the PI gets
replaced by one that doesn't allow max sending.
2025-06-11 19:26:26 +02:00
f321x
86183797db fix: update do_export_history to use wallet.get_full_history
`do_export_history()` which is used by the qt history export function was
broken as it used a method that did not exist anymore.
this updates `do_export_history()` to use `get_full_history()` and also
adds support for payment grouping and lightning transactions to the
generated CSV file.
2025-06-11 11:03:57 +02:00
ghost43
e30392cd16 Merge pull request #9934 from f321x/matplotlib_warning
qt: provide more detailed warning for plot feature, change matplotlib backend
2025-06-10 18:41:42 +00:00
SomberNight
47e76b25b1 swaps: add some type hints, and force kwargs 2025-06-10 16:20:43 +00:00
f321x
229219da9c qt: provide clearer warning for plot feature
this warning is more detailed and explains the user why the plotting
feature is not available to prevent confusion.
2025-06-10 16:03:30 +02:00
ThomasV
660b97c906 follow-up prev: show the plugin dialog 2025-06-10 11:32:39 +02:00
f321x
df66126389 disable "Enable" button of unavailable plugins
this changes PluginsDialog to disable the "Enable" button of plugins
that are missing dependencies (e.g. amodem) instead of not showing them
at all. A tooltip is shown explaining the user why the plugin is
disabled.
2025-06-10 11:19:55 +02:00
ThomasV
630124136e plugins dialog: fix is_available, do not show plugins that are not available 2025-06-10 11:02:18 +02:00
ThomasV
15e77d2d80 Merge pull request #9929 from f321x/swapserver_icon
qt: show deterministic colors for swapservers
2025-06-10 09:57:36 +02:00
ThomasV
e6ba90f219 Merge pull request #9928 from f321x/swap_fee_slider
swaps: use eta:2 instead of config fee policy in qml, disable qt fee slider on reverse swaps
2025-06-10 09:51:00 +02:00
f321x
6af54866c9 qt: show deterministic colors for swapservers
shows a little color icon which generated deterministically from
the server pubkey for easier differentiation.
2025-06-10 09:49:03 +02:00
f321x
37181cd3a8 disable qt swap fee slider on reverse swaps, change eta
disables the fee slider in the swap dialog for reverse swaps as the tx
fee for claiming is not configurable by the user. Also replaces calls to
`sm.get_swap_tx_fee()` with `sm.get_fee_for_txbatcher()` as this is the
correct fee estimate for claim transactions, instead of the config fee
eta used by `get_swap_tx_fee()`.
2025-06-09 17:36:38 +02:00
f321x
4849d4d770 fix: use eta:2 as funding tx fee policy in qml swap
qml used the user config fee policy for the forward swap onchain funding
tx which can be too high or low, depending on what transactions the user
did previously with the wallet. Setting it to eta:2 ensures that the
funding tx is paying a sane fee.
2025-06-09 17:15:09 +02: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
ghost43
d1c5cafcdd Merge pull request #9898 from f321x/windows_disable_screenshot
qt: windows: protect against screenshots and screen recordings
2025-06-06 13:42:29 +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
5610a94537 fix #9856 2025-06-06 12:17:21 +02:00
f321x
ca9c4777d8 windows: protect against screenshots and screen recordings 2025-06-06 09:29:01 +02:00
ThomasV
6711b65b8c Qt: use color for accounting addresses 2025-06-06 09:18:12 +02:00
SomberNight
7fa204f16b qml: fix setting config.GUI_QML_SET_MAX_BRIGHTNESS_ON_QR_DISPLAY
follow-up https://github.com/spesmilo/electrum/pull/9321
2025-06-05 16:37:59 +00:00
Sander van Grieken
e3ccee6d63 qt: channel closed dialog is not an error 2025-06-05 12:37:23 +02:00
ThomasV
e8113d684c Merge pull request #9852 from accumulator/qml_fix_forceclose_exception
qml: fix assumption history item is onchain when history item has no timestamp
2025-06-05 09:58:48 +02:00
f321x
5ad1b4b5dd fix: exceptions with send change to lightning 2025-06-04 17:40:04 +02:00
ThomasV
2024fa4507 Merge pull request #9902 from SomberNight/202506_base64_trailing_garbage
base64.b64decode: always set validate=True
2025-06-04 14:59:20 +02:00
f321x
6c7d8e8f86 fix: prevent opening new window if ToU haven't been accepted
prevents the creation of new Qt windows if the terms of use have not
been accepted yet. This is to prevent bypassing the terms of use by
starting the wallet a second time which would then skip the ToU.
2025-06-04 09:48:00 +02:00
SomberNight
3e4601c61d base64.b64decode: always set validate=True
Notably verifymessage and decrypt(message) were silently ignoring trailing garbage
or inserted non-base64 characters present in signatures/ciphertext.
(both the CLI commands and in the GUI)
I think it is much cleaner and preferable to treat such signatures/ciphertext as invalid.

In fact I find it surprising that base64.b64decode(validate=False) is the default.
Perhaps we should create a helper function for it that set validate=True and use that.
2025-06-03 18:58:05 +00:00
SomberNight
902ec09791 daemon: re config.CURRENT_WALLET: wallet_key MUST NOT be used as path 2025-06-03 15:08:03 +00: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
ThomasV
e26160234c network_dialog: widget reordering 2025-06-03 12:56:01 +02:00
f321x
88a77f387d qml: rm small available sending balance warning 2025-06-03 12:30:52 +02:00
ThomasV
8f2c5f60e4 Merge pull request #9888 from accumulator/qml_fixes
Qml fixes
2025-06-03 11:11:29 +02:00
Sander van Grieken
cb78b07fe4 qml: reset nostr relays list to default if empty 2025-06-03 10:57:43 +02:00
ThomasV
1dc9ffcdaf Merge pull request #9892 from accumulator/fix_9884
qml: also update userinfo text on channel events. fixes #9884
2025-06-03 10:57:03 +02:00
ThomasV
0ce03a1939 Merge pull request #9889 from f321x/fix_suggest_peer_block
fix: prevent lnrater from blocking if no good peers
2025-06-03 10:54:13 +02:00
Sander van Grieken
d87b0f8e81 qml: improve nostr dialog helptext 2025-06-03 10:50:28 +02:00
Sander van Grieken
7ba335a409 qml: also update userinfo text on channel events. fixes #9884 2025-06-03 10:41:55 +02:00
f321x
b4e93e7e38 fix: prevent lnrater from blocking if no good peers
the while loop in `suggest_node_channel_open()` of lnrater would not
break if there are no "good" peers available available. As a result the gui
blocks and electrum has to be killed. This can happen for example on
signet.
This removes the tested pk from the list of candidates so each candidate
gets tested only once.
2025-06-03 10:06:39 +02:00
SomberNight
60ef0340bb messages.py: fix typo 2025-06-02 16:07:08 +00: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
Sander van Grieken
938af7b2ee qml: remove green check-mark on request paid, open lightning payment details (LN) or Tx details (on-chain) instead 2025-06-02 17:11:08 +02:00