diff --git a/src/app/panels/middle/about.rs b/src/app/panels/middle/about.rs new file mode 100644 index 0000000..d1fe7f8 --- /dev/null +++ b/src/app/panels/middle/about.rs @@ -0,0 +1,156 @@ +use egui::{Image, Label, ScrollArea, TextStyle, Ui, Vec2}; +use log::debug; + +use crate::{ + BYTES_BANNER, COMMIT, GUPAX_VERSION, KEYBOARD_SHORTCUTS, OS_NAME, P2POOL_VERSION, SPACE, + XMRIG_PROXY_VERSION, XMRIG_VERSION, + app::keys::KeyPressed, + errors::{ErrorButtons, ErrorFerris}, +}; + +impl crate::app::App { + #[allow(clippy::too_many_arguments)] + pub fn about_show(&mut self, key: KeyPressed, ui: &mut Ui) { + ScrollArea::vertical().show(ui, |ui|{ + debug!("App | Entering [About] Tab"); + // If [D], show some debug info with [ErrorState] + if key.is_d() { + debug!("App | Entering [Debug Info]"); + #[cfg(feature = "distro")] + let distro = true; + #[cfg(not(feature = "distro"))] + let distro = false; + let node_gui_len = self.node_api.lock().unwrap().output.len(); + let p2pool_gui_len = self.p2pool_api.lock().unwrap().output.len(); + let xmrig_gui_len = self.xmrig_api.lock().unwrap().output.len(); + let xmrig_proxy_gui_len = self.xmrig_proxy_api.lock().unwrap().output.len(); + let gupax_p2pool_api = self.gupax_p2pool_api.lock().unwrap(); + let debug_info = format!( +"Gupax version: {}\n +Bundled Node version: {}\n +Bundled P2Pool version: {}\n +Bundled XMRig version: {}\n +Bundled XMRig-Proxy version: {}\n +Gupax uptime: {} seconds\n +Selected resolution: {}x{}\n +Internal resolution: {}x{}\n +Operating system: {}\n +Max detected threads: {}\n +Gupax PID: {}\n +State diff: {}\n +Node list length: {}\n +Pool list length: {}\n +Admin privilege: {}\n +Release build: {}\n +Debug build: {}\n +Distro build: {}\n +Build commit: {}\n +OS Data PATH: {}\n +Gupax PATH: {}\n +P2Pool PATH: {}\n +XMRig PATH: {}\n +XMRig-Proxy PATH: {}\n +P2Pool console byte length: {}\n +XMRig console byte length: {}\n +XMRig-Proxy console byte length: {}\n +------------------------------------------ P2POOL IMAGE ------------------------------------------ +{:#?}\n +------------------------------------------ XMRIG IMAGE ------------------------------------------ +{:#?}\n +------------------------------------------ GUPAX-P2POOL API ------------------------------------------ +payout: {:#?} +payout_u64: {:#?} +xmr: {:#?} +path_log: {:#?} +path_payout: {:#?} +path_xmr: {:#?}\n +------------------------------------------ WORKING STATE ------------------------------------------ +{:#?}\n +------------------------------------------ ORIGINAL STATE ------------------------------------------ +{:#?}", + GUPAX_VERSION, + P2POOL_VERSION, + XMRIG_VERSION, + XMRIG_PROXY_VERSION, + self.now.elapsed().as_secs_f32(), + self.state.gupax.selected_width, + self.state.gupax.selected_height, + self.size.x, + self.size.y, + OS_NAME, + self.max_threads, + self.pid, + self.diff, + self.node_vec.len(), + self.pool_vec.len(), + self.admin, + !cfg!(debug_assertions), + cfg!(debug_assertions), + distro, + COMMIT, + self.os_data_path.display(), + self.exe, + self.state.gupax.absolute_p2pool_path.display(), + self.state.gupax.absolute_xmrig_path.display(), + self.state.gupax.absolute_xp_path.display(), + node_gui_len, + p2pool_gui_len, + xmrig_gui_len, + xmrig_proxy_gui_len, + self.p2pool_img.lock().unwrap(), + self.xmrig_img.lock().unwrap(), + gupax_p2pool_api.payout, + gupax_p2pool_api.payout_u64, + gupax_p2pool_api.xmr, + gupax_p2pool_api.path_log, + gupax_p2pool_api.path_payout, + gupax_p2pool_api.path_xmr, + self.state, + self.og.lock().unwrap(), + ); + self.error_state + .set(debug_info, ErrorFerris::Cute, ErrorButtons::Debug); + } + ui.add_space(10.0); + ui.vertical_centered(|ui| { + let space = SPACE * 2.0; + ui.style_mut().override_text_style = Some(TextStyle::Heading); + // ui.set_max_height(max_height); + // Display [Gupaxx] banner + // let link_width = width / 14.0; + ui.add_sized( + Vec2::new(ui.text_style_height(&TextStyle::Heading) * 20.0, 226.0), + Image::from_bytes("bytes://banner.png", BYTES_BANNER), + ); + ui.label("is a GUI for mining"); + ui.add_space(space); + ui.hyperlink_to("[Monero]", "https://www.getmonero.org"); + ui.label("on"); + ui.hyperlink_to("[P2Pool]", "https://www.github.com/SChernykh/p2pool"); + ui.add_space(space); + ui.label("using"); + ui.add_space(space); + ui.hyperlink_to("[Monerod]", "https://github.com/monero-project/monero"); + ui.hyperlink_to("[Xmrig]", "https://www.github.com/xmrig/xmrig"); + ui.hyperlink_to("[Xmrig-Proxy]", "https://www.github.com/xmrig/xmrig-proxy"); + ui.add_space(space); + ui.label(" and participating in"); + ui.hyperlink_to("[XvB Bonus Hashrate Raffle]", "https://xmrvsbeast.com"); + ui.add_space(space); + ui.add_sized([ui.available_width(), 0.0], Label::new(KEYBOARD_SHORTCUTS)); + ui.add_space(space); + + if cfg!(debug_assertions) { + ui.label(format!( + "Gupaxx is running in debug mode - {}", + self.now.elapsed().as_secs_f64() + )); + } + ui.label(format!( + "Gupaxx has been running for {}", + self.pub_sys.lock().unwrap().gupax_uptime + )); + }); + }); + } +} diff --git a/src/app/panels/middle/mod.rs b/src/app/panels/middle/mod.rs index 7c0ad69..36654fd 100644 --- a/src/app/panels/middle/mod.rs +++ b/src/app/panels/middle/mod.rs @@ -3,10 +3,9 @@ use crate::app::eframe_impl::ProcessStatesGui; use crate::app::keys::KeyPressed; use crate::helper::ProcessName; use crate::utils::constants::*; -use crate::utils::errors::{ErrorButtons, ErrorFerris}; use egui::*; use log::debug; - +mod about; mod gupax; mod node; mod p2pool; @@ -26,164 +25,117 @@ impl crate::app::App { // Middle panel, contents of the [Tab] debug!("App | Rendering CENTRAL_PANEL (tab contents)"); CentralPanel::default().show(ctx, |ui| { - // This sets the Ui dimensions after Top/Bottom are filled - self.size.x = ui.available_width(); - self.size.y = ui.available_height(); - ui.style_mut().override_text_style = Some(TextStyle::Body); - match self.tab { - Tab::About => { - debug!("App | Entering [About] Tab"); - // If [D], show some debug info with [ErrorState] - if key.is_d() { - debug!("App | Entering [Debug Info]"); - #[cfg(feature = "distro")] - let distro = true; - #[cfg(not(feature = "distro"))] - let distro = false; - let node_gui_len = self.node_api.lock().unwrap().output.len(); - let p2pool_gui_len = self.p2pool_api.lock().unwrap().output.len(); - let xmrig_gui_len = self.xmrig_api.lock().unwrap().output.len(); - let xmrig_proxy_gui_len = self.xmrig_proxy_api.lock().unwrap().output.len(); - let gupax_p2pool_api = self.gupax_p2pool_api.lock().unwrap(); - let debug_info = format!( -"Gupax version: {}\n -Bundled Node version: {}\n -Bundled P2Pool version: {}\n -Bundled XMRig version: {}\n -Bundled XMRig-Proxy version: {}\n -Gupax uptime: {} seconds\n -Selected resolution: {}x{}\n -Internal resolution: {}x{}\n -Operating system: {}\n -Max detected threads: {}\n -Gupax PID: {}\n -State diff: {}\n -Node list length: {}\n -Pool list length: {}\n -Admin privilege: {}\n -Release build: {}\n -Debug build: {}\n -Distro build: {}\n -Build commit: {}\n -OS Data PATH: {}\n -Gupax PATH: {}\n -P2Pool PATH: {}\n -XMRig PATH: {}\n -XMRig-Proxy PATH: {}\n -P2Pool console byte length: {}\n -XMRig console byte length: {}\n -XMRig-Proxy console byte length: {}\n ------------------------------------------- P2POOL IMAGE ------------------------------------------ -{:#?}\n ------------------------------------------- XMRIG IMAGE ------------------------------------------ -{:#?}\n ------------------------------------------- GUPAX-P2POOL API ------------------------------------------ -payout: {:#?} -payout_u64: {:#?} -xmr: {:#?} -path_log: {:#?} -path_payout: {:#?} -path_xmr: {:#?}\n ------------------------------------------- WORKING STATE ------------------------------------------ -{:#?}\n ------------------------------------------- ORIGINAL STATE ------------------------------------------ -{:#?}", - GUPAX_VERSION, - P2POOL_VERSION, - XMRIG_VERSION, - XMRIG_PROXY_VERSION, - self.now.elapsed().as_secs_f32(), - self.state.gupax.selected_width, - self.state.gupax.selected_height, - self.size.x, - self.size.y, - OS_NAME, - self.max_threads, - self.pid, - self.diff, - self.node_vec.len(), - self.pool_vec.len(), - self.admin, - !cfg!(debug_assertions), - cfg!(debug_assertions), - distro, - COMMIT, - self.os_data_path.display(), - self.exe, - self.state.gupax.absolute_p2pool_path.display(), - self.state.gupax.absolute_xmrig_path.display(), - self.state.gupax.absolute_xp_path.display(), - node_gui_len, - p2pool_gui_len, - xmrig_gui_len, - xmrig_proxy_gui_len, - self.p2pool_img.lock().unwrap(), - self.xmrig_img.lock().unwrap(), - gupax_p2pool_api.payout, - gupax_p2pool_api.payout_u64, - gupax_p2pool_api.xmr, - gupax_p2pool_api.path_log, - gupax_p2pool_api.path_payout, - gupax_p2pool_api.path_xmr, - self.state, - self.og.lock().unwrap(), - ); - self.error_state.set(debug_info, ErrorFerris::Cute, ErrorButtons::Debug); - } - let width = self.size.x; - let height = self.size.y/30.0; - let max_height = self.size.y; - let size = vec2(width, height); - ui.add_space(10.0); - ui.vertical_centered(|ui| { - ui.set_max_height(max_height); - // Display [Gupax] banner - let link_width = width/14.0; - ui.add_sized(Vec2::new(width, height*3.0), Image::from_bytes("bytes://banner.png", BYTES_BANNER)); - ui.add_sized(size, Label::new("is a GUI for mining")); - ui.add_sized([link_width, height], Hyperlink::from_label_and_url("[Monero]", "https://www.github.com/monero-project/monero")); - ui.add_sized(size, Label::new("on")); - ui.add_sized([link_width, height], Hyperlink::from_label_and_url("[P2Pool]", "https://www.github.com/SChernykh/p2pool")); - ui.add_sized(size, Label::new("using")); - ui.add_sized([link_width, height], Hyperlink::from_label_and_url("[XMRig]", "https://www.github.com/xmrig/xmrig")); - - ui.add_space(SPACE*2.0); - ui.add_sized(size, Label::new(KEYBOARD_SHORTCUTS)); - ui.add_space(SPACE*2.0); - - if cfg!(debug_assertions) { ui.label(format!("Gupax is running in debug mode - {}", self.now.elapsed().as_secs_f64())); } - ui.label(format!("Gupax has been running for {}", self.pub_sys.lock().unwrap().gupax_uptime)); - }); - } - Tab::Status => { - debug!("App | Entering [Status] Tab"); - crate::disk::state::Status::show(&mut self.state.status, &self.pub_sys, &self.node_api, &self.p2pool_api, &self.xmrig_api,&self.xmrig_proxy_api, &self.xvb_api,&self.p2pool_img, &self.xmrig_img, states, self.max_threads, &self.gupax_p2pool_api, &self.benchmarks, self.size, ctx, ui); - } - Tab::Gupax => { - debug!("App | Entering [Gupax] Tab"); - crate::disk::state::Gupax::show(&mut self.state.gupax, &self.og, &self.state_path, &self.update, &self.file_window, &mut self.error_state, &self.restart, self.size, frame, ctx, ui, &mut self.must_resize); - } - Tab::Node=> { - debug!("App | Entering [Node] Tab"); - crate::disk::state::Node::show(&mut self.state.node, &self.node, &self.node_api, &mut self.node_stdin, self.size, &self.file_window, ui); - } - Tab::P2pool => { - debug!("App | Entering [P2Pool] Tab"); - crate::disk::state::P2pool::show(&mut self.state.p2pool, &mut self.node_vec, &self.og, &self.ping, &self.p2pool, &self.p2pool_api, &mut self.p2pool_stdin, self.size, ctx, ui); - } - Tab::Xmrig => { - debug!("App | Entering [XMRig] Tab"); - crate::disk::state::Xmrig::show(&mut self.state.xmrig, &mut self.pool_vec, &self.xmrig, &self.xmrig_api, &mut self.xmrig_stdin, self.size, ctx, ui); - } - Tab::XmrigProxy => { - debug!("App | Entering [XMRig-Proxy] Tab"); - crate::disk::state::XmrigProxy::show(&mut self.state.xmrig_proxy, &self.xmrig_proxy, &mut self.pool_vec, &self.xmrig_proxy_api, &mut self.xmrig_proxy_stdin, self.size, ui); - } - Tab::Xvb => { - debug!("App | Entering [XvB] Tab"); - crate::disk::state::Xvb::show(&mut self.state.xvb, self.size, &self.state.p2pool.address, ctx, ui, &self.xvb_api, &self.xmrig_api, &self.xmrig_proxy_api, states.is_alive(ProcessName::Xvb)); - } - } - }); + self.size.x = ui.available_width(); + self.size.y = ui.available_height(); + // This sets the Ui dimensions after Top/Bottom are filled + ui.style_mut().override_text_style = Some(TextStyle::Body); + match self.tab { + Tab::About => self.about_show(key, ui), + Tab::Status => { + debug!("App | Entering [Status] Tab"); + crate::disk::state::Status::show( + &mut self.state.status, + &self.pub_sys, + &self.node_api, + &self.p2pool_api, + &self.xmrig_api, + &self.xmrig_proxy_api, + &self.xvb_api, + &self.p2pool_img, + &self.xmrig_img, + states, + self.max_threads, + &self.gupax_p2pool_api, + &self.benchmarks, + self.size, + ctx, + ui, + ); + } + Tab::Gupax => { + debug!("App | Entering [Gupax] Tab"); + crate::disk::state::Gupax::show( + &mut self.state.gupax, + &self.og, + &self.state_path, + &self.update, + &self.file_window, + &mut self.error_state, + &self.restart, + self.size, + frame, + ctx, + ui, + &mut self.must_resize, + ); + } + Tab::Node => { + debug!("App | Entering [Node] Tab"); + crate::disk::state::Node::show( + &mut self.state.node, + &self.node, + &self.node_api, + &mut self.node_stdin, + self.size, + &self.file_window, + ui, + ); + } + Tab::P2pool => { + debug!("App | Entering [P2Pool] Tab"); + crate::disk::state::P2pool::show( + &mut self.state.p2pool, + &mut self.node_vec, + &self.og, + &self.ping, + &self.p2pool, + &self.p2pool_api, + &mut self.p2pool_stdin, + self.size, + ctx, + ui, + ); + } + Tab::Xmrig => { + debug!("App | Entering [XMRig] Tab"); + crate::disk::state::Xmrig::show( + &mut self.state.xmrig, + &mut self.pool_vec, + &self.xmrig, + &self.xmrig_api, + &mut self.xmrig_stdin, + self.size, + ctx, + ui, + ); + } + Tab::XmrigProxy => { + debug!("App | Entering [XMRig-Proxy] Tab"); + crate::disk::state::XmrigProxy::show( + &mut self.state.xmrig_proxy, + &self.xmrig_proxy, + &mut self.pool_vec, + &self.xmrig_proxy_api, + &mut self.xmrig_proxy_stdin, + self.size, + ui, + ); + } + Tab::Xvb => { + debug!("App | Entering [XvB] Tab"); + crate::disk::state::Xvb::show( + &mut self.state.xvb, + self.size, + &self.state.p2pool.address, + ctx, + ui, + &self.xvb_api, + &self.xmrig_api, + &self.xmrig_proxy_api, + states.is_alive(ProcessName::Xvb), + ); + } + } + }); } }