electrum

Electrum Bitcoin wallet
git clone https://git.parazyd.org/electrum
Log | Files | Refs | Submodules

commit fb761b7c126b87c5397bb4128e7a9629a84c1f48
parent 848f4b9ae0a9445c328b4d53635558e22c5c7dbb
Author: ThomasV <thomasv@electrum.org>
Date:   Thu,  1 Mar 2018 18:28:54 +0100

request fee historgam every minute. show fee in the send tab of kivy gui

Diffstat:
Mgui/kivy/main_window.py | 16++++++++++++++++
Mgui/kivy/uix/dialogs/settings.py | 15---------------
Mgui/kivy/uix/ui_screens/send.kv | 18++++++++++++++++++
Mlib/simple_config.py | 8++------
4 files changed, 36 insertions(+), 21 deletions(-)

diff --git a/gui/kivy/main_window.py b/gui/kivy/main_window.py @@ -82,7 +82,9 @@ class ElectrumWindow(App): server_port = StringProperty('') num_chains = NumericProperty(0) blockchain_name = StringProperty('') + fee_status = StringProperty('Fee') blockchain_checkpoint = NumericProperty(0) + _fee_dialog = None auto_connect = BooleanProperty(False) def on_auto_connect(self, instance, x): @@ -271,6 +273,7 @@ class ElectrumWindow(App): # cached dialogs self._settings_dialog = None self._password_dialog = None + self.fee_status = self.electrum_config.get_fee_status() def wallet_name(self): return os.path.basename(self.wallet.storage.path) if self.wallet else ' ' @@ -457,6 +460,7 @@ class ElectrumWindow(App): if self.network: interests = ['updated', 'status', 'new_transaction', 'verified', 'interfaces'] self.network.register_callback(self.on_network_event, interests) + self.network.register_callback(self.on_fee, ['fee']) self.network.register_callback(self.on_quotes, ['on_quotes']) self.network.register_callback(self.on_history, ['on_history']) # URI passed in config @@ -828,6 +832,18 @@ class ElectrumWindow(App): popup = AmountDialog(show_max, amount, cb) popup.open() + def fee_dialog(self, label, dt): + if self._fee_dialog is None: + from .uix.dialogs.fee_dialog import FeeDialog + def cb(): + c = self.electrum_config + self.fee_status = c.get_fee_status() + self._fee_dialog = FeeDialog(self, self.electrum_config, cb) + self._fee_dialog.open() + + def on_fee(self, event, *arg): + self.fee_status = self.electrum_config.get_fee_status() + def protected(self, msg, f, args): if self.wallet.has_password(): self.password_dialog(msg, f, args) diff --git a/gui/kivy/uix/dialogs/settings.py b/gui/kivy/uix/dialogs/settings.py @@ -49,12 +49,6 @@ Builder.load_string(''' action: partial(root.unit_dialog, self) CardSeparator SettingsItem: - status: root.fee_status() - title: _('Fees') + ': ' + self.status - description: _("Fees paid to the Bitcoin miners.") - action: partial(root.fee_dialog, self) - CardSeparator - SettingsItem: status: root.fx_status() title: _('Fiat Currency') + ': ' + self.status description: _("Display amounts in fiat currency.") @@ -112,7 +106,6 @@ class SettingsDialog(Factory.Popup): layout.bind(minimum_height=layout.setter('height')) # cached dialogs self._fx_dialog = None - self._fee_dialog = None self._proxy_dialog = None self._language_dialog = None self._unit_dialog = None @@ -205,14 +198,6 @@ class SettingsDialog(Factory.Popup): def fee_status(self): return self.config.get_fee_status() - def fee_dialog(self, label, dt): - if self._fee_dialog is None: - from .fee_dialog import FeeDialog - def cb(): - label.status = self.fee_status() - self._fee_dialog = FeeDialog(self.app, self.config, cb) - self._fee_dialog.open() - def boolean_dialog(self, name, title, message, dt): from .checkbox_dialog import CheckBoxDialog CheckBoxDialog(title, message, getattr(self.app, name), lambda x: setattr(self.app, name, x)).open() diff --git a/gui/kivy/uix/ui_screens/send.kv b/gui/kivy/uix/ui_screens/send.kv @@ -71,6 +71,24 @@ SendScreen: text: s.message if s.message else (_('No Description') if root.is_pr else _('Description')) disabled: root.is_pr on_release: Clock.schedule_once(lambda dt: app.description_dialog(s)) + CardSeparator: + opacity: int(not root.is_pr) + color: blue_bottom.foreground_color + BoxLayout: + size_hint: 1, None + height: blue_bottom.item_height + spacing: '5dp' + Image: + source: 'atlas://gui/kivy/theming/light/star_big_inactive' + opacity: 0.7 + size_hint: None, None + size: '22dp', '22dp' + pos_hint: {'center_y': .5} + BlueButton: + id: fee_e + default_text: _('Fee') + text: app.fee_status + on_release: Clock.schedule_once(lambda dt: app.fee_dialog(s, True)) BoxLayout: size_hint: 1, None height: '48dp' diff --git a/lib/simple_config.py b/lib/simple_config.py @@ -348,7 +348,7 @@ class SimpleConfig(PrintError): pos = self.get_depth_level() if mempool else self.get_fee_level() fee_rate = self.fee_per_kb() target, tooltip = self.get_fee_text(pos, dyn, mempool, fee_rate) - return target + return target + ' [%s]'%tooltip def get_fee_text(self, pos, dyn, mempool, fee_rate): """Returns (text, tooltip) where @@ -469,11 +469,7 @@ class SimpleConfig(PrintError): Returns True if an update should be requested. """ now = time.time() - prev_updates = self.fee_estimates_last_updated.values() - oldest_fee_time = min(prev_updates) if prev_updates else 0 - stale_fees = now - oldest_fee_time > 7200 - old_request = now - self.last_time_fee_estimates_requested > 60 - return stale_fees and old_request + return = now - self.last_time_fee_estimates_requested > 60 def requested_fee_estimates(self): self.last_time_fee_estimates_requested = time.time()