move start_session into wallet methods. replace get_servers with network dialog
This commit is contained in:
parent
6c55410820
commit
505c1a3887
33
gui_qt.py
33
gui_qt.py
|
@ -920,8 +920,17 @@ class ElectrumWindow(QMainWindow):
|
||||||
status = "Please choose a server."
|
status = "Please choose a server."
|
||||||
server = random.choice( DEFAULT_SERVERS )
|
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 = {}
|
plist = {}
|
||||||
for item in wallet.interface.servers:
|
for item in servers_list:
|
||||||
host, pp = item
|
host, pp = item
|
||||||
z = {}
|
z = {}
|
||||||
for item2 in pp:
|
for item2 in pp:
|
||||||
|
@ -988,11 +997,15 @@ class ElectrumWindow(QMainWindow):
|
||||||
vbox.addLayout(hbox)
|
vbox.addLayout(hbox)
|
||||||
|
|
||||||
if wallet.interface.servers:
|
if wallet.interface.servers:
|
||||||
servers_list = QTreeWidget(parent)
|
label = 'Active Servers'
|
||||||
servers_list.setHeaderLabels( [ 'Active servers'] )
|
else:
|
||||||
servers_list.setMaximumHeight(150)
|
label = 'Default Servers'
|
||||||
|
|
||||||
|
servers_list_widget = QTreeWidget(parent)
|
||||||
|
servers_list_widget.setHeaderLabels( [ label ] )
|
||||||
|
servers_list_widget.setMaximumHeight(150)
|
||||||
for host in plist.keys():
|
for host in plist.keys():
|
||||||
servers_list.addTopLevelItem(QTreeWidgetItem( [ host ] ))
|
servers_list_widget.addTopLevelItem(QTreeWidgetItem( [ host ] ))
|
||||||
|
|
||||||
def do_set_line(x):
|
def do_set_line(x):
|
||||||
host = unicode(x.text(0))
|
host = unicode(x.text(0))
|
||||||
|
@ -1005,14 +1018,8 @@ class ElectrumWindow(QMainWindow):
|
||||||
host_line.setText( host + ':' + port + ':' + protocol)
|
host_line.setText( host + ':' + port + ':' + protocol)
|
||||||
set_button(protocol)
|
set_button(protocol)
|
||||||
|
|
||||||
servers_list.connect(servers_list, SIGNAL('itemClicked(QTreeWidgetItem*, int)'), do_set_line)
|
servers_list_widget.connect(servers_list_widget, SIGNAL('itemClicked(QTreeWidgetItem*, int)'), do_set_line)
|
||||||
vbox.addWidget(servers_list)
|
vbox.addWidget(servers_list_widget)
|
||||||
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)
|
|
||||||
|
|
||||||
vbox.addLayout(ok_cancel_buttons(d))
|
vbox.addLayout(ok_cancel_buttons(d))
|
||||||
d.setLayout(vbox)
|
d.setLayout(vbox)
|
||||||
|
|
43
interface.py
43
interface.py
|
@ -20,6 +20,8 @@
|
||||||
import random, socket, ast, re
|
import random, socket, ast, re
|
||||||
import threading, traceback, sys, time, json, Queue
|
import threading, traceback, sys, time, json, Queue
|
||||||
|
|
||||||
|
from version import ELECTRUM_VERSION
|
||||||
|
|
||||||
DEFAULT_TIMEOUT = 5
|
DEFAULT_TIMEOUT = 5
|
||||||
DEFAULT_SERVERS = [ 'ecdsa.org:50001:t', 'electrum.novit.ro:50001:t', 'electrum.bitcoins.sk:50001:t'] # list of default servers
|
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)
|
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):
|
class PollingInterface(Interface):
|
||||||
|
@ -240,6 +217,7 @@ class TcpStratumInterface(Interface):
|
||||||
try:
|
try:
|
||||||
self.s.connect(( self.host, self.port))
|
self.s.connect(( self.host, self.port))
|
||||||
self.is_connected = True
|
self.is_connected = True
|
||||||
|
self.send([('server.version', [ELECTRUM_VERSION])])
|
||||||
except:
|
except:
|
||||||
self.is_connected = False
|
self.is_connected = False
|
||||||
print "not connected"
|
print "not connected"
|
||||||
|
@ -367,21 +345,12 @@ class WalletSynchronizer(threading.Thread):
|
||||||
InterfaceClass = TcpStratumInterface
|
InterfaceClass = TcpStratumInterface
|
||||||
|
|
||||||
self.interface = InterfaceClass(host, port)
|
self.interface = InterfaceClass(host, port)
|
||||||
|
self.interface.start()
|
||||||
self.wallet.interface = self.interface
|
self.wallet.interface = self.interface
|
||||||
|
|
||||||
with self.wallet.lock:
|
if self.interface.is_connected:
|
||||||
self.wallet.addresses_waiting_for_status = []
|
self.wallet.start_session(self.interface)
|
||||||
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)
|
|
||||||
|
|
||||||
try:
|
|
||||||
self.interface.start()
|
|
||||||
self.interface.start_session(addresses,version)
|
|
||||||
except:
|
|
||||||
self.interface.is_connected = False
|
|
||||||
|
|
||||||
|
|
||||||
def run(self):
|
def run(self):
|
||||||
|
|
14
wallet.py
14
wallet.py
|
@ -947,4 +947,18 @@ class Wallet:
|
||||||
self.up_to_date_event.wait()
|
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)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue