perform fee computation as a timer action

This commit is contained in:
ThomasV 2015-08-15 13:32:59 +02:00
parent e0939348c3
commit 717a8a5ca7
1 changed files with 15 additions and 7 deletions

View File

@ -189,6 +189,7 @@ class ElectrumWindow(QMainWindow):
self.not_enough_funds = False self.not_enough_funds = False
self.pluginsdialog = None self.pluginsdialog = None
self.fetch_alias() self.fetch_alias()
self.require_fee_update = False
def fetch_alias(self): def fetch_alias(self):
self.alias_info = None self.alias_info = None
@ -524,6 +525,10 @@ class ElectrumWindow(QMainWindow):
self.need_update.clear() self.need_update.clear()
# resolve aliases # resolve aliases
self.payto_e.resolve() self.payto_e.resolve()
# update fee
if self.require_fee_update:
self.do_update_fee()
self.require_fee_update = False
run_hook('timer_actions') run_hook('timer_actions')
def format_amount(self, x, is_diff=False, whitespaces=False): def format_amount(self, x, is_diff=False, whitespaces=False):
@ -1001,24 +1006,24 @@ class ElectrumWindow(QMainWindow):
def on_shortcut(): def on_shortcut():
sendable = self.get_sendable_balance() sendable = self.get_sendable_balance()
inputs = self.get_coins() inputs = self.get_coins()
for i in inputs: self.wallet.add_input_info(i) for i in inputs:
self.wallet.add_input_info(i)
addr = self.payto_e.payto_address if self.payto_e.payto_address else self.dummy_address addr = self.payto_e.payto_address if self.payto_e.payto_address else self.dummy_address
output = ('address', addr, sendable) output = ('address', addr, sendable)
dummy_tx = Transaction.from_io(inputs, [output]) dummy_tx = Transaction.from_io(inputs, [output])
if not self.fee_e.isModified(): if self.fee_e.get_amount() is None:
fee_per_kb = self.wallet.fee_per_kb(self.config) fee_per_kb = self.wallet.fee_per_kb(self.config)
self.fee_e.setAmount(self.wallet.estimated_fee(dummy_tx, fee_per_kb)) self.fee_e.setAmount(self.wallet.estimated_fee(dummy_tx, fee_per_kb))
self.amount_e.setAmount(max(0, sendable - self.fee_e.get_amount())) self.amount_e.setAmount(max(0, sendable - self.fee_e.get_amount()))
self.amount_e.textEdited.emit("")
self.amount_e.shortcut.connect(on_shortcut) self.amount_e.shortcut.connect(on_shortcut)
self.payto_e.textChanged.connect(lambda: self.update_fee()) self.payto_e.textChanged.connect(self.update_fee)
self.amount_e.textEdited.connect(lambda: self.update_fee()) self.amount_e.textEdited.connect(self.update_fee)
self.fee_e.textEdited.connect(lambda: self.update_fee()) self.fee_e.textEdited.connect(self.update_fee)
# This is so that when the user blanks the fee and moves on, # This is so that when the user blanks the fee and moves on,
# we go back to auto-calculate mode and put a fee back. # we go back to auto-calculate mode and put a fee back.
self.fee_e.editingFinished.connect(lambda: self.update_fee()) self.fee_e.editingFinished.connect(self.update_fee)
def entry_changed(): def entry_changed():
text = "" text = ""
@ -1070,6 +1075,9 @@ class ElectrumWindow(QMainWindow):
return w return w
def update_fee(self): def update_fee(self):
self.require_fee_update = True
def do_update_fee(self):
'''Recalculate the fee. If the fee was manually input, retain it, but '''Recalculate the fee. If the fee was manually input, retain it, but
still build the TX to see if there are enough funds. still build the TX to see if there are enough funds.
''' '''