mirror of
https://github.com/Cyrix126/gupaxx.git
synced 2024-12-22 14:49:21 +00:00
feat: upgrade deps and adapt code to breaking changes
This commit is contained in:
parent
baa70cd458
commit
9057bd12ee
18 changed files with 1657 additions and 1541 deletions
1324
Cargo.lock
generated
1324
Cargo.lock
generated
File diff suppressed because it is too large
Load diff
35
Cargo.toml
35
Cargo.toml
|
@ -32,11 +32,11 @@ distro = []
|
|||
clap = {version="4.5", features=["cargo", "derive"]}
|
||||
anyhow = "1.0.86"
|
||||
benri = "0.1.12"
|
||||
bytes = "1.6.1"
|
||||
bytes = "1.7.1"
|
||||
dirs = "5.0.1"
|
||||
#--------------------------------------------------------------------------------
|
||||
egui = "0.27.2"
|
||||
egui_extras = { version = "0.27.2", features = ["image"] }
|
||||
egui = {git="https://github.com/emilk/egui", rev="9a1e358"}
|
||||
egui_extras = {git="https://github.com/emilk/egui", rev="9a1e358", features = ["image"] }
|
||||
## 2023-12-28: https://github.com/hinto-janai/gupax/issues/68
|
||||
##
|
||||
## 2024-03-18: Both `glow` and `wgpu` seem to crash:
|
||||
|
@ -48,28 +48,28 @@ egui_extras = { version = "0.27.2", features = ["image"] }
|
|||
## Using [wgpu] actually crashes macOS (fixed in 0.20.x though).
|
||||
|
||||
#--------------------------------------------------------------------------------
|
||||
env_logger = "0.11.4"
|
||||
env_logger = "0.11.5"
|
||||
figment = { version = "0.10.19", features = ["toml"] }
|
||||
reqwest = {version = "0.12.5", default-features=false, features=["json", "rustls-tls"]}
|
||||
reqwest = {version = "0.12.7", default-features=false, features=["json", "rustls-tls"]}
|
||||
image = { version = "0.25.2", features = ["png"] }
|
||||
log = "0.4.22"
|
||||
num-format = { version = "0.4.4", default-features = false }
|
||||
once_cell = "1.19.0"
|
||||
portable-pty = "0.8.1"
|
||||
rand = "0.8.5"
|
||||
regex = { version = "1.10.5", default-features = false, features = ["perf"] }
|
||||
regex = { version = "1.10.6", default-features = false, features = ["perf"] }
|
||||
rfd = "0.14.1"
|
||||
serde = { version = "1.0.204", features = ["rc", "derive"] }
|
||||
serde_json = "1.0.120"
|
||||
sysinfo = { version = "0.30.13", default-features = false }
|
||||
serde = { version = "1.0.208", features = ["rc", "derive"] }
|
||||
serde_json = "1.0.125"
|
||||
sysinfo = { version = "0.31.2", default-features = false, features=["system"] }
|
||||
# tls-api = "0.9.0"
|
||||
tokio = { version = "1.39.1", features = ["rt", "time", "macros", "process", "rt-multi-thread"] }
|
||||
toml = { version = "0.8.15", features = ["preserve_order"] }
|
||||
tokio = { version = "1.39.3", features = ["rt", "time", "macros", "process", "rt-multi-thread"] }
|
||||
toml = { version = "0.8.19", features = ["preserve_order"] }
|
||||
walkdir = "2.5.0"
|
||||
zeroize = "1.8.1"
|
||||
strsim = "0.11.1"
|
||||
strip-ansi-escapes = "0.2.0"
|
||||
derive_more = {version="0.99.18", default-features=false, features=["display"]}
|
||||
derive_more = {version="1.0.0", default-features=false, features=["display"]}
|
||||
serde-this-or-that = "0.4.2"
|
||||
readable = "0.16"
|
||||
chrono = {version="0.4.38", default-features=false, features=["clock", "std"]}
|
||||
|
@ -77,15 +77,15 @@ enclose = "1.2.0"
|
|||
bounded-vec-deque = {version="0.1.1", default-features=false}
|
||||
cfg-if = "1.0"
|
||||
flexi_logger = "0.28"
|
||||
# eframe = { version = "0.28.1", features = ["wgpu"] }
|
||||
eframe = {git="https://github.com/emilk/egui", rev="9a1e358", features=["wgpu"]}
|
||||
# Unix dependencies
|
||||
[target.'cfg(unix)'.dependencies]
|
||||
eframe = { version = "0.27.2", features = ["wgpu"] }
|
||||
tar = "0.4.41"
|
||||
flate2 = "1.0"
|
||||
sudo = "0.6.0"
|
||||
# macOS
|
||||
[target.'cfg(target_os = "macos")'.dependencies]
|
||||
eframe = { version = "0.27.2", features = ["wgpu"] }
|
||||
# On apple-darwin targets there is an issue with the native and rustls
|
||||
# tls implementation so this makes it fall back to the openssl variant.
|
||||
#
|
||||
|
@ -99,7 +99,7 @@ eframe = { version = "0.27.2", features = ["wgpu"] }
|
|||
# linked as well which causes problems, so statically link it.
|
||||
lzma-sys = { version = "0.1", features = ["static"] }
|
||||
[dev-dependencies]
|
||||
egui = {version = "0.27.2", features=["callstack"]}
|
||||
egui = {git="https://github.com/emilk/egui", rev="9a1e358", features=["callstack"]}
|
||||
|
||||
# [target.'cfg(not(target_os = "macos"))'.dependencies]
|
||||
# tls-api-native-tls = "0.9.0"
|
||||
|
@ -107,11 +107,10 @@ egui = {version = "0.27.2", features=["callstack"]}
|
|||
# Windows dependencies
|
||||
[target.'cfg(windows)'.dependencies]
|
||||
# glow start on windows but not wgpu
|
||||
eframe = { version = "0.27.2", features = ["wgpu"] }
|
||||
# need the same version that eframe is using with egui_wgpu
|
||||
# feature angle to enable support for old cpu on Windows
|
||||
wgpu = {version = "0.19.4", features=["angle"]}
|
||||
zip = "2.1.5"
|
||||
wgpu = {version = "22.1.0", features=["angle"]}
|
||||
zip = "2.2.0"
|
||||
is_elevated = "0.1.2"
|
||||
|
||||
# For Windows build (icon)
|
||||
|
|
|
@ -147,7 +147,7 @@ impl crate::app::App {
|
|||
}
|
||||
fn save_reset_ui(&mut self, ui: &mut Ui, size: Vec2, key: &KeyPressed, wants_input: bool) {
|
||||
ui.group(|ui| {
|
||||
ui.set_enabled(self.diff);
|
||||
ui.add_enabled_ui(self.diff, |ui| {
|
||||
let width = size.x / 2.0;
|
||||
let size = vec2(width, size.y);
|
||||
if key.is_r() && !wants_input && self.diff
|
||||
|
@ -207,6 +207,7 @@ impl crate::app::App {
|
|||
),
|
||||
};
|
||||
}
|
||||
})
|
||||
});
|
||||
}
|
||||
fn status_submenu(&mut self, ui: &mut Ui, height: f32) {
|
||||
|
@ -378,7 +379,7 @@ impl crate::app::App {
|
|||
ui_enabled = false;
|
||||
text = format!("Error: {}", P2POOL_PATH_NOT_VALID);
|
||||
}
|
||||
ui.set_enabled(ui_enabled);
|
||||
ui.add_enabled_ui(ui_enabled, |ui| {
|
||||
let color = if ui_enabled { GREEN } else { RED };
|
||||
if (ui_enabled && key.is_up() && !wants_input)
|
||||
|| ui
|
||||
|
@ -396,6 +397,7 @@ impl crate::app::App {
|
|||
self.gather_backup_hosts(),
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -529,7 +531,7 @@ impl crate::app::App {
|
|||
ui_enabled = false;
|
||||
text = format!("Error: {}", XMRIG_PATH_NOT_VALID);
|
||||
}
|
||||
ui.set_enabled(ui_enabled);
|
||||
ui.add_enabled_ui(ui_enabled, |ui| {
|
||||
let color = if ui_enabled { GREEN } else { RED };
|
||||
if (ui_enabled && key.is_up() && !wants_input)
|
||||
|| ui
|
||||
|
@ -552,6 +554,7 @@ impl crate::app::App {
|
|||
self.error_state.ask_sudo(&self.sudo);
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -637,7 +640,7 @@ impl crate::app::App {
|
|||
let ui_enabled = Regexes::addr_ok(&self.state.p2pool.address)
|
||||
&& self.state.xvb.token.len() == 9
|
||||
&& self.state.xvb.token.parse::<u32>().is_ok();
|
||||
ui.set_enabled(ui_enabled);
|
||||
ui.add_enabled_ui(ui_enabled, |ui| {
|
||||
let color = if ui_enabled { GREEN } else { RED };
|
||||
if (ui_enabled && key.is_up() && !wants_input)
|
||||
|| ui
|
||||
|
@ -654,6 +657,7 @@ impl crate::app::App {
|
|||
&self.state.xmrig_proxy,
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
@ -726,7 +730,7 @@ impl crate::app::App {
|
|||
ui_enabled = false;
|
||||
text = format!("Error: {}", XMRIG_PROXY_PATH_NOT_VALID);
|
||||
}
|
||||
ui.set_enabled(ui_enabled);
|
||||
ui.add_enabled_ui(ui_enabled, |ui| {
|
||||
let color = if ui_enabled { GREEN } else { RED };
|
||||
if (ui_enabled && key.is_up() && !wants_input)
|
||||
|| ui
|
||||
|
@ -744,6 +748,7 @@ impl crate::app::App {
|
|||
&self.state.gupax.absolute_xp_path,
|
||||
);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
}
|
||||
|
|
|
@ -45,23 +45,31 @@ impl Gupax {
|
|||
// If [Gupax] is being built for a Linux distro,
|
||||
// disable built-in updating completely.
|
||||
#[cfg(feature = "distro")]
|
||||
ui.set_enabled(false);
|
||||
ui.disable(true);
|
||||
#[cfg(feature = "distro")]
|
||||
ui.add_sized([width, button], Button::new("Updates are disabled"))
|
||||
.on_disabled_hover_text(DISTRO_NO_UPDATE);
|
||||
#[cfg(not(feature = "distro"))]
|
||||
ui.set_enabled(!updating && *lock!(restart) == Restart::No);
|
||||
ui.add_enabled_ui(!updating && *lock!(restart) == Restart::No, |ui| {
|
||||
#[cfg(not(feature = "distro"))]
|
||||
if ui
|
||||
.add_sized([width, button], Button::new("Check for updates"))
|
||||
.on_hover_text(GUPAX_UPDATE)
|
||||
.clicked()
|
||||
{
|
||||
Update::spawn_thread(og, self, state_path, update, error_state, restart);
|
||||
Update::spawn_thread(
|
||||
og,
|
||||
self,
|
||||
state_path,
|
||||
update,
|
||||
error_state,
|
||||
restart,
|
||||
);
|
||||
}
|
||||
});
|
||||
});
|
||||
ui.vertical(|ui| {
|
||||
ui.set_enabled(updating);
|
||||
ui.add_enabled_ui(updating, |ui| {
|
||||
let prog = *lock2!(update, prog);
|
||||
let msg = format!("{}\n{}{}", *lock2!(update, msg), prog, "%");
|
||||
ui.add_sized([width, height * 1.4], Label::new(RichText::new(msg)));
|
||||
|
@ -75,6 +83,7 @@ impl Gupax {
|
|||
ui.add_sized(size, ProgressBar::new(lock2!(update, prog).round() / 100.0));
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
debug!("Gupaxx Tab | Rendering bool buttons");
|
||||
ui.horizontal(|ui| {
|
||||
|
@ -165,7 +174,7 @@ impl Gupax {
|
|||
.on_hover_text(P2POOL_PATH_OK);
|
||||
}
|
||||
ui.spacing_mut().text_edit_width = ui.available_width() - SPACE;
|
||||
ui.set_enabled(!lock!(file_window).thread);
|
||||
ui.add_enabled_ui(!lock!(file_window).thread, |ui| {
|
||||
if ui.button("Open").on_hover_text(GUPAX_SELECT).clicked() {
|
||||
Self::spawn_file_window_thread(file_window, FileType::P2pool);
|
||||
}
|
||||
|
@ -175,6 +184,7 @@ impl Gupax {
|
|||
)
|
||||
.on_hover_text(GUPAX_PATH_P2POOL);
|
||||
});
|
||||
});
|
||||
ui.horizontal(|ui| {
|
||||
if self.xmrig_path.is_empty() {
|
||||
ui.add_sized(
|
||||
|
@ -202,7 +212,7 @@ impl Gupax {
|
|||
.on_hover_text(XMRIG_PATH_OK);
|
||||
}
|
||||
ui.spacing_mut().text_edit_width = ui.available_width() - SPACE;
|
||||
ui.set_enabled(!lock!(file_window).thread);
|
||||
ui.add_enabled_ui(!lock!(file_window).thread, |ui| {
|
||||
if ui.button("Open").on_hover_text(GUPAX_SELECT).clicked() {
|
||||
Self::spawn_file_window_thread(file_window, FileType::Xmrig);
|
||||
}
|
||||
|
@ -212,6 +222,7 @@ impl Gupax {
|
|||
)
|
||||
.on_hover_text(GUPAX_PATH_XMRIG);
|
||||
});
|
||||
});
|
||||
ui.horizontal(|ui| {
|
||||
if self.xmrig_proxy_path.is_empty() {
|
||||
ui.add_sized(
|
||||
|
@ -241,7 +252,7 @@ impl Gupax {
|
|||
.on_hover_text(XMRIG_PROXY_PATH_OK);
|
||||
}
|
||||
ui.spacing_mut().text_edit_width = ui.available_width() - SPACE;
|
||||
ui.set_enabled(!lock!(file_window).thread);
|
||||
ui.add_enabled_ui(!lock!(file_window).thread, |ui| {
|
||||
if ui.button("Open").on_hover_text(GUPAX_SELECT).clicked() {
|
||||
Self::spawn_file_window_thread(file_window, FileType::XmrigProxy);
|
||||
}
|
||||
|
@ -252,6 +263,7 @@ impl Gupax {
|
|||
.on_hover_text(GUPAX_PATH_XMRIG_PROXY);
|
||||
});
|
||||
});
|
||||
});
|
||||
let mut guard = lock!(file_window);
|
||||
if guard.picked_p2pool {
|
||||
self.p2pool_path.clone_from(&guard.p2pool_path);
|
||||
|
@ -365,7 +377,7 @@ impl Gupax {
|
|||
let height = height / 3.5;
|
||||
let size = vec2(width, height);
|
||||
ui.horizontal(|ui| {
|
||||
ui.set_enabled(self.ratio != Ratio::Height);
|
||||
ui.add_enabled_ui(self.ratio != Ratio::Height, |ui| {
|
||||
ui.add_sized(
|
||||
size,
|
||||
Label::new(format!(
|
||||
|
@ -382,8 +394,9 @@ impl Gupax {
|
|||
)
|
||||
.on_hover_text(GUPAX_WIDTH);
|
||||
});
|
||||
});
|
||||
ui.horizontal(|ui| {
|
||||
ui.set_enabled(self.ratio != Ratio::Width);
|
||||
ui.add_enabled_ui(self.ratio != Ratio::Width, |ui| {
|
||||
ui.add_sized(
|
||||
size,
|
||||
Label::new(format!(
|
||||
|
@ -400,6 +413,7 @@ impl Gupax {
|
|||
)
|
||||
.on_hover_text(GUPAX_HEIGHT);
|
||||
});
|
||||
});
|
||||
ui.horizontal(|ui| {
|
||||
ui.add_sized(
|
||||
size,
|
||||
|
|
|
@ -154,7 +154,7 @@ impl P2pool {
|
|||
let text = format!("{}\n Currently selected node: {}. {}\n Current amount of nodes: {}/1000", text, self.selected_index+1, self.selected_name, node_vec_len);
|
||||
// If the node already exists, show [Save] and mutate the already existing node
|
||||
if exists {
|
||||
ui.set_enabled(!incorrect_input && save_diff);
|
||||
ui.add_enabled_ui(!incorrect_input && save_diff, |ui|{
|
||||
if ui.add_sized([width, text_edit], Button::new("Save")).on_hover_text(text).clicked() {
|
||||
let node = Node {
|
||||
ip: self.ip.clone(),
|
||||
|
@ -168,9 +168,10 @@ impl P2pool {
|
|||
self.selected_zmq.clone_from(&self.zmq);
|
||||
info!("Node | S | [index: {}, name: \"{}\", ip: \"{}\", rpc: {}, zmq: {}]", existing_index+1, self.name, self.ip, self.rpc, self.zmq);
|
||||
}
|
||||
});
|
||||
// Else, add to the list
|
||||
} else {
|
||||
ui.set_enabled(!incorrect_input && node_vec_len < 1000);
|
||||
ui.add_enabled_ui(!incorrect_input && node_vec_len < 1000, |ui| {
|
||||
if ui.add_sized([width, text_edit], Button::new("Add")).on_hover_text(text).clicked() {
|
||||
let node = Node {
|
||||
ip: self.ip.clone(),
|
||||
|
@ -185,11 +186,12 @@ impl P2pool {
|
|||
self.selected_zmq.clone_from(&self.zmq);
|
||||
info!("Node | A | [index: {}, name: \"{}\", ip: \"{}\", rpc: {}, zmq: {}]", node_vec_len, self.name, self.ip, self.rpc, self.zmq);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
// [Delete]
|
||||
ui.horizontal(|ui| {
|
||||
ui.set_enabled(node_vec_len > 1);
|
||||
ui.add_enabled_ui(node_vec_len > 1, |ui|{
|
||||
let text = format!("{}\n Currently selected node: {}. {}\n Current amount of nodes: {}/1000", LIST_DELETE, self.selected_index+1, self.selected_name, node_vec_len);
|
||||
if ui.add_sized([width, text_edit], Button::new("Delete")).on_hover_text(text).clicked() {
|
||||
let new_name;
|
||||
|
@ -218,14 +220,17 @@ impl P2pool {
|
|||
info!("Node | D | [index: {}, name: \"{}\", ip: \"{}\", rpc: {}, zmq: {}]", self.selected_index, self.selected_name, self.selected_ip, self.selected_rpc, self.selected_zmq);
|
||||
}
|
||||
});
|
||||
});
|
||||
ui.horizontal(|ui| {
|
||||
ui.set_enabled(!self.name.is_empty() || !self.ip.is_empty() || !self.rpc.is_empty() || !self.zmq.is_empty());
|
||||
ui.add_enabled_ui(!self.name.is_empty() || !self.ip.is_empty() || !self.rpc.is_empty() || !self.zmq.is_empty(), |ui|{
|
||||
if ui.add_sized([width, text_edit], Button::new("Clear")).on_hover_text(LIST_CLEAR).clicked() {
|
||||
self.name.clear();
|
||||
self.ip.clear();
|
||||
self.rpc.clear();
|
||||
self.zmq.clear();
|
||||
}
|
||||
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
|
|
@ -130,7 +130,9 @@ impl P2pool {
|
|||
self.arguments.truncate(1024);
|
||||
})
|
||||
});
|
||||
ui.set_enabled(self.arguments.is_empty());
|
||||
if !self.arguments.is_empty() {
|
||||
ui.disable()
|
||||
}
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------- Address
|
||||
|
|
|
@ -138,7 +138,7 @@ impl P2pool {
|
|||
ui.vertical(|ui| {
|
||||
let height = height / 2.0;
|
||||
let pinging = lock!(ping).pinging;
|
||||
ui.set_enabled(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;
|
||||
|
@ -155,6 +155,7 @@ impl P2pool {
|
|||
ui.add_space(space_h);
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
debug!("P2Pool Tab | Rendering [Auto-*] buttons");
|
||||
ui.group(|ui| {
|
||||
|
|
|
@ -120,12 +120,13 @@ impl Status {
|
|||
ui.add_sized([width, text], ProgressBar::new(percent / 100.0));
|
||||
}
|
||||
} else {
|
||||
ui.set_enabled(xmrig_alive);
|
||||
ui.add_enabled_ui(xmrig_alive, |ui| {
|
||||
ui.add_sized(
|
||||
[width, double],
|
||||
Label::new("XMRig is offline. Hashrate cannot be determined."),
|
||||
);
|
||||
ui.add_sized([width, text], ProgressBar::new(0.0));
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
|
|
|
@ -156,7 +156,7 @@ impl Status {
|
|||
self.manual_hash = true;
|
||||
}
|
||||
ui.separator();
|
||||
ui.set_enabled(self.manual_hash);
|
||||
ui.add_enabled_ui(self.manual_hash, |ui| {
|
||||
if ui
|
||||
.add_sized(
|
||||
[button, text],
|
||||
|
@ -206,10 +206,11 @@ impl Status {
|
|||
[button * 14.0, text],
|
||||
Slider::new(&mut self.hashrate, 1.0..=1_000.0),
|
||||
);
|
||||
});
|
||||
})
|
||||
});
|
||||
// Actual stats
|
||||
ui.set_enabled(p2pool_alive);
|
||||
ui.add_enabled_ui(p2pool_alive, |ui| {
|
||||
let text = height / 25.0;
|
||||
let width = (width / 3.0) - (SPACE * 1.666);
|
||||
let min_height = ui.available_height() / 1.3;
|
||||
|
@ -272,10 +273,15 @@ impl Status {
|
|||
);
|
||||
ui.add_sized(
|
||||
[width, text],
|
||||
Label::new(RichText::new("P2Pool Block Mean").underline().color(BONE)),
|
||||
Label::new(
|
||||
RichText::new("P2Pool Block Mean").underline().color(BONE),
|
||||
),
|
||||
)
|
||||
.on_hover_text(STATUS_SUBMENU_P2POOL_BLOCK_MEAN);
|
||||
ui.add_sized([width, text], Label::new(api.p2pool_block_mean.to_string()));
|
||||
ui.add_sized(
|
||||
[width, text],
|
||||
Label::new(api.p2pool_block_mean.to_string()),
|
||||
);
|
||||
ui.add_sized(
|
||||
[width, text],
|
||||
Label::new(
|
||||
|
@ -312,10 +318,15 @@ impl Status {
|
|||
);
|
||||
ui.add_sized(
|
||||
[width, text],
|
||||
Label::new(RichText::new("P2Pool Block Mean").underline().color(BONE)),
|
||||
Label::new(
|
||||
RichText::new("P2Pool Block Mean").underline().color(BONE),
|
||||
),
|
||||
)
|
||||
.on_hover_text(STATUS_SUBMENU_P2POOL_BLOCK_MEAN);
|
||||
ui.add_sized([width, text], Label::new(api.p2pool_block_mean.to_string()));
|
||||
ui.add_sized(
|
||||
[width, text],
|
||||
Label::new(api.p2pool_block_mean.to_string()),
|
||||
);
|
||||
ui.add_sized(
|
||||
[width, text],
|
||||
Label::new(
|
||||
|
@ -325,7 +336,10 @@ impl Status {
|
|||
),
|
||||
)
|
||||
.on_hover_text(STATUS_SUBMENU_P2POOL_SHARE_MEAN);
|
||||
ui.add_sized([width, text], Label::new(api.p2pool_share_mean.to_string()));
|
||||
ui.add_sized(
|
||||
[width, text],
|
||||
Label::new(api.p2pool_share_mean.to_string()),
|
||||
);
|
||||
ui.add_sized(
|
||||
[width, text],
|
||||
Label::new(
|
||||
|
@ -335,7 +349,10 @@ impl Status {
|
|||
),
|
||||
)
|
||||
.on_hover_text(STATUS_SUBMENU_SOLO_BLOCK_MEAN);
|
||||
ui.add_sized([width, text], Label::new(api.solo_block_mean.to_string()));
|
||||
ui.add_sized(
|
||||
[width, text],
|
||||
Label::new(api.solo_block_mean.to_string()),
|
||||
);
|
||||
}
|
||||
})
|
||||
});
|
||||
|
@ -345,10 +362,14 @@ impl Status {
|
|||
if self.manual_hash {
|
||||
let hashrate =
|
||||
Hash::convert_to_hash(self.hashrate, self.hash_metric) as u64;
|
||||
let user_p2pool_percent =
|
||||
PubP2poolApi::calculate_dominance(hashrate, api.p2pool_hashrate_u64);
|
||||
let user_monero_percent =
|
||||
PubP2poolApi::calculate_dominance(hashrate, api.monero_hashrate_u64);
|
||||
let user_p2pool_percent = PubP2poolApi::calculate_dominance(
|
||||
hashrate,
|
||||
api.p2pool_hashrate_u64,
|
||||
);
|
||||
let user_monero_percent = PubP2poolApi::calculate_dominance(
|
||||
hashrate,
|
||||
api.monero_hashrate_u64,
|
||||
);
|
||||
ui.add_sized(
|
||||
[width, text],
|
||||
Label::new(RichText::new("P2Pool Miners").underline().color(BONE)),
|
||||
|
@ -357,7 +378,9 @@ impl Status {
|
|||
ui.add_sized([width, text], Label::new(api.miners.as_str()));
|
||||
ui.add_sized(
|
||||
[width, text],
|
||||
Label::new(RichText::new("P2Pool Dominance").underline().color(BONE)),
|
||||
Label::new(
|
||||
RichText::new("P2Pool Dominance").underline().color(BONE),
|
||||
),
|
||||
)
|
||||
.on_hover_text(STATUS_SUBMENU_P2POOL_DOMINANCE);
|
||||
ui.add_sized([width, text], Label::new(api.p2pool_percent.as_str()));
|
||||
|
@ -390,7 +413,9 @@ impl Status {
|
|||
ui.add_sized([width, text], Label::new(api.miners.as_str()));
|
||||
ui.add_sized(
|
||||
[width, text],
|
||||
Label::new(RichText::new("P2Pool Dominance").underline().color(BONE)),
|
||||
Label::new(
|
||||
RichText::new("P2Pool Dominance").underline().color(BONE),
|
||||
),
|
||||
)
|
||||
.on_hover_text(STATUS_SUBMENU_P2POOL_DOMINANCE);
|
||||
ui.add_sized([width, text], Label::new(api.p2pool_percent.as_str()));
|
||||
|
@ -403,7 +428,10 @@ impl Status {
|
|||
),
|
||||
)
|
||||
.on_hover_text(STATUS_SUBMENU_YOUR_P2POOL_DOMINANCE);
|
||||
ui.add_sized([width, text], Label::new(api.user_p2pool_percent.as_str()));
|
||||
ui.add_sized(
|
||||
[width, text],
|
||||
Label::new(api.user_p2pool_percent.as_str()),
|
||||
);
|
||||
ui.add_sized(
|
||||
[width, text],
|
||||
Label::new(
|
||||
|
@ -413,7 +441,10 @@ impl Status {
|
|||
),
|
||||
)
|
||||
.on_hover_text(STATUS_SUBMENU_YOUR_MONERO_DOMINANCE);
|
||||
ui.add_sized([width, text], Label::new(api.user_monero_percent.as_str()));
|
||||
ui.add_sized(
|
||||
[width, text],
|
||||
Label::new(api.user_monero_percent.as_str()),
|
||||
);
|
||||
}
|
||||
})
|
||||
});
|
||||
|
@ -425,5 +456,6 @@ impl Status {
|
|||
)
|
||||
.on_hover_text(STATUS_SUBMENU_PROGRESS_BAR);
|
||||
drop(api);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
|
|
@ -142,7 +142,7 @@ fn p2pool(
|
|||
ui.set_min_height(min_size.y * 34.0);
|
||||
ui.set_min_size(min_size);
|
||||
debug!("Status Tab | Rendering [P2Pool]");
|
||||
ui.set_enabled(p2pool_alive);
|
||||
ui.add_enabled_ui(p2pool_alive, |ui| {
|
||||
ui.add_sized(
|
||||
size,
|
||||
Label::new(
|
||||
|
@ -271,6 +271,7 @@ fn p2pool(
|
|||
ui.add_sized(size, Label::new(&img.address));
|
||||
drop(img);
|
||||
drop(api);
|
||||
});
|
||||
})
|
||||
})
|
||||
});
|
||||
|
@ -287,7 +288,7 @@ fn xmrig_proxy(
|
|||
ui.vertical(|ui| {
|
||||
ui.set_min_height(min_size.y * 34.0);
|
||||
debug!("Status Tab | Rendering [XMRig-Proxy]");
|
||||
ui.set_enabled(xmrig_proxy_alive);
|
||||
ui.add_enabled_ui(xmrig_proxy_alive, |ui| {
|
||||
ui.set_min_size(min_size);
|
||||
ui.add_sized(
|
||||
size,
|
||||
|
@ -340,6 +341,7 @@ fn xmrig_proxy(
|
|||
.on_hover_text(STATUS_XMRIG_PROXY_POOL);
|
||||
ui.add_sized(size, Label::new(api.node.to_string()));
|
||||
drop(api);
|
||||
});
|
||||
})
|
||||
});
|
||||
}
|
||||
|
@ -359,7 +361,7 @@ fn xmrig(
|
|||
ui.set_min_height(min_size.y * 34.0);
|
||||
ui.spacing_mut().item_spacing = Vec2::new(2.0, 2.0);
|
||||
debug!("Status Tab | Rendering [XMRig]");
|
||||
ui.set_enabled(xmrig_alive);
|
||||
ui.add_enabled_ui(xmrig_alive, |ui| {
|
||||
// ui.set_min_size(min_size);
|
||||
ui.add_sized(
|
||||
size,
|
||||
|
@ -423,6 +425,7 @@ fn xmrig(
|
|||
Label::new(format!("{}/{}", &lock!(xmrig_img).threads, max_threads)),
|
||||
);
|
||||
drop(api);
|
||||
});
|
||||
})
|
||||
// })
|
||||
});
|
||||
|
@ -437,7 +440,8 @@ fn xvb(ui: &mut Ui, min_size: Vec2, size: Vec2, xvb_alive: bool, xvb_api: &Arc<M
|
|||
ui.set_min_height(min_size.y * 34.0);
|
||||
ui.vertical(|ui| {
|
||||
debug!("Status Tab | Rendering [XvB]");
|
||||
ui.set_enabled(enabled); // for now there is no API ping or /health, so we verify if the field reward_yearly is empty or not.
|
||||
ui.add_enabled_ui(enabled, |ui| {
|
||||
// for now there is no API ping or /health, so we verify if the field reward_yearly is empty or not.
|
||||
// ui.set_min_size(min_size);
|
||||
ui.add_sized(
|
||||
size,
|
||||
|
@ -544,6 +548,7 @@ fn xvb(ui: &mut Ui, min_size: Vec2, size: Vec2, xvb_alive: bool, xvb_api: &Arc<M
|
|||
)),
|
||||
);
|
||||
}
|
||||
});
|
||||
})
|
||||
// by round
|
||||
});
|
||||
|
|
|
@ -119,7 +119,8 @@ impl Xmrig {
|
|||
self.arguments.truncate(1024);
|
||||
})
|
||||
});
|
||||
ui.set_enabled(self.arguments.is_empty());
|
||||
ui.add_enabled_ui(self.arguments.is_empty(), |ui|{
|
||||
|
||||
//---------------------------------------------------------------------------------------------------- Address
|
||||
debug!("XMRig Tab | Rendering [Address]");
|
||||
ui.group(|ui| {
|
||||
|
@ -149,6 +150,7 @@ impl Xmrig {
|
|||
.on_hover_text(XMRIG_ADDRESS);
|
||||
self.address.truncate(95);
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
//---------------------------------------------------------------------------------------------------- Threads
|
||||
|
@ -321,7 +323,7 @@ impl Xmrig {
|
|||
let text = format!("{}\n Currently selected pool: {}. {}\n Current amount of pools: {}/1000", text, self.selected_index+1, self.selected_name, pool_vec_len);
|
||||
// If the pool already exists, show [Save] and mutate the already existing pool
|
||||
if exists {
|
||||
ui.set_enabled(!incorrect_input && save_diff);
|
||||
ui.add_enabled_ui(!incorrect_input && save_diff, |ui|{
|
||||
if ui.add_sized([width, text_edit], Button::new("Save")).on_hover_text(text).clicked() {
|
||||
let pool = Pool {
|
||||
rig: self.rig.clone(),
|
||||
|
@ -335,9 +337,10 @@ impl Xmrig {
|
|||
self.selected_port.clone_from(&self.port);
|
||||
info!("Node | S | [index: {}, name: \"{}\", ip: \"{}\", port: {}, rig: \"{}\"]", existing_index+1, self.name, self.ip, self.port, self.rig);
|
||||
}
|
||||
});
|
||||
// Else, add to the list
|
||||
} else {
|
||||
ui.set_enabled(!incorrect_input && pool_vec_len < 1000);
|
||||
ui.add_enabled_ui(!incorrect_input && pool_vec_len < 1000, |ui|{
|
||||
if ui.add_sized([width, text_edit], Button::new("Add")).on_hover_text(text).clicked() {
|
||||
let pool = Pool {
|
||||
rig: self.rig.clone(),
|
||||
|
@ -352,11 +355,12 @@ impl Xmrig {
|
|||
self.selected_port.clone_from(&self.port);
|
||||
info!("Node | A | [index: {}, name: \"{}\", ip: \"{}\", port: {}, rig: \"{}\"]", pool_vec_len, self.name, self.ip, self.port, self.rig);
|
||||
}
|
||||
});
|
||||
}
|
||||
});
|
||||
// [Delete]
|
||||
ui.horizontal(|ui| {
|
||||
ui.set_enabled(pool_vec_len > 1);
|
||||
ui.add_enabled_ui(pool_vec_len > 1, |ui|{
|
||||
let text = format!("{}\n Currently selected pool: {}. {}\n Current amount of pools: {}/1000", LIST_DELETE, self.selected_index+1, self.selected_name, pool_vec_len);
|
||||
if ui.add_sized([width, text_edit], Button::new("Delete")).on_hover_text(text).clicked() {
|
||||
let new_name;
|
||||
|
@ -385,8 +389,10 @@ impl Xmrig {
|
|||
info!("Node | D | [index: {}, name: \"{}\", ip: \"{}\", port: {}, rig\"{}\"]", self.selected_index, self.selected_name, self.selected_ip, self.selected_port, self.selected_rig);
|
||||
}
|
||||
});
|
||||
|
||||
});
|
||||
ui.horizontal(|ui| {
|
||||
ui.set_enabled(!self.name.is_empty() || !self.ip.is_empty() || !self.port.is_empty());
|
||||
ui.add_enabled_ui(!self.name.is_empty() || !self.ip.is_empty() || !self.port.is_empty(), |ui|{
|
||||
if ui.add_sized([width, text_edit], Button::new("Clear")).on_hover_text(LIST_CLEAR).clicked() {
|
||||
self.name.clear();
|
||||
self.rig.clear();
|
||||
|
@ -397,6 +403,7 @@ impl Xmrig {
|
|||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
ui.add_space(5.0);
|
||||
|
||||
debug!("XMRig Tab | Rendering [API] TextEdits");
|
||||
|
|
|
@ -109,7 +109,9 @@ impl XmrigProxy {
|
|||
self.arguments.truncate(1024);
|
||||
})
|
||||
});
|
||||
ui.set_enabled(self.arguments.is_empty());
|
||||
if !self.arguments.is_empty() {
|
||||
ui.disable();
|
||||
}
|
||||
ui.add_space(space_h);
|
||||
ui.style_mut().spacing.icon_width_inner = width / 45.0;
|
||||
ui.style_mut().spacing.icon_width = width / 35.0;
|
||||
|
@ -262,7 +264,7 @@ impl XmrigProxy {
|
|||
let text = format!("{}\n Currently selected pool: {}. {}\n Current amount of pools: {}/1000", text, self.selected_index+1, self.selected_name, pool_vec_len);
|
||||
// If the pool already exists, show [Save] and mutate the already existing pool
|
||||
if exists {
|
||||
ui.set_enabled(!incorrect_input && save_diff);
|
||||
ui.add_enabled_ui(!incorrect_input && save_diff, |ui|{
|
||||
if ui.add_sized([width, text_edit], Button::new("Save")).on_hover_text(text).clicked() {
|
||||
let pool = Pool {
|
||||
rig: self.rig.clone(),
|
||||
|
@ -276,9 +278,11 @@ impl XmrigProxy {
|
|||
self.selected_port.clone_from(&self.p2pool_port);
|
||||
info!("Node | S | [index: {}, name: \"{}\", ip: \"{}\", port: {}, rig: \"{}\"]", existing_index+1, self.name, self.p2pool_ip, self.p2pool_port, self.rig);
|
||||
}
|
||||
|
||||
});
|
||||
// Else, add to the list
|
||||
} else {
|
||||
ui.set_enabled(!incorrect_input && pool_vec_len < 1000);
|
||||
ui.add_enabled_ui(!incorrect_input && pool_vec_len < 1000, |ui|{
|
||||
if ui.add_sized([width, text_edit], Button::new("Add")).on_hover_text(text).clicked() {
|
||||
let pool = Pool {
|
||||
rig: self.rig.clone(),
|
||||
|
@ -293,11 +297,13 @@ impl XmrigProxy {
|
|||
self.selected_port.clone_from(&self.p2pool_port);
|
||||
info!("Node | A | [index: {}, name: \"{}\", ip: \"{}\", port: {}, rig: \"{}\"]", pool_vec_len, self.name, self.p2pool_ip, self.p2pool_port, self.rig);
|
||||
}
|
||||
|
||||
});
|
||||
}
|
||||
});
|
||||
// [Delete]
|
||||
ui.horizontal(|ui| {
|
||||
ui.set_enabled(pool_vec_len > 1);
|
||||
ui.add_enabled_ui(pool_vec_len > 1, |ui|{
|
||||
let text = format!("{}\n Currently selected pool: {}. {}\n Current amount of pools: {}/1000", LIST_DELETE, self.selected_index+1, self.selected_name, pool_vec_len);
|
||||
if ui.add_sized([width, text_edit], Button::new("Delete")).on_hover_text(text).clicked() {
|
||||
let new_name;
|
||||
|
@ -326,8 +332,9 @@ impl XmrigProxy {
|
|||
info!("Node | D | [index: {}, name: \"{}\", ip: \"{}\", port: {}, rig\"{}\"]", self.selected_index, self.selected_name, self.selected_ip, self.selected_port, self.selected_rig);
|
||||
}
|
||||
});
|
||||
});
|
||||
ui.horizontal(|ui| {
|
||||
ui.set_enabled(!self.name.is_empty() || !self.p2pool_ip.is_empty() || !self.p2pool_port.is_empty());
|
||||
ui.add_enabled_ui(!self.name.is_empty() || !self.p2pool_ip.is_empty() || !self.p2pool_port.is_empty(), |ui|{
|
||||
if ui.add_sized([width, text_edit], Button::new("Clear")).on_hover_text(LIST_CLEAR).clicked() {
|
||||
self.name.clear();
|
||||
self.rig.clear();
|
||||
|
@ -338,6 +345,7 @@ impl XmrigProxy {
|
|||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
ui.add_space(5.0);
|
||||
|
||||
debug!("XMRig Tab | Rendering [API] TextEdits");
|
||||
|
|
|
@ -281,7 +281,7 @@ impl crate::app::App {
|
|||
let hide = sudo.hide;
|
||||
if sudo.testing {
|
||||
ui.add_sized([width, height], Spinner::new().size(height));
|
||||
ui.set_enabled(false);
|
||||
ui.disable()
|
||||
} else {
|
||||
ui.add_sized([width, height], Label::new(&sudo.msg));
|
||||
}
|
||||
|
|
|
@ -512,7 +512,10 @@ impl Helper {
|
|||
// 2. Selectively refresh [sysinfo] for only what we need (better performance).
|
||||
sysinfo.refresh_cpu_specifics(sysinfo_cpu);
|
||||
debug!("Helper | Sysinfo refresh (1/3) ... [cpu]");
|
||||
sysinfo.refresh_processes_specifics(sysinfo_processes);
|
||||
sysinfo.refresh_processes_specifics(
|
||||
sysinfo::ProcessesToUpdate::All,
|
||||
sysinfo_processes,
|
||||
);
|
||||
debug!("Helper | Sysinfo refresh (2/3) ... [processes]");
|
||||
sysinfo.refresh_memory();
|
||||
debug!("Helper | Sysinfo refresh (3/3) ... [memory]");
|
||||
|
|
|
@ -18,14 +18,14 @@ use crate::{
|
|||
use super::PubXvbApi;
|
||||
#[derive(Copy, Clone, Debug, Default, PartialEq, Display)]
|
||||
pub enum XvbNode {
|
||||
#[display(fmt = "XvB North America Node")]
|
||||
#[display("XvB North America Node")]
|
||||
NorthAmerica,
|
||||
#[default]
|
||||
#[display(fmt = "XvB European Node")]
|
||||
#[display("XvB European Node")]
|
||||
Europe,
|
||||
#[display(fmt = "Local P2pool")]
|
||||
#[display("Local P2pool")]
|
||||
P2pool,
|
||||
#[display(fmt = "Xmrig Proxy")]
|
||||
#[display("Xmrig Proxy")]
|
||||
XmrigProxy,
|
||||
}
|
||||
impl XvbNode {
|
||||
|
|
|
@ -12,18 +12,18 @@ use super::PubXvbApi;
|
|||
#[derive(Debug, Clone, Default, Display, Deserialize, PartialEq)]
|
||||
pub enum XvbRound {
|
||||
#[default]
|
||||
#[display(fmt = "VIP")]
|
||||
#[display("VIP")]
|
||||
#[serde(alias = "vip")]
|
||||
Vip,
|
||||
#[serde(alias = "donor")]
|
||||
Donor,
|
||||
#[display(fmt = "VIP Donor")]
|
||||
#[display("VIP Donor")]
|
||||
#[serde(alias = "donor_vip")]
|
||||
DonorVip,
|
||||
#[display(fmt = "Whale Donor")]
|
||||
#[display("Whale Donor")]
|
||||
#[serde(alias = "donor_whale")]
|
||||
DonorWhale,
|
||||
#[display(fmt = "Mega Donor")]
|
||||
#[display("Mega Donor")]
|
||||
#[serde(alias = "donor_mega")]
|
||||
DonorMega,
|
||||
}
|
||||
|
|
|
@ -125,8 +125,6 @@ pub fn init_options(initial_window_size: Option<Vec2>) -> NativeOptions {
|
|||
options.viewport.min_inner_size = Some(Vec2::new(APP_MIN_WIDTH, APP_MIN_HEIGHT));
|
||||
options.viewport.max_inner_size = Some(Vec2::new(APP_MAX_WIDTH, APP_MAX_HEIGHT));
|
||||
options.viewport.inner_size = initial_window_size;
|
||||
options.follow_system_theme = false;
|
||||
options.default_theme = eframe::Theme::Dark;
|
||||
let icon = image::load_from_memory(BYTES_ICON)
|
||||
.expect("Failed to read icon bytes")
|
||||
.to_rgba8();
|
||||
|
|
|
@ -20,10 +20,10 @@
|
|||
|
||||
// Only (windows|macos|linux) + (x64|arm64) are supported.
|
||||
#[cfg(not(target_pointer_width = "64"))]
|
||||
compile_error!("gupax is only compatible with 64-bit CPUs");
|
||||
compile_error!("gupaxx is only compatible with 64-bit CPUs");
|
||||
|
||||
#[cfg(not(any(target_os = "windows", target_os = "macos", target_os = "linux",)))]
|
||||
compile_error!("gupax is only built for windows/macos/linux");
|
||||
compile_error!("gupaxx is only built for windows/macos/linux");
|
||||
|
||||
use crate::app::App;
|
||||
use crate::cli::Cli;
|
||||
|
@ -96,7 +96,7 @@ fn main() {
|
|||
options,
|
||||
Box::new(move |cc| {
|
||||
egui_extras::install_image_loaders(&cc.egui_ctx);
|
||||
Box::new(App::cc(cc, resolution, app))
|
||||
Ok(Box::new(App::cc(cc, resolution, app)))
|
||||
}),
|
||||
)
|
||||
.unwrap();
|
||||
|
|
Loading…
Reference in a new issue