forked from bitcoinafterlife/bal-electrum-plugin
Revert the v0.3.1 double-invalidation change (it caused an inheritance-list regression: stale/invalidated wills lingered and heir/date updates became incoherent) and add several targeted missed-update fixes plus a UI refinement. Revert (v0.3.1 -> v0.3.2): - Remove Will.mark_invalidated_by_tx() and its call in loop_broadcast_invalidating. core/will.py and gui/qt/dialogs.py are restored to the working v0.3.0 behaviour. The postpone double-invalidation issue is intentionally left open, to be addressed without touching the shared broadcast path. FIX 1 - detect heir removal on Check / Electrum close: - core/will.py (check_willexecutors_and_heirs): the else-branch now raises HeirNotFoundException when a will still carries an heir that is no longer in the current heirs set (heir removed), mirroring the existing 'heir added' path. Rebuild therefore triggers on Check and on_close (same build_will_task path), as decided by the user (manual update only, no auto-rebuild). FIX 2 - Check queries servers for already-sent wills: - core/will.py: new Will.needs_server_check(w) returns True for any VALID will with a will-executor that is not yet CHECKED (no longer limited to PUSHED). - gui/qt/lists.py (PreviewList.check): use needs_server_check so wills stuck on 'New / Not sent' are re-checked instead of reporting 'nothing to do'. FIX 3 - Settings-dialog hide toggles refresh the list: - core/plugin_base.py: new sync_hide_filters() re-reads the cached _hide_invalidated / _hide_replaced flags from the persisted config. - gui/qt/window.py (update_all): call sync_hide_filters() before refreshing, so toggling 'Hide Invalidated' / 'Hide Replaced' in the Settings dialog (which writes the config directly) updates the transaction list immediately instead of requiring an Electrum restart. UI - bold results in the Building Will dialog: - gui/qt/dialogs.py (BalBuildWillDialog): render the right-side results in bold (Ok, Ko, Nothing to do, Skipped, Wait, Timeout, ...) keeping the left-side state labels in normal weight. Centralised in msg_ok/msg_error/msg_warning/ msg_set_status, plus the will-executor push/check rows now show Ok/Ko and True/False in bold + colour (green/red). Tests/tooling: - tests/test_core_will.py: add test_check_heirs_unchanged_is_coherent, test_check_heir_removed_triggers_rebuild, test_check_heir_added_triggers_rebuild, test_needs_server_check. - tests/sim_update_flows.py: real-world update-scenario simulation. - tests/preview_build_will_dialog.py, tests/preview_we_rows.py: GUI-only before/after previews of the bold formatting. - Bump version to 0.3.2 (VERSION, manifest.json, __init__.py, plugin_base.py). 186 tests pass; smoke test, external-zip test and update-flow simulation OK; ruff reports only pre-existing star-import false positives.
38 lines
1.8 KiB
Python
38 lines
1.8 KiB
Python
"""BAL - Bitcoin After Life Electrum plugin.
|
|
|
|
Free and decentralized Bitcoin inheritance support for the Electrum wallet.
|
|
|
|
This package was reorganized (Approach A: conservative, behavior-preserving)
|
|
to cleanly separate logic from presentation. The original monolithic plugin
|
|
mixed the business logic with the PyQt GUI; here the two concerns live in
|
|
distinct sub-packages:
|
|
|
|
bal/
|
|
core/ GUI-free business logic (importable without Qt)
|
|
util.py Generic helpers (encoding, validation, ...)
|
|
plugin_base.py BasePlugin subclass, config, timestamp handling
|
|
heirs.py Heir list model + transaction building
|
|
will.py Will / WillItem domain model
|
|
willexecutors.py Will-executor (dead-man's switch) networking
|
|
gui/
|
|
qt/ PyQt6 presentation layer
|
|
theme.py Colors / status -> color mapping (status_color)
|
|
common.py Shared imports and small GUI helpers
|
|
widgets.py Leaf widgets (editors, labels, checkboxes, ...)
|
|
calendar.py BalCalendar widget
|
|
dialogs.py Dialog windows (wizard, build-will, detail, ...)
|
|
lists.py Tree/list views (heirs, preview, will-executors)
|
|
window.py BalWindow controller (per-wallet GUI state)
|
|
plugin.py Plugin class wiring Electrum @hooks to the GUI
|
|
qt.py Thin loader shim re-exporting `Plugin` for Electrum
|
|
|
|
Electrum discovers the plugin through ``manifest.json`` and loads the GUI
|
|
entry point from ``qt.py`` (the shim), which imports the real ``Plugin``
|
|
from ``gui.qt.plugin``.
|
|
|
|
The plugin targets Electrum 4.7.2 (the last stable release exposing
|
|
``json_db.register_dict``) and PyQt6.
|
|
"""
|
|
|
|
__version__ = "0.3.2"
|