electrum

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

commit 505c1a388799f6072234c96d4d1f1e039df82f92
parent 6c55410820038538626fc5adbc1afa7836131f1a
Author: thomasv <thomasv@gitorious>
Date:   Wed,  2 May 2012 14:21:58 +0200

move start_session into wallet methods. replace get_servers with network dialog

Diffstat:
Mgui_qt.py | 57++++++++++++++++++++++++++++++++-------------------------
Minterface.py | 43++++++-------------------------------------
Mwallet.py | 14++++++++++++++
3 files changed, 52 insertions(+), 62 deletions(-)

diff --git a/gui_qt.py b/gui_qt.py @@ -920,8 +920,17 @@ class ElectrumWindow(QMainWindow): status = "Please choose a server." server = random.choice( DEFAULT_SERVERS ) + if not wallet.interface.servers: + servers_list = [] + from interface import DEFAULT_SERVERS + for x in DEFAULT_SERVERS: + h,port,protocol = x.split(':') + servers_list.append( (h,[(protocol,port)] ) ) + else: + servers_list = wallet.interface.servers + plist = {} - for item in wallet.interface.servers: + for item in servers_list: host, pp = item z = {} for item2 in pp: @@ -988,31 +997,29 @@ class ElectrumWindow(QMainWindow): vbox.addLayout(hbox) if wallet.interface.servers: - servers_list = QTreeWidget(parent) - servers_list.setHeaderLabels( [ 'Active servers'] ) - servers_list.setMaximumHeight(150) - for host in plist.keys(): - servers_list.addTopLevelItem(QTreeWidgetItem( [ host ] )) - - def do_set_line(x): - host = unicode(x.text(0)) - pp = plist[host] - if 't' in pp.keys(): - protocol = 't' - else: - protocol = pp.keys()[0] - port = pp[protocol] - host_line.setText( host + ':' + port + ':' + protocol) - set_button(protocol) - - servers_list.connect(servers_list, SIGNAL('itemClicked(QTreeWidgetItem*, int)'), do_set_line) - vbox.addWidget(servers_list) + label = 'Active Servers' else: - hbox = QHBoxLayout() - hbox.addWidget(QLabel('No nodes available')) - b = EnterButton("Find nodes", lambda: wallet.interface.get_servers(wallet) ) - hbox.addWidget(b) - vbox.addLayout(hbox) + label = 'Default Servers' + + servers_list_widget = QTreeWidget(parent) + servers_list_widget.setHeaderLabels( [ label ] ) + servers_list_widget.setMaximumHeight(150) + for host in plist.keys(): + servers_list_widget.addTopLevelItem(QTreeWidgetItem( [ host ] )) + + def do_set_line(x): + host = unicode(x.text(0)) + pp = plist[host] + if 't' in pp.keys(): + protocol = 't' + else: + protocol = pp.keys()[0] + port = pp[protocol] + host_line.setText( host + ':' + port + ':' + protocol) + set_button(protocol) + + servers_list_widget.connect(servers_list_widget, SIGNAL('itemClicked(QTreeWidgetItem*, int)'), do_set_line) + vbox.addWidget(servers_list_widget) vbox.addLayout(ok_cancel_buttons(d)) d.setLayout(vbox) diff --git a/interface.py b/interface.py @@ -20,6 +20,8 @@ import random, socket, ast, re import threading, traceback, sys, time, json, Queue +from version import ELECTRUM_VERSION + DEFAULT_TIMEOUT = 5 DEFAULT_SERVERS = [ 'ecdsa.org:50001:t', 'electrum.novit.ro:50001:t', 'electrum.bitcoins.sk:50001:t'] # list of default servers @@ -93,31 +95,6 @@ class Interface(threading.Thread): self.send(messages) - def get_servers(self, wallet): - # loop over default servers - # requesting servers could be an independent process - addresses = wallet.all_addresses() - version = wallet.electrum_version - - for server in DEFAULT_SERVERS: - print "connecting to", server - try: - self.host = server - self.start_session(addresses, version) - wallet.host = self.host - break - except socket.timeout: - continue - except socket.error: - continue - except: - traceback.print_exc(file=sys.stdout) - - - def start_session(self, addresses, version): - #print "Starting new session: %s:%d"%(self.host,self.port) - self.send([('server.version', [version]), ('server.banner',[]), ('blockchain.numblocks.subscribe',[]), ('server.peers.subscribe',[])]) - self.subscribe(addresses) class PollingInterface(Interface): @@ -240,6 +217,7 @@ class TcpStratumInterface(Interface): try: self.s.connect(( self.host, self.port)) self.is_connected = True + self.send([('server.version', [ELECTRUM_VERSION])]) except: self.is_connected = False print "not connected" @@ -367,21 +345,12 @@ class WalletSynchronizer(threading.Thread): InterfaceClass = TcpStratumInterface self.interface = InterfaceClass(host, port) + self.interface.start() self.wallet.interface = self.interface - with self.wallet.lock: - self.wallet.addresses_waiting_for_status = [] - self.wallet.addresses_waiting_for_history = [] - addresses = self.wallet.all_addresses() - version = self.wallet.electrum_version - for addr in addresses: - self.wallet.addresses_waiting_for_status.append(addr) + if self.interface.is_connected: + self.wallet.start_session(self.interface) - try: - self.interface.start() - self.interface.start_session(addresses,version) - except: - self.interface.is_connected = False def run(self): diff --git a/wallet.py b/wallet.py @@ -947,4 +947,18 @@ class Wallet: self.up_to_date_event.wait() + def start_session(self, interface): + self.interface = interface + with self.lock: + self.addresses_waiting_for_status = [] + self.addresses_waiting_for_history = [] + addresses = self.all_addresses() + for addr in addresses: + self.addresses_waiting_for_status.append(addr) + + self.interface.send([('server.banner',[]), ('blockchain.numblocks.subscribe',[]), ('server.peers.subscribe',[])]) + self.interface.subscribe(addresses) + + +