URI: 
       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 = ''