factorize code used for tx dialogs
This commit is contained in:
parent
f2d2d61894
commit
b94a7920af
|
@ -104,42 +104,17 @@ class TxDialog(Factory.Popup):
|
|||
self.update()
|
||||
|
||||
def update(self):
|
||||
is_relevant, is_mine, v, fee = self.wallet.get_wallet_delta(self.tx)
|
||||
self.can_broadcast = False
|
||||
if self.tx.is_complete():
|
||||
self.tx_hash = self.tx.hash()
|
||||
self.description = self.wallet.get_label(self.tx_hash)
|
||||
if self.tx_hash in self.wallet.transactions.keys():
|
||||
height, conf, timestamp = self.wallet.get_tx_height(self.tx_hash)
|
||||
if conf:
|
||||
self.status_str = _("%d confirmations")%conf
|
||||
self.date_str = datetime.fromtimestamp(timestamp).isoformat(' ')[:-3]
|
||||
else:
|
||||
self.status_str = _('Unconfirmed')
|
||||
if fee is None:
|
||||
fee = self.wallet.tx_fees.get(tx_hash)
|
||||
else:
|
||||
self.can_broadcast = self.app.network is not None
|
||||
self.status_str = _('Signed')
|
||||
else:
|
||||
s, r = self.tx.signature_count()
|
||||
self.status_str = _("Unsigned") if s == 0 else _('Partially signed') + ' (%d/%d)'%(s,r)
|
||||
|
||||
self.is_mine = is_mine
|
||||
if is_relevant:
|
||||
if is_mine:
|
||||
if fee is not None:
|
||||
self.amount_str = self.app.format_amount_and_units(-v-fee)
|
||||
self.fee_str = self.app.format_amount_and_units(fee)
|
||||
else:
|
||||
self.amount_str = self.app.format_amount_and_units(-v)
|
||||
self.fee_str = _("unknown")
|
||||
else:
|
||||
self.amount_str = self.app.format_amount_and_units(v)
|
||||
self.fee_str = ''
|
||||
else:
|
||||
self.tx_hash, self.status_str, self.description, self.can_broadcast, amount, fee, height, conf, timestamp = self.wallet.get_tx_info(self.tx)
|
||||
self.date_str = datetime.fromtimestamp(timestamp).isoformat(' ')[:-3] if timestamp else ''
|
||||
if amount is None:
|
||||
self.amount_str = _("Transaction unrelated to your wallet")
|
||||
self.fee_str = ''
|
||||
elif amount > 0:
|
||||
self.is_mine = False
|
||||
self.amount_str = self.app.format_amount_and_units(amount)
|
||||
else:
|
||||
self.is_mine = True
|
||||
self.amount_str = self.app.format_amount_and_units(-amount)
|
||||
self.fee_str = self.app.format_amount_and_units(fee) if fee is not None else _('unknown')
|
||||
self.can_sign = self.wallet.can_sign(self.tx)
|
||||
self.ids.output_list.update(self.tx.outputs())
|
||||
|
||||
|
|
|
@ -175,43 +175,18 @@ class TxDialog(QDialog, MessageBoxMixin):
|
|||
|
||||
|
||||
def update(self):
|
||||
desc = self.desc
|
||||
base_unit = self.main_window.base_unit()
|
||||
format_amount = self.main_window.format_amount
|
||||
is_relevant, is_mine, v, fee = self.wallet.get_wallet_delta(self.tx)
|
||||
desc = self.desc
|
||||
time_str = None
|
||||
exp_n = None
|
||||
self.broadcast_button.hide()
|
||||
tx_hash, status, label, can_broadcast, amount, fee, height, conf, timestamp = self.wallet.get_tx_info(self.tx)
|
||||
|
||||
if self.tx.is_complete():
|
||||
tx_hash = self.tx.hash()
|
||||
if tx_hash in self.wallet.transactions.keys():
|
||||
desc = self.wallet.get_label(tx_hash)
|
||||
height, conf, timestamp = self.wallet.get_tx_height(tx_hash)
|
||||
if height > 0:
|
||||
if conf:
|
||||
status = _("%d confirmations") % conf
|
||||
time_str = datetime.datetime.fromtimestamp(timestamp).isoformat(' ')[:-3]
|
||||
else:
|
||||
status = _('Not verified')
|
||||
else:
|
||||
status = _('Unconfirmed')
|
||||
if fee is None:
|
||||
fee = self.wallet.tx_fees.get(tx_hash)
|
||||
if fee:
|
||||
size = self.tx.estimated_size()
|
||||
fee_per_kb = fee * 1000 / size
|
||||
exp_n = self.wallet.network.reverse_dynfee(fee_per_kb)
|
||||
else:
|
||||
status = _("Signed")
|
||||
self.broadcast_button.show()
|
||||
# cannot broadcast when offline
|
||||
if self.main_window.network is None:
|
||||
self.broadcast_button.setEnabled(False)
|
||||
if can_broadcast:
|
||||
self.broadcast_button.show()
|
||||
# cannot broadcast when offline
|
||||
if self.main_window.network is None:
|
||||
self.broadcast_button.setEnabled(False)
|
||||
else:
|
||||
s, r = self.tx.signature_count()
|
||||
status = _("Unsigned") if s == 0 else _('Partially signed') + ' (%d/%d)'%(s,r)
|
||||
tx_hash = _('Unknown');
|
||||
self.broadcast_button.hide()
|
||||
|
||||
if self.wallet.can_sign(self.tx):
|
||||
self.sign_button.show()
|
||||
|
@ -226,7 +201,8 @@ class TxDialog(QDialog, MessageBoxMixin):
|
|||
self.tx_desc.show()
|
||||
self.status_label.setText(_('Status:') + ' ' + status)
|
||||
|
||||
if time_str is not None:
|
||||
if timestamp is not None:
|
||||
time_str = datetime.datetime.fromtimestamp(timestamp).isoformat(' ')[:-3]
|
||||
self.date_label.setText(_("Date: %s")%time_str)
|
||||
self.date_label.show()
|
||||
elif exp_n:
|
||||
|
@ -234,27 +210,18 @@ class TxDialog(QDialog, MessageBoxMixin):
|
|||
self.date_label.show()
|
||||
else:
|
||||
self.date_label.hide()
|
||||
|
||||
# if we are not synchronized, we cannot tell
|
||||
if not self.wallet.up_to_date:
|
||||
return
|
||||
|
||||
if is_relevant:
|
||||
if is_mine:
|
||||
if fee is not None:
|
||||
amount_str = _("Amount sent:") + ' %s'% format_amount(-v-fee) + ' ' + base_unit
|
||||
else:
|
||||
amount_str = _("Amount sent:") + ' %s'% format_amount(-v) + ' ' + base_unit
|
||||
else:
|
||||
amount_str = _("Amount received:") + ' %s'% format_amount(v) + ' ' + base_unit
|
||||
else:
|
||||
if amount is None:
|
||||
amount_str = _("Transaction unrelated to your wallet")
|
||||
|
||||
elif amount > 0:
|
||||
amount_str = _("Amount received:") + ' %s'% format_amount(amount) + ' ' + base_unit
|
||||
else:
|
||||
amount_str = _("Amount sent:") + ' %s'% format_amount(-amount) + ' ' + base_unit
|
||||
fee_str = _("Transaction fee") + ': %s'% (format_amount(fee) + ' ' + base_unit if fee is not None else _('unknown'))
|
||||
|
||||
self.amount_label.setText(amount_str)
|
||||
self.fee_label.setText(fee_str)
|
||||
|
||||
run_hook('transaction_dialog_update', self)
|
||||
|
||||
|
||||
|
|
|
@ -601,6 +601,51 @@ class Abstract_Wallet(PrintError):
|
|||
fee = None
|
||||
return is_relevant, is_mine, v, fee
|
||||
|
||||
def get_tx_info(self, tx):
|
||||
is_relevant, is_mine, v, fee = self.get_wallet_delta(tx)
|
||||
exp_n = None
|
||||
can_broadcast = False
|
||||
label = None
|
||||
if tx.is_complete():
|
||||
tx_hash = tx.hash()
|
||||
if tx_hash in self.transactions.keys():
|
||||
label = self.get_label(tx_hash)
|
||||
height, conf, timestamp = self.get_tx_height(tx_hash)
|
||||
if height > 0:
|
||||
if conf:
|
||||
status = _("%d confirmations") % conf
|
||||
else:
|
||||
status = _('Not verified')
|
||||
else:
|
||||
status = _('Unconfirmed')
|
||||
if fee is None:
|
||||
fee = self.tx_fees.get(tx_hash)
|
||||
if fee:
|
||||
size = tx.estimated_size()
|
||||
fee_per_kb = fee * 1000 / size
|
||||
exp_n = self.network.reverse_dynfee(fee_per_kb)
|
||||
else:
|
||||
status = _("Signed")
|
||||
can_broadcast = self.network is not None
|
||||
else:
|
||||
s, r = tx.signature_count()
|
||||
status = _("Unsigned") if s == 0 else _('Partially signed') + ' (%d/%d)'%(s,r)
|
||||
tx_hash = _('Unknown')
|
||||
|
||||
if is_relevant:
|
||||
if is_mine:
|
||||
if fee is not None:
|
||||
amount = v + fee
|
||||
else:
|
||||
amount = v
|
||||
else:
|
||||
amount = v
|
||||
else:
|
||||
amount = None
|
||||
|
||||
return tx_hash, status, label, can_broadcast, amount, fee, height, conf, timestamp
|
||||
|
||||
|
||||
def get_addr_io(self, address):
|
||||
h = self.history.get(address, [])
|
||||
received = {}
|
||||
|
|
Loading…
Reference in New Issue