diff --git a/locales/de.yml b/locales/de.yml index 00376fa..0adefba 100644 --- a/locales/de.yml +++ b/locales/de.yml @@ -300,8 +300,8 @@ network_settings: ban_window_desc: Die Entscheidung über das Verbot trifft der Knoten auf der Grundlage der Korrektheit der von der Gegenstelle erhaltenen Daten. max_inbound_count: 'Maximale Anzahl der eingehenden Peer-Verbindungen:' max_outbound_count: 'Maximale Anzahl von ausgehenden Peer-Verbindungen:' - reset_peers_desc: Peer-Daten zurücksetzen. Verwenden Sie diese Funktion nur, wenn es Probleme beim finden von Peers gibt. - reset_peers: Peers zurücksetzten + reset_data_desc: Reset-Knotendaten. Verwenden Sie diese Funktion nur, wenn es Probleme mit der Synchronisation gibt. + reset_data: Daten zurücksetzten modal: cancel: Abbrechen save: Speichern diff --git a/locales/en.yml b/locales/en.yml index 075e70b..27e4bed 100644 --- a/locales/en.yml +++ b/locales/en.yml @@ -300,8 +300,8 @@ network_settings: ban_window_desc: The decision to ban is made by node, based on the correctness of the data received from the peer. max_inbound_count: 'Maximum number of inbound peer connections:' max_outbound_count: 'Maximum number of outbound peer connections:' - reset_peers_desc: Reset peers data. Use it with a caution only if there are problems with finding peers. - reset_peers: Reset peers + reset_data_desc: Reset the node data. Use it with a caution only if there are problems with synchronization. + reset_data: Reset data modal: cancel: Cancel save: Save diff --git a/locales/fr.yml b/locales/fr.yml index cd4789f..6e3b272 100644 --- a/locales/fr.yml +++ b/locales/fr.yml @@ -300,8 +300,8 @@ network_settings: ban_window_desc: La décision de bannir est prise par le noeud, en fonction de la validité des données reçues du pair. max_inbound_count: 'Nombre maximum de connexions de pairs entrants :' max_outbound_count: 'Nombre maximum de connexions de pairs sortants :' - reset_peers_desc: Réinitialiser les données des pairs. Utilisez-le avec précaution uniquement en cas de problèmes pour trouver des pairs. - reset_peers: Réinitialiser les pairs + reset_data_desc: Réinitialisez les données du noeud. Utilisez-le avec prudence uniquement en cas de problème de synchronisation. + reset_data: Réinitialisation des données modal: cancel: Annuler save: Sauvegarder diff --git a/locales/ru.yml b/locales/ru.yml index 32aff36..aff6ca4 100644 --- a/locales/ru.yml +++ b/locales/ru.yml @@ -300,8 +300,8 @@ network_settings: ban_window_desc: Решение о запрете принимается узлом, основываясь на корректности данных полученных от пира. max_inbound_count: 'Максимальное количество входящих подключений пиров:' max_outbound_count: 'Максимальное количество исходящих подключений к пирам:' - reset_peers_desc: Сбросить данные пиров. Используйте с осторожностью, только при наличии проблем с поиском пиров. - reset_peers: Сбросить пиры + reset_data_desc: Сбросить данные узла. Используйте с осторожностью, только при наличии проблем с синхронизацией. + reset_data: Сброс данных modal: cancel: Отмена save: Сохранить diff --git a/locales/tr.yml b/locales/tr.yml index 1ae3d01..dc30887 100644 --- a/locales/tr.yml +++ b/locales/tr.yml @@ -300,8 +300,8 @@ network_settings: ban_window_desc: Banlama karari, peerden alinan verilerin dogruluguna bagli olarak Node tarafindan verilir. max_inbound_count: 'Maksimum gelen Peer baglanti sayisi:' max_outbound_count: 'Maksimum giden Peer baglanti sayisi:' - reset_peers_desc: Peers verilerini sifirlayin. Yalnizca Peers bulma konusunda sorun yasiyorsaniz dikkatli kullanin. - reset_peers: Peers Resetle + reset_data_desc: Node verisini sifirlama. Sadece senkronizasyonda sorun varsa dikkatli kullanin. + reset_data: Verileri sifirlama modal: cancel: Iptal save: Kaydet diff --git a/locales/zh-CN.yml b/locales/zh-CN.yml index afb2c7e..fe9d118 100644 --- a/locales/zh-CN.yml +++ b/locales/zh-CN.yml @@ -300,8 +300,8 @@ network_settings: ban_window_desc: 禁止的决定是由节点 根据从网络对点收到的数据的正确性做出的. max_inbound_count: '入站网络对点连接的最大数量:' max_outbound_count: '最大出站网络对点连接数:' - reset_peers_desc: 重置网络对点数据。仅当查找网络对点出现问题时,才请谨慎使用它. - reset_peers: 重置网络对点 + reset_data_desc: 重置节点数据。只有在出现同步问题时才需谨慎使用. + reset_data: 重置数据 modal: cancel: 取消 save: 保存 diff --git a/node b/node index f80e450..bd63c26 160000 --- a/node +++ b/node @@ -1 +1 @@ -Subproject commit f80e4508969afa8f0939800d0df7ceff5f5e99fb +Subproject commit bd63c266e2b3c0755531015628abfb569aaf11b3 diff --git a/src/gui/views/network/settings.rs b/src/gui/views/network/settings.rs index 8a89ff7..ed72783 100644 --- a/src/gui/views/network/settings.rs +++ b/src/gui/views/network/settings.rs @@ -16,7 +16,7 @@ use egui::{RichText, ScrollArea}; use egui::scroll_area::ScrollBarVisibility; use crate::gui::Colors; -use crate::gui::icons::ARROW_COUNTER_CLOCKWISE; +use crate::gui::icons::{ARROW_COUNTER_CLOCKWISE, TRASH}; use crate::gui::platform::PlatformCallbacks; use crate::gui::views::{Modal, Content, View}; use crate::gui::views::network::setup::{DandelionSetup, NodeSetup, P2PSetup, PoolSetup, StratumSetup}; @@ -36,6 +36,9 @@ pub struct NetworkSettings { pool: PoolSetup, /// Dandelion server setup content. dandelion: DandelionSetup, + + /// Flag to check if reset of data was called. + data_reset: bool, } /// Identifier for settings reset confirmation [`Modal`]. @@ -49,6 +52,7 @@ impl Default for NetworkSettings { stratum: StratumSetup::default(), pool: PoolSetup::default(), dandelion: DandelionSetup::default(), + data_reset: false, } } } @@ -110,6 +114,15 @@ impl ContentContainer for NetworkSettings { // Draw Dandelion server setup section. self.dandelion.ui(ui, cb); + // Draw content to reset the data. + if !Node::is_restarting() && !self.data_reset { + ui.add_space(4.0); + View::horizontal_line(ui, Colors::item_stroke()); + ui.add_space(6.0); + + self.reset_data_ui(ui); + } + ui.add_space(6.0); View::horizontal_line(ui, Colors::stroke()); ui.add_space(6.0); @@ -179,7 +192,7 @@ impl NetworkSettings { }).collect::>(); if saved_ip != selected_ip { - (on_change)(&selected_ip.to_string()); + on_change(&selected_ip.to_string()); } } @@ -193,37 +206,53 @@ impl NetworkSettings { ui.add_space(6.0); }); } + + /// Draw content to reset data. + fn reset_data_ui(&mut self, ui: &mut egui::Ui) { + ui.add_space(4.0); + View::colored_text_button(ui, + format!("{} {}", TRASH, t!("network_settings.reset_data")), + Colors::red(), + Colors::white_or_black(false), || { + Node::reset_data(false); + self.data_reset = true; + }); + ui.add_space(6.0); + ui.label(RichText::new(t!("network_settings.reset_data_desc")) + .size(16.0) + .color(Colors::inactive_text()) + ); + ui.add_space(4.0); + } + } /// Draw button to reset integrated node settings to default values. fn reset_settings_ui(ui: &mut egui::Ui) { - ui.vertical_centered(|ui| { - ui.label(RichText::new(t!("network_settings.reset_settings_desc")) - .size(16.0) - .color(Colors::text(false))); - ui.add_space(8.0); - let button_text = format!("{} {}", - ARROW_COUNTER_CLOCKWISE, - t!("network_settings.reset_settings")); - View::action_button(ui, button_text, || { - // Show modal to confirm settings reset. - Modal::new(RESET_SETTINGS_CONFIRMATION_MODAL) - .position(ModalPosition::Center) - .title(t!("confirmation")) - .show(); - }); - - // Show reminder to restart enabled node. - if Node::is_running() { - ui.add_space(12.0); - ui.label(RichText::new(t!("network_settings.restart_node_required")) - .size(16.0) - .color(Colors::gray()) - ); - } - ui.add_space(12.0); + ui.label(RichText::new(t!("network_settings.reset_settings_desc")) + .size(16.0) + .color(Colors::text(false))); + ui.add_space(8.0); + let button_text = format!("{} {}", + ARROW_COUNTER_CLOCKWISE, + t!("network_settings.reset_settings")); + View::action_button(ui, button_text, || { + // Show modal to confirm settings reset. + Modal::new(RESET_SETTINGS_CONFIRMATION_MODAL) + .position(ModalPosition::Center) + .title(t!("confirmation")) + .show(); }); + // Show reminder to restart enabled node. + if Node::is_running() { + ui.add_space(12.0); + ui.label(RichText::new(t!("network_settings.restart_node_required")) + .size(16.0) + .color(Colors::gray()) + ); + } + ui.add_space(10.0); } /// Confirmation to reset settings to default values. diff --git a/src/gui/views/network/setup/p2p.rs b/src/gui/views/network/setup/p2p.rs index 5cdcfd0..d7610ed 100644 --- a/src/gui/views/network/setup/p2p.rs +++ b/src/gui/views/network/setup/p2p.rs @@ -65,9 +65,6 @@ pub struct P2PSetup { /// Maximum number of outbound peer connections. max_outbound_count: String, - - /// Flag to check if reset of peers was called. - peers_reset: bool, } /// Identifier for port value [`Modal`]. @@ -111,7 +108,6 @@ impl Default for P2PSetup { ban_window_edit: NodeConfig::get_p2p_ban_window(), max_inbound_count: NodeConfig::get_max_inbound_peers(), max_outbound_count: NodeConfig::get_max_outbound_peers(), - peers_reset: false, } } } @@ -216,15 +212,6 @@ impl ContentContainer for P2PSetup { // Show maximum outbound peers value setup. self.max_outbound_ui(ui); - - if !Node::is_restarting() && !self.peers_reset { - ui.add_space(6.0); - View::horizontal_line(ui, Colors::item_stroke()); - ui.add_space(6.0); - - // Show peers data reset content. - self.reset_peers_ui(ui); - } }); } } @@ -753,23 +740,6 @@ impl P2PSetup { ui.add_space(6.0); }); } - - /// Draw content to reset peers data. - fn reset_peers_ui(&mut self, ui: &mut egui::Ui) { - ui.add_space(4.0); - View::colored_text_button(ui, - format!("{} {}", TRASH, t!("network_settings.reset_peers")), - Colors::red(), - Colors::white_or_black(false), || { - Node::reset_peers(false); - self.peers_reset = true; - }); - ui.add_space(6.0); - ui.label(RichText::new(t!("network_settings.reset_peers_desc")) - .size(16.0) - .color(Colors::inactive_text()) - ); - } } /// Draw peer list item. diff --git a/src/node/node.rs b/src/node/node.rs index 5e9ab9b..f95675f 100644 --- a/src/node/node.rs +++ b/src/node/node.rs @@ -28,7 +28,7 @@ use grin_p2p::msg::PeerAddrs; use grin_p2p::Seeding; use grin_servers::{Server, ServerStats, StratumServerConfig, StratumStats}; use grin_servers::common::types::Error; - +use log::error; use crate::node::{NodeConfig, NodeError, PeersConfig}; use crate::node::stratum::{StratumStopState, StratumServer}; @@ -57,8 +57,8 @@ pub struct Node { stop_needed: AtomicBool, /// Flag to check if app exit is needed after [`Server`] stop. exit_after_stop: AtomicBool, - /// Flag to reset peers data and restart the [`Server`]. - reset_peers: AtomicBool, + /// Flag to reset data and restart the [`Server`]. + reset_data: AtomicBool, /// Flag to change data directory and restart the [`Server`]. change_data_dir: AtomicBool, @@ -78,7 +78,7 @@ impl Default for Node { exit_after_stop: AtomicBool::new(false), start_stratum_needed: AtomicBool::new(false), error: Arc::new(RwLock::new(None)), - reset_peers: AtomicBool::new(false), + reset_data: AtomicBool::new(false), change_data_dir: AtomicBool::new(false), } } @@ -169,12 +169,12 @@ impl Node { /// Check if [`Node`] is restarting. pub fn is_restarting() -> bool { - NODE_STATE.restart_needed.load(Ordering::Relaxed) || Self::reset_peers_needed() + NODE_STATE.restart_needed.load(Ordering::Relaxed) || Self::reset_data_needed() } /// Check if reset of [`Server`] peers is needed. - fn reset_peers_needed() -> bool { - NODE_STATE.reset_peers.load(Ordering::Relaxed) + fn reset_data_needed() -> bool { + NODE_STATE.reset_data.load(Ordering::Relaxed) } /// Get node [`Server`] statistics. @@ -263,9 +263,9 @@ impl Node { server.stop(); // Wait server after stop. thread::sleep(Duration::from_millis(5000)); - // Reset peers data if requested. - if Self::reset_peers_needed() { - Node::reset_peers(true); + // Reset data if requested. + if Self::reset_data_needed() { + Node::reset_data(true); } // Reset stratum stats. { @@ -279,7 +279,7 @@ impl Node { NODE_STATE.restart_needed.store(false, Ordering::Relaxed); } Err(e) => { - // Set an error. + error!("Error starting node: {:?}", e); { let mut w_err = NODE_STATE.error.write(); *w_err = Some(e); @@ -333,7 +333,7 @@ impl Node { } } Err(e) => { - // Set an error. + error!("Error starting node: {:?}", e); { let mut w_err = NODE_STATE.error.write(); *w_err = Some(e); @@ -428,24 +428,20 @@ impl Node { } } - /// Reset [`Server`] peers data. - pub fn reset_peers(force: bool) { + /// Reset [`Server`] data. + pub fn reset_data(force: bool) { if force || !Node::is_running() { - // Get saved server config. let config = NodeConfig::node_server_config(); let server_config = config.server.clone(); - // Remove peers folder. - let mut peers_dir = PathBuf::from(&server_config.db_root); - peers_dir.push("peer"); - if peers_dir.exists() { - match fs::remove_dir_all(peers_dir) { - Ok(_) => {} - Err(_) => {} - } + // Remove data folder. + let data_dir = PathBuf::from(&server_config.db_root); + match fs::remove_dir_all(data_dir) { + Ok(_) => {} + Err(_) => {} } - NODE_STATE.reset_peers.store(false, Ordering::Relaxed); + NODE_STATE.reset_data.store(false, Ordering::Relaxed); } else { - NODE_STATE.reset_peers.store(true, Ordering::Relaxed); + NODE_STATE.reset_data.store(true, Ordering::Relaxed); } }