add blockchain.get_name method, update kivy gui

This commit is contained in:
ThomasV 2017-07-19 09:29:20 +02:00
parent 9576f8510d
commit b424a83a57
5 changed files with 22 additions and 37 deletions

View File

@ -81,6 +81,7 @@ class ElectrumWindow(App):
server_host = StringProperty('')
server_port = StringProperty('')
blockchain_name = StringProperty('')
blockchain_checkpoint = NumericProperty(0)
auto_connect = BooleanProperty(False)
def on_auto_connect(self, instance, x):
@ -103,12 +104,13 @@ class ElectrumWindow(App):
def choose_blockchain_dialog(self, dt):
from uix.dialogs.choice_dialog import ChoiceDialog
chains = self.network.get_blockchains()
def cb(name):
for index, b in self.network.blockchains.items():
if name == self.network.get_blockchain_name(b):
self.network.follow_chain(index)
#self.block
names = [self.network.get_blockchain_name(b) for b in self.network.blockchains.values()]
names = [self.network.blockchains[b].get_name() for b in chains]
if len(names) >1:
ChoiceDialog(_('Choose your chain'), names, '', cb).open()
@ -590,23 +592,10 @@ class ElectrumWindow(App):
self.network.register_callback(self.on_network, interests)
self.tabs = self.root.ids['tabs']
def blockchain_status(self):
if len(self.network.blockchains)>1:
msg = self.network.get_blockchain_name(self.network.blockchain())
else:
msg = _('Genesis')
return msg
def blockchain_info(self):
if len(self.network.blockchains)>1:
checkpoint = self.network.get_checkpoint()
msg = _('Fork detected at block %d')%checkpoint
else:
msg = _('The blockchain appears to be one')
return msg
def on_network(self, event, *args):
self.blockchain_name = self.blockchain_status()
chain = self.network.blockchain()
self.blockchain_checkpoint = chain.get_checkpoint()
self.blockchain_name = chain.get_name()
if self.network.interface:
self.server_host = self.network.interface.host
if event == 'updated':

View File

@ -46,9 +46,8 @@ Popup:
CardSeparator
SettingsItem:
title: app.blockchain_info()
title: _('Fork detected at block %d')%app.blockchain_checkpoint if app.blockchain_checkpoint else _('No fork detected')
fork_description: (_('You are following branch') if app.auto_connect else _("Your server is on branch")) + ' ' + app.blockchain_name
description: _('Everything is fine') if self.disabled else self.fork_description
description: self.fork_description if app.blockchain_checkpoint else ''
action: app.choose_blockchain_dialog
disabled: len(app.network.blockchains) == 1
disabled: app.blockchain_checkpoint == 0

View File

@ -95,14 +95,13 @@ class NodesListWidget(QTreeWidget):
def update(self, network):
self.clear()
self.addChild = self.addTopLevelItem
checkpoint = network.get_checkpoint()
chains = network.get_blockchains()
n_chains = len(chains)
for k, items in chains.items():
b = network.blockchains[k]
name = network.get_blockchain_name(b)
name = b.get_name()
if n_chains >1:
x = QTreeWidgetItem([name + '@%d'%checkpoint, '%d'%b.height()])
x = QTreeWidgetItem([name + '@%d'%b.get_checkpoint(), '%d'%b.height()])
x.setData(0, Qt.UserRole, 1)
x.setData(1, Qt.UserRole, b.checkpoint)
else:
@ -361,8 +360,8 @@ class NetworkChoiceLayout(object):
chains = self.network.get_blockchains()
if len(chains)>1:
chain = self.network.blockchain()
checkpoint = self.network.get_checkpoint()
name = self.network.get_blockchain_name(self.network.blockchain())
checkpoint = chain.get_checkpoint()
name = chain.get_name()
msg = _('Chain split detected at block %d')%checkpoint + '\n'
msg += (_('You are following branch') if auto_connect else _('Your server is on branch'))+ ' ' + name
msg += ' (%d %s)' % (chain.get_branch_size(), _('blocks'))

View File

@ -110,10 +110,15 @@ class Blockchain(util.PrintError):
children = filter(lambda y: y.parent==self, blockchains.values())
return max([x.checkpoint for x in children]) if children else None
def get_branch_size(self):
def get_checkpoint(self):
mc = self.get_max_child()
checkpoint = mc if mc is not None else self.checkpoint
return self.height() - checkpoint + 1
return mc if mc is not None else self.checkpoint
def get_branch_size(self):
return self.height() - self.get_checkpoint() + 1
def get_name(self):
return self.get_hash(self.get_checkpoint()).lstrip('00')[0:10]
def check_header(self, header):
header_hash = hash_header(header)

View File

@ -696,9 +696,6 @@ class Network(util.DaemonThread):
if b.catch_up == server:
b.catch_up = None
def get_checkpoint(self):
return max(self.blockchains.keys())
def new_interface(self, server, socket):
# todo: get tip first, then decide which checkpoint to use.
self.add_recent_server(server)
@ -823,6 +820,7 @@ class Network(util.DaemonThread):
interface.bad_header = header
delta = interface.tip - height
next_height = max(0, interface.tip - 2 * delta)
elif interface.mode == 'binary':
if chain:
interface.good = height
@ -1011,11 +1009,6 @@ class Network(util.DaemonThread):
out[k] = r
return out
def get_blockchain_name(self, blockchain):
checkpoint = self.get_checkpoint()
_hash = blockchain.get_hash(checkpoint)
return _hash.lstrip('00')[0:10]
def follow_chain(self, index):
blockchain = self.blockchains.get(index)
if blockchain: