tlightning_tx_dialog.py - electrum - Electrum Bitcoin wallet
HTML git clone https://git.parazyd.org/electrum
DIR Log
DIR Files
DIR Refs
DIR Submodules
---
tlightning_tx_dialog.py (4121B)
---
1 import copy
2 from datetime import datetime
3 from decimal import Decimal
4 from typing import NamedTuple, Callable, TYPE_CHECKING
5
6 from kivy.app import App
7 from kivy.factory import Factory
8 from kivy.properties import ObjectProperty
9 from kivy.lang import Builder
10 from kivy.clock import Clock
11 from kivy.uix.label import Label
12 from kivy.uix.dropdown import DropDown
13 from kivy.uix.button import Button
14
15 from electrum.gui.kivy.i18n import _
16 from electrum.invoices import LNInvoice
17
18
19 if TYPE_CHECKING:
20 from ...main_window import ElectrumWindow
21
22
23 Builder.load_string('''
24
25 <LightningTxDialog>
26 id: popup
27 title: _('Lightning Payment')
28 preimage: ''
29 is_sent: False
30 amount_str: ''
31 fee_str: ''
32 date_str: ''
33 payment_hash: ''
34 description: ''
35 invoice: ''
36 BoxLayout:
37 orientation: 'vertical'
38 ScrollView:
39 scroll_type: ['bars', 'content']
40 bar_width: '25dp'
41 GridLayout:
42 height: self.minimum_height
43 size_hint_y: None
44 cols: 1
45 spacing: '10dp'
46 padding: '10dp'
47 GridLayout:
48 height: self.minimum_height
49 size_hint_y: None
50 cols: 1
51 spacing: '10dp'
52 BoxLabel:
53 text: _('Description') if root.description else ''
54 value: root.description
55 BoxLabel:
56 text: _('Date')
57 value: root.date_str
58 BoxLabel:
59 text: _('Amount sent') if root.is_sent else _('Amount received')
60 value: root.amount_str
61 BoxLabel:
62 text: _('Transaction fee') if root.fee_str else ''
63 value: root.fee_str
64 TopLabel:
65 text: _('Payment hash') + ':'
66 TxHashLabel:
67 data: root.payment_hash
68 name: _('Payment hash')
69 TopLabel:
70 text: _('Preimage')
71 TxHashLabel:
72 data: root.preimage
73 name: _('Preimage')
74 TopLabel:
75 text: _('Lightning Invoice')
76 RefLabel:
77 data: root.invoice
78 text: root.invoice[:40] + "..."
79 name: _('Lightning Invoice')
80 show_text_with_qr: False
81
82 Widget:
83 size_hint: 1, 0.1
84
85 BoxLayout:
86 size_hint: 1, None
87 height: '48dp'
88 Widget
89 Button:
90 size_hint: 0.5, None
91 height: '48dp'
92 text: _('Close')
93 on_release: root.dismiss()
94 ''')
95
96
97 class ActionButtonOption(NamedTuple):
98 text: str
99 func: Callable
100 enabled: bool
101
102
103 class LightningTxDialog(Factory.Popup):
104
105 def __init__(self, app, tx_item):
106 Factory.Popup.__init__(self)
107 self.app = app # type: ElectrumWindow
108 self.wallet = self.app.wallet
109 self._action_button_fn = lambda btn: None
110 self.description = tx_item['label']
111 self.timestamp = tx_item['timestamp']
112 self.date_str = datetime.fromtimestamp(self.timestamp).isoformat(' ')[:-3]
113 self.amount = Decimal(tx_item['amount_msat']) /1000
114 self.payment_hash = tx_item['payment_hash']
115 self.preimage = tx_item['preimage']
116 format_amount = self.app.format_amount_and_units
117 self.is_sent = self.amount < 0
118 self.amount_str = format_amount(-self.amount if self.is_sent else self.amount)
119 if tx_item.get('fee_msat'):
120 self.fee_str = format_amount(Decimal(tx_item['fee_msat']) / 1000)
121 invoice = (self.app.wallet.get_invoice(self.payment_hash)
122 or self.app.wallet.get_request(self.payment_hash))
123 if invoice:
124 assert isinstance(invoice, LNInvoice), f"{self.invoice!r}"
125 self.invoice = invoice.invoice
126 else:
127 self.invoice = ''