@@ -87,9 +87,9 @@ class ItemType(IntEnum):
8787 DISCONNECTED_SERVER = 2
8888 TOPLEVEL = 3
8989
90- followServer = pyqtSignal ([ServerAddr ], arguments = ['server' ])
9190 followChain = pyqtSignal ([str ], arguments = ['chain_id' ])
9291 setServer = pyqtSignal ([str ], arguments = ['server' ])
92+ setBookmark = pyqtSignal ([ServerAddr , bool ])
9393
9494 def __init__ (self , * , network : Network ):
9595 QTreeWidget .__init__ (self )
@@ -106,23 +106,18 @@ def create_menu(self, position):
106106 menu = QMenu ()
107107 if item_type in [self .ItemType .CONNECTED_SERVER , self .ItemType .DISCONNECTED_SERVER ]:
108108 server = item .data (0 , self .SERVER_ADDR_ROLE ) # type: ServerAddr
109- if item_type == self .ItemType .CONNECTED_SERVER :
110- def do_follow_server ():
111- self .followServer .emit (server )
112- menu .addAction (read_QIcon ("chevron-right.png" ), _ ("Use as server" ), do_follow_server )
113- elif item_type == self .ItemType .DISCONNECTED_SERVER :
109+
110+ if self .network .auto_connect or self .network .is_server_bookmarked (server ):
114111 def do_set_server ():
115112 self .setServer .emit (str (server ))
116113 menu .addAction (read_QIcon ("chevron-right.png" ), _ ("Use as server" ), do_set_server )
117114
118- def set_bookmark (* , add : bool ):
119- self .network .set_server_bookmark (server , add = add )
120- self .update ()
121-
115+ def do_set_bookmark (* , add : bool ):
116+ self .setBookmark .emit (server , add )
122117 if self .network .is_server_bookmarked (server ):
123- menu .addAction (read_QIcon ("bookmark_remove.png" ), _ ("Remove from bookmarks" ), lambda : set_bookmark (add = False ))
118+ menu .addAction (read_QIcon ("bookmark_remove.png" ), _ ("Remove from bookmarks" ), lambda : do_set_bookmark (add = False ))
124119 else :
125- menu .addAction (read_QIcon ("bookmark_add.png" ), _ ("Bookmark this server" ), lambda : set_bookmark (add = True ))
120+ menu .addAction (read_QIcon ("bookmark_add.png" ), _ ("Bookmark this server" ), lambda : do_set_bookmark (add = True ))
126121 elif item_type == self .ItemType .CHAIN :
127122 chain_id = item .data (0 , self .CHAIN_ID_ROLE )
128123
@@ -404,7 +399,7 @@ def __init__(self, network: Network, parent=None):
404399 grid .addWidget (self .connect_combo , 0 , 1 , 1 , 3 )
405400
406401 self .server_e = QLineEdit ()
407- self .server_e .editingFinished .connect (self .on_server_settings_changed )
402+ self .server_e .editingFinished .connect (self .on_server_edited )
408403 grid .addWidget (QLabel (_ ('Server' ) + ':' ), 1 , 0 )
409404 grid .addWidget (self .server_e , 1 , 1 , 1 , 3 )
410405 grid .addWidget (HelpButton (messages .MSG_CONNECTMODE_SERVER_HELP ), 1 , 4 )
@@ -430,13 +425,10 @@ def __init__(self, network: Network, parent=None):
430425 self .layout ().addLayout (grid )
431426
432427 self .nodes_list_widget = NodesListWidget (network = self .network )
433- self .nodes_list_widget .followServer .connect (self .follow_server )
434428 self .nodes_list_widget .followChain .connect (self .follow_branch )
429+ self .nodes_list_widget .setBookmark .connect (self .set_bookmark )
435430
436- def do_set_server (server ):
437- self .server_e .setText (server )
438- self .set_server ()
439- self .nodes_list_widget .setServer .connect (do_set_server )
431+ self .nodes_list_widget .setServer .connect (self .set_server )
440432
441433 self .layout ().addWidget (self .nodes_list_widget )
442434 self .nodes_list_widget .update ()
@@ -462,10 +454,9 @@ def on_server_settings_changed(self):
462454 if not self .network ._was_started :
463455 self .update ()
464456 return
465- server = self .server_e .text ().strip ()
466457 net_params = self .network .get_parameters ()
467- if server != net_params . server or self .is_auto_connect () != net_params .auto_connect or self .is_one_server () != net_params .oneserver :
468- self .set_server ()
458+ if self .is_auto_connect () != net_params .auto_connect or self .is_one_server () != net_params .oneserver :
459+ self .set_params ()
469460
470461 def update (self ):
471462 self .server_e .setEnabled (self .config .cv .NETWORK_SERVER .is_modifiable () and not self .is_auto_connect ())
@@ -493,15 +484,19 @@ def update(self):
493484 msg += _ ('Your server is on branch {0} ({1} blocks)' ).format (name , chain .get_branch_size ())
494485 self .split_label .setText (msg )
495486
487+ def update_server_edit (self ):
488+ self .server_e .setText (str (self .network .default_server ) if self .network .default_server else '' )
489+
490+ @qt_event_listener
491+ def on_event_default_server_changed (self ):
492+ self .update_server_edit ()
493+
496494 def update_from_config (self ):
497495 auto_connect = self .config .NETWORK_AUTO_CONNECT
498496 one_server = self .config .NETWORK_ONESERVER
499497 v = ConnectMode .AUTOCONNECT if auto_connect else ConnectMode .ONESERVER if one_server else ConnectMode .MANUAL
500498 self .connect_combo .setCurrentIndex (v )
501-
502- server = self .config .NETWORK_SERVER
503- self .server_e .setText (server )
504-
499+ self .update_server_edit ()
505500 self .server_e .setEnabled (self .config .cv .NETWORK_SERVER .is_modifiable () and not auto_connect )
506501 self .nodes_list_widget .setEnabled (self .config .cv .NETWORK_SERVER .is_modifiable ())
507502
@@ -514,16 +509,41 @@ def follow_server(self, server: ServerAddr):
514509 self .network .run_from_another_thread (self .network .follow_chain_given_server (server ))
515510 self .update ()
516511
517- def set_server (self ):
518- net_params = self .network .get_parameters ()
512+ def on_server_edited (self ):
513+ try :
514+ server = ServerAddr .from_str_with_inference (self .server_e .text ())
515+ if not server :
516+ raise Exception ("failed to parse server" )
517+ except Exception as e :
518+ print (f'exception { e } ' )
519+ self .server_e .setText ('' )
520+ return
521+ #if self.parent.question('add bookmark?'):
522+ # ask whether we want to bookmark it
523+ print ('adding bookmark' )
524+ self .set_bookmark (server , add = True )
525+ self .set_server (str (server ))
526+
527+ def set_bookmark (self , server , add : bool ):
528+ self .network .set_server_bookmark (server , add = add )
529+ self .nodes_list_widget .update ()
530+ self .update ()
531+
532+ def set_server (self , server_str : str ):
533+ # if autoconnect, simply follow that server
534+ # in other modes too; the server must be bookmarked
519535 try :
520- server = ServerAddr .from_str_with_inference (str ( self . server_e . text ()) )
536+ server = ServerAddr .from_str_with_inference (server_str )
521537 if not server :
522538 raise Exception ("failed to parse server" )
523539 except Exception :
524540 return
541+ self .network .run_from_another_thread (self .network .switch_to_interface (server ))
542+ self .update ()
543+
544+ def set_params (self ):
545+ net_params = self .network .get_parameters ()
525546 net_params = net_params ._replace (
526- server = server ,
527547 auto_connect = self .is_auto_connect (),
528548 oneserver = self .is_one_server (),
529549 )
0 commit comments