diff --git a/src/gui/views/network/connections.rs b/src/gui/views/network/connections.rs index dbe8d7e..c14be5b 100644 --- a/src/gui/views/network/connections.rs +++ b/src/gui/views/network/connections.rs @@ -37,24 +37,25 @@ pub struct ConnectionsContent { /// Editing external connection identifier for [`Modal`]. ext_conn_id_edit: Option, + /// Flag to check connections availability. + check_connections: bool, + /// [`Modal`] identifiers allowed at this ui container. modal_ids: Vec<&'static str> } impl Default for ConnectionsContent { fn default() -> Self { - if AppConfig::show_connections_network_panel() { - ExternalConnection::start_ext_conn_availability_check(); - } Self { first_modal_launch: true, ext_node_url_edit: "".to_string(), ext_node_secret_edit: "".to_string(), ext_node_url_error: false, ext_conn_id_edit: None, + check_connections: true, modal_ids: vec![ Self::NETWORK_EXT_CONNECTION_MODAL - ] + ], } } } @@ -88,13 +89,17 @@ impl ConnectionsContent { // Show network type selection. let saved_chain_type = AppConfig::chain_type(); NodeSetup::chain_type_ui(ui); - - // Start external connections availability check on network type change. - if saved_chain_type != AppConfig::chain_type() { - ExternalConnection::start_ext_conn_availability_check(); - } ui.add_space(6.0); + // Check connections availability. + if saved_chain_type != AppConfig::chain_type() { + self.check_connections = true; + } + if self.check_connections { + ExternalConnection::start_ext_conn_availability_check(); + self.check_connections = false; + } + // Show integrated node info content. Self::integrated_node_item_ui(ui, |ui| { // Draw button to show integrated node info. @@ -339,12 +344,12 @@ impl ConnectionsContent { // Update or create new connection. let mut ext_conn = ExternalConnection::new(url, secret); - ext_conn.check_conn_availability(); if let Some(id) = self.ext_conn_id_edit { ext_conn.id = id; } self.ext_conn_id_edit = None; ConnectionsConfig::add_ext_conn(ext_conn); + self.check_connections = true; // Close modal. cb.hide_keyboard(); diff --git a/src/gui/views/wallets/setup/connection.rs b/src/gui/views/wallets/setup/connection.rs index 2a82739..c6b4f69 100644 --- a/src/gui/views/wallets/setup/connection.rs +++ b/src/gui/views/wallets/setup/connection.rs @@ -39,6 +39,8 @@ pub struct ConnectionSetup { /// Current wallet external connection. curr_ext_conn: Option, + /// Flag to check connections availability. + check_connections: bool, /// [`Modal`] identifiers allowed at this ui container. modal_ids: Vec<&'static str> @@ -56,6 +58,7 @@ impl Default for ConnectionSetup { ext_node_secret_edit: "".to_string(), ext_node_url_error: false, curr_ext_conn: None, + check_connections: true, modal_ids: vec![ ADD_EXT_CONNECTION_MODAL ] @@ -166,25 +169,32 @@ impl ConnectionSetup { ui.add_space(4.0); let mut ext_conn_list = ConnectionsConfig::ext_conn_list(); - // Check if current external connection was deleted to show at list. + + // Check if current external connection was deleted to show at 1st place. if let Some(wallet) = wallet { if let Some(conn) = wallet.get_current_ext_conn() { if ext_conn_list.iter() .filter(|c| c.id == conn.id) .collect::>().is_empty() { if self.curr_ext_conn.is_none() { - conn.check_conn_availability(); self.curr_ext_conn = Some(conn); } ext_conn_list.insert(0, self.curr_ext_conn.as_ref().unwrap().clone()); } } } + + // Check connections availability. + if self.check_connections { + ExternalConnection::start_ext_conn_availability_check(); + self.check_connections = false; + } + if !ext_conn_list.is_empty() { ui.add_space(8.0); for (index, conn) in ext_conn_list.iter().enumerate() { ui.horizontal_wrapped(|ui| { - // Draw connection list item. + // Draw external connection item. self.ext_conn_item_ui(ui, wallet, conn, index, ext_conn_list.len()); }); } @@ -344,10 +354,12 @@ impl ConnectionSetup { Some(self.ext_node_secret_edit.to_owned()) }; let ext_conn = ExternalConnection::new(url.clone(), secret); - ext_conn.check_conn_availability(); ConnectionsConfig::add_ext_conn(ext_conn.clone()); + self.check_connections = true; + // Set added connection as current. self.method = ConnectionMethod::External(ext_conn.id); + // Close modal. cb.hide_keyboard(); modal.close(); diff --git a/src/wallet/connections/external.rs b/src/wallet/connections/external.rs index f3ef5c2..da33747 100644 --- a/src/wallet/connections/external.rs +++ b/src/wallet/connections/external.rs @@ -48,7 +48,7 @@ impl ExternalConnection { } /// Check connection availability. - pub fn check_conn_availability(&self) { + fn check_conn_availability(&self) { // Check every connection at separate thread. let conn = self.clone(); std::thread::spawn(move || {