feat: use local node by default for p2pool simple tab

This commit is contained in:
Cyrix126 2024-10-06 16:51:55 +02:00
parent 1a16db6a5b
commit 59a9c0defe
2 changed files with 141 additions and 123 deletions

View file

@ -33,10 +33,20 @@ impl P2pool {
// Two atomic bools = enough to represent this data
// local or remote
// button bool
ui.vertical_centered(|ui|{
ui.add_space(space_h);
ui.checkbox(&mut self.local_node, "Use a local node").on_hover_text("If checked (recommended), p2pool will automatically use the local node.\nCheck the Node tab to start a local node.\nIf unchecked, p2pool will attempt to use a remote node.");
});
ui.add_space(space_h * 2.0);
// if checked, use only local node
// if unchecked, show remote nodes.
// disable remote if local is checked.
let visible = !self.local_node;
debug!("P2Pool Tab | Running [auto-select] check");
if self.auto_select {
if self.auto_select && visible {
let mut ping = lock!(ping);
// If we haven't auto_selected yet, auto-select and turn it off
if ping.pinged && !ping.auto_selected {
@ -46,142 +56,147 @@ impl P2pool {
drop(ping);
}
ui.vertical(|ui| {
ui.horizontal(|ui| {
debug!("P2Pool Tab | Rendering [Ping List]");
// [Ping List]
let mut ms = 0;
let mut color = Color32::LIGHT_GRAY;
if lock!(ping).pinged {
for data in lock!(ping).nodes.iter() {
if data.ip == self.node {
ms = data.ms;
color = data.color;
break;
ui.add_enabled_ui(visible, |ui| {
ui.vertical(|ui| {
ui.horizontal(|ui| {
debug!("P2Pool Tab | Rendering [Ping List]");
// [Ping List]
let mut ms = 0;
let mut color = Color32::LIGHT_GRAY;
if lock!(ping).pinged {
for data in lock!(ping).nodes.iter() {
if data.ip == self.node {
ms = data.ms;
color = data.color;
break;
}
}
}
}
debug!("P2Pool Tab | Rendering [ComboBox] of Remote Nodes");
let ip_location = format_ip_location(&self.node, false);
let text = RichText::new(format!("{}ms | {}", ms, ip_location)).color(color);
ComboBox::from_id_salt("remote_nodes")
.selected_text(text)
.width(size.x)
.show_ui(ui, |ui| {
for data in lock!(ping).nodes.iter() {
let ms = format_ms(data.ms);
let ip_location = format_ip_location(data.ip, true);
let text = RichText::new(format!("{} | {}", ms, ip_location))
.color(data.color);
ui.selectable_value(&mut self.node, data.ip.to_string(), text);
}
});
});
debug!("P2Pool Tab | Rendering [ComboBox] of Remote Nodes");
let ip_location = format_ip_location(&self.node, false);
let text = RichText::new(format!("{}ms | {}", ms, ip_location)).color(color);
ComboBox::from_id_salt("remote_nodes")
.selected_text(text)
.width(size.x)
.show_ui(ui, |ui| {
for data in lock!(ping).nodes.iter() {
let ms = format_ms(data.ms);
let ip_location = format_ip_location(data.ip, true);
let text = RichText::new(format!("{} | {}", ms, ip_location))
.color(data.color);
ui.selectable_value(&mut self.node, data.ip.to_string(), text);
}
});
});
ui.add_space(space_h);
ui.add_space(space_h);
debug!("P2Pool Tab | Rendering [Select fastest ... Ping] buttons");
ui.horizontal(|ui| {
let width = ((size.x / 5.0) - 6.0).max(0.0);
let size = vec2(width, height);
// [Select random node]
if ui
.add_sized(size, Button::new("Select random node"))
.on_hover_text(P2POOL_SELECT_RANDOM)
.clicked()
{
self.node = RemoteNode::get_random(&self.node);
}
// [Select fastest node]
if ui
.add_sized(size, Button::new("Select fastest node"))
.on_hover_text(P2POOL_SELECT_FASTEST)
.clicked()
&& lock!(ping).pinged
{
self.node = lock!(ping).fastest.to_string();
}
// [Ping Button]
ui.add_enabled_ui(!lock!(ping).pinging, |ui| {
debug!("P2Pool Tab | Rendering [Select fastest ... Ping] buttons");
ui.horizontal(|ui| {
let width = ((size.x / 5.0) - 6.0).max(0.0);
let size = vec2(width, height);
// [Select random node]
if ui
.add_sized(size, Button::new("Ping remote nodes"))
.on_hover_text(P2POOL_PING)
.add_sized(size, Button::new("Select random node"))
.on_hover_text(P2POOL_SELECT_RANDOM)
.clicked()
{
Ping::spawn_thread(ping);
self.node = RemoteNode::get_random(&self.node);
}
// [Select fastest node]
if ui
.add_sized(size, Button::new("Select fastest node"))
.on_hover_text(P2POOL_SELECT_FASTEST)
.clicked()
&& lock!(ping).pinged
{
self.node = lock!(ping).fastest.to_string();
}
// [Ping Button]
ui.add_enabled_ui(!lock!(ping).pinging, |ui| {
if ui
.add_sized(size, Button::new("Ping remote nodes"))
.on_hover_text(P2POOL_PING)
.clicked()
{
Ping::spawn_thread(ping);
}
});
// [Last <-]
if ui
.add_sized(size, Button::new("⬅ Last"))
.on_hover_text(P2POOL_SELECT_LAST)
.clicked()
{
let ping = lock!(ping);
match ping.pinged {
true => {
self.node = RemoteNode::get_last_from_ping(&self.node, &ping.nodes)
}
false => self.node = RemoteNode::get_last(&self.node),
}
drop(ping);
}
// [Next ->]
if ui
.add_sized(size, Button::new("Next ➡"))
.on_hover_text(P2POOL_SELECT_NEXT)
.clicked()
{
let ping = lock!(ping);
match ping.pinged {
true => {
self.node = RemoteNode::get_next_from_ping(&self.node, &ping.nodes)
}
false => self.node = RemoteNode::get_next(&self.node),
}
drop(ping);
}
});
// [Last <-]
if ui
.add_sized(size, Button::new("⬅ Last"))
.on_hover_text(P2POOL_SELECT_LAST)
.clicked()
{
let ping = lock!(ping);
match ping.pinged {
true => self.node = RemoteNode::get_last_from_ping(&self.node, &ping.nodes),
false => self.node = RemoteNode::get_last(&self.node),
}
drop(ping);
}
// [Next ->]
if ui
.add_sized(size, Button::new("Next ➡"))
.on_hover_text(P2POOL_SELECT_NEXT)
.clicked()
{
let ping = lock!(ping);
match ping.pinged {
true => self.node = RemoteNode::get_next_from_ping(&self.node, &ping.nodes),
false => self.node = RemoteNode::get_next(&self.node),
}
drop(ping);
}
});
ui.vertical(|ui| {
let height = height / 2.0;
let pinging = lock!(ping).pinging;
ui.add_enabled_ui(pinging, |ui| {
let prog = lock!(ping).prog.round();
let msg = RichText::new(format!("{} ... {}%", lock!(ping).msg, prog));
let height = height / 1.25;
let size = vec2(size.x, height);
ui.add_space(space_h);
ui.add_sized(size, Label::new(msg));
ui.add_space(space_h);
if pinging {
ui.add_sized(size, Spinner::new().size(height));
} else {
ui.add_sized(size, Label::new("..."));
}
ui.add_sized(size, ProgressBar::new(prog.round() / 100.0));
ui.add_space(space_h);
ui.vertical(|ui| {
let height = height / 2.0;
let pinging = lock!(ping).pinging;
ui.add_enabled_ui(pinging, |ui| {
let prog = lock!(ping).prog.round();
let msg = RichText::new(format!("{} ... {}%", lock!(ping).msg, prog));
let height = height / 1.25;
let size = vec2(size.x, height);
ui.add_space(space_h);
ui.add_sized(size, Label::new(msg));
ui.add_space(space_h);
if pinging {
ui.add_sized(size, Spinner::new().size(height));
} else {
ui.add_sized(size, Label::new("..."));
}
ui.add_sized(size, ProgressBar::new(prog.round() / 100.0));
ui.add_space(space_h);
});
});
});
});
debug!("P2Pool Tab | Rendering [Auto-*] buttons");
ui.group(|ui| {
ui.horizontal(|ui| {
let width = ((size.x / 3.0) - (SPACE * 1.75)).max(0.0);
let size = vec2(width, height);
// [Auto-node]
ui.add_sized(size, Checkbox::new(&mut self.auto_select, "Auto-select"))
.on_hover_text(P2POOL_AUTO_SELECT);
ui.separator();
// [Auto-node]
ui.add_sized(size, Checkbox::new(&mut self.auto_ping, "Auto-ping"))
.on_hover_text(P2POOL_AUTO_NODE);
ui.separator();
// [Backup host]
ui.add_sized(size, Checkbox::new(&mut self.backup_host, "Backup host"))
.on_hover_text(P2POOL_BACKUP_HOST_SIMPLE);
})
});
debug!("P2Pool Tab | Rendering [Auto-*] buttons");
ui.group(|ui| {
ui.horizontal(|ui| {
let width = ((size.x / 3.0) - (SPACE * 1.75)).max(0.0);
let size = vec2(width, height);
// [Auto-node]
ui.add_sized(size, Checkbox::new(&mut self.auto_select, "Auto-select"))
.on_hover_text(P2POOL_AUTO_SELECT);
ui.separator();
// [Auto-node]
ui.add_sized(size, Checkbox::new(&mut self.auto_ping, "Auto-ping"))
.on_hover_text(P2POOL_AUTO_NODE);
ui.separator();
// [Backup host]
ui.add_sized(size, Checkbox::new(&mut self.backup_host, "Backup host"))
.on_hover_text(P2POOL_BACKUP_HOST_SIMPLE);
})
});
debug!("P2Pool Tab | Rendering warning text");
ui.add_sized(
debug!("P2Pool Tab | Rendering warning text");
ui.add_sized(
[size.x, height / 2.0],
Hyperlink::from_label_and_url(
"WARNING: It is recommended to run/use your own Monero Node (hover for details)",
@ -189,5 +204,6 @@ impl P2pool {
),
)
.on_hover_text(P2POOL_COMMUNITY_NODE_WARNING);
});
}
}

View file

@ -209,6 +209,7 @@ pub struct Gupax {
#[derive(Clone, Eq, PartialEq, Debug, Deserialize, Serialize)]
pub struct P2pool {
pub simple: bool,
pub local_node: bool,
pub mini: bool,
pub auto_ping: bool,
pub auto_select: bool,
@ -487,6 +488,7 @@ impl Default for P2pool {
fn default() -> Self {
Self {
simple: true,
local_node: true,
mini: true,
auto_ping: true,
auto_select: true,