2024-03-03 07:31:22 +00:00
|
|
|
use crate::components::update::Update;
|
|
|
|
use crate::helper::{Helper, ProcessSignal};
|
2024-03-21 11:27:52 +00:00
|
|
|
use crate::utils::constants::{
|
|
|
|
APP_MAX_HEIGHT, APP_MAX_WIDTH, APP_MIN_HEIGHT, APP_MIN_WIDTH, BYTES_ICON,
|
|
|
|
};
|
2024-03-03 07:31:22 +00:00
|
|
|
use crate::utils::regex::Regexes;
|
2024-03-21 11:27:52 +00:00
|
|
|
use std::io::Write;
|
2024-03-03 07:31:22 +00:00
|
|
|
//---------------------------------------------------------------------------------------------------- Init functions
|
|
|
|
use crate::app::App;
|
2024-03-21 11:27:52 +00:00
|
|
|
use crate::{components::node::Ping, miscs::clamp_scale};
|
|
|
|
use crate::{disk::state::*, utils::macros::lock};
|
|
|
|
use crate::{info, warn};
|
2024-03-03 07:31:22 +00:00
|
|
|
use eframe::NativeOptions;
|
2024-03-21 11:27:52 +00:00
|
|
|
use egui::TextStyle::Small;
|
|
|
|
use egui::TextStyle::{Body, Button, Heading, Monospace, Name};
|
|
|
|
use egui::*;
|
2024-03-03 07:31:22 +00:00
|
|
|
use env_logger::fmt::style::Style;
|
|
|
|
use env_logger::{Builder, WriteStyle};
|
|
|
|
use log::LevelFilter;
|
2024-03-21 11:27:52 +00:00
|
|
|
use std::sync::Arc;
|
|
|
|
use std::time::Instant;
|
2024-03-03 07:31:22 +00:00
|
|
|
|
|
|
|
#[cold]
|
|
|
|
#[inline(never)]
|
|
|
|
pub fn init_text_styles(ctx: &egui::Context, width: f32, pixels_per_point: f32) {
|
|
|
|
let scale = width / 35.5;
|
|
|
|
let mut style = (*ctx.style()).clone();
|
|
|
|
style.text_styles = [
|
|
|
|
(Small, FontId::new(scale / 3.0, egui::FontFamily::Monospace)),
|
|
|
|
(Body, FontId::new(scale / 2.0, egui::FontFamily::Monospace)),
|
|
|
|
(
|
|
|
|
Button,
|
|
|
|
FontId::new(scale / 2.0, egui::FontFamily::Monospace),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
Monospace,
|
|
|
|
FontId::new(scale / 2.0, egui::FontFamily::Monospace),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
Heading,
|
|
|
|
FontId::new(scale / 1.5, egui::FontFamily::Monospace),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
Name("Tab".into()),
|
|
|
|
FontId::new(scale * 1.2, egui::FontFamily::Monospace),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
Name("Bottom".into()),
|
|
|
|
FontId::new(scale / 2.0, egui::FontFamily::Monospace),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
Name("MonospaceSmall".into()),
|
|
|
|
FontId::new(scale / 2.5, egui::FontFamily::Monospace),
|
|
|
|
),
|
|
|
|
(
|
|
|
|
Name("MonospaceLarge".into()),
|
|
|
|
FontId::new(scale / 1.5, egui::FontFamily::Monospace),
|
|
|
|
),
|
|
|
|
]
|
|
|
|
.into();
|
|
|
|
style.spacing.icon_width_inner = width / 35.0;
|
|
|
|
style.spacing.icon_width = width / 25.0;
|
|
|
|
style.spacing.icon_spacing = 20.0;
|
|
|
|
style.spacing.scroll = egui::style::ScrollStyle {
|
|
|
|
bar_width: width / 150.0,
|
|
|
|
..egui::style::ScrollStyle::solid()
|
|
|
|
};
|
|
|
|
ctx.set_style(style);
|
|
|
|
// Make sure scale f32 is a regular number.
|
|
|
|
let pixels_per_point = clamp_scale(pixels_per_point);
|
|
|
|
ctx.set_pixels_per_point(pixels_per_point);
|
|
|
|
ctx.request_repaint();
|
|
|
|
}
|
|
|
|
|
|
|
|
#[cold]
|
|
|
|
#[inline(never)]
|
|
|
|
pub fn init_logger(now: Instant) {
|
|
|
|
let filter_env = std::env::var("RUST_LOG").unwrap_or_else(|_| "INFO".to_string());
|
|
|
|
let filter = match filter_env.as_str() {
|
|
|
|
"error" | "Error" | "ERROR" => LevelFilter::Error,
|
|
|
|
"warn" | "Warn" | "WARN" => LevelFilter::Warn,
|
|
|
|
"debug" | "Debug" | "DEBUG" => LevelFilter::Debug,
|
|
|
|
"trace" | "Trace" | "TRACE" => LevelFilter::Trace,
|
|
|
|
_ => LevelFilter::Info,
|
|
|
|
};
|
|
|
|
std::env::set_var("RUST_LOG", format!("off,gupax={}", filter_env));
|
|
|
|
|
|
|
|
Builder::new()
|
|
|
|
.format(move |buf, record| {
|
|
|
|
let level = record.level();
|
|
|
|
let level_style = buf.default_level_style(level);
|
2024-03-21 11:27:52 +00:00
|
|
|
let dimmed = Style::new().dimmed();
|
2024-03-03 07:31:22 +00:00
|
|
|
writeln!(
|
|
|
|
buf,
|
|
|
|
"{level_style}[{}]{level_style:#} [{dimmed}{:.3}{dimmed:#}] [{dimmed}{}{dimmed:#}:{dimmed}{}{dimmed:#}] {}",
|
|
|
|
level,
|
|
|
|
now.elapsed().as_secs_f32(),
|
|
|
|
record.file().unwrap_or("???"),
|
|
|
|
record.line().unwrap_or(0),
|
|
|
|
record.args(),
|
|
|
|
)
|
|
|
|
})
|
|
|
|
.filter_level(filter)
|
|
|
|
.write_style(WriteStyle::Always)
|
|
|
|
.parse_default_env()
|
|
|
|
.format_timestamp_millis()
|
|
|
|
.init();
|
|
|
|
info!("init_logger() ... OK");
|
|
|
|
info!("Log level ... {}", filter);
|
|
|
|
}
|
|
|
|
|
|
|
|
#[cold]
|
|
|
|
#[inline(never)]
|
|
|
|
pub fn init_options(initial_window_size: Option<Vec2>) -> NativeOptions {
|
|
|
|
let mut options = eframe::NativeOptions::default();
|
|
|
|
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();
|
|
|
|
let (icon_width, icon_height) = icon.dimensions();
|
|
|
|
options.viewport.icon = Some(Arc::new(egui::viewport::IconData {
|
|
|
|
rgba: icon.into_raw(),
|
|
|
|
width: icon_width,
|
|
|
|
height: icon_height,
|
|
|
|
}));
|
|
|
|
info!("init_options() ... OK");
|
|
|
|
options
|
|
|
|
}
|
|
|
|
|
|
|
|
#[cold]
|
|
|
|
#[inline(never)]
|
|
|
|
pub fn init_auto(app: &mut App) {
|
|
|
|
// Return early if [--no-startup] was not passed
|
|
|
|
if app.no_startup {
|
|
|
|
info!("[--no-startup] flag passed, skipping init_auto()...");
|
|
|
|
return;
|
|
|
|
} else if app.error_state.error {
|
|
|
|
info!("App error detected, skipping init_auto()...");
|
|
|
|
return;
|
|
|
|
} else {
|
|
|
|
info!("Starting init_auto()...");
|
|
|
|
}
|
|
|
|
|
|
|
|
// [Auto-Update]
|
|
|
|
#[cfg(not(feature = "distro"))]
|
|
|
|
if app.state.gupax.auto_update {
|
|
|
|
Update::spawn_thread(
|
|
|
|
&app.og,
|
|
|
|
&app.state.gupax,
|
|
|
|
&app.state_path,
|
|
|
|
&app.update,
|
|
|
|
&mut app.error_state,
|
|
|
|
&app.restart,
|
|
|
|
);
|
|
|
|
} else {
|
|
|
|
info!("Skipping auto-update...");
|
|
|
|
}
|
|
|
|
|
|
|
|
// [Auto-Ping]
|
|
|
|
if app.state.p2pool.auto_ping && app.state.p2pool.simple {
|
|
|
|
Ping::spawn_thread(&app.ping)
|
|
|
|
} else {
|
|
|
|
info!("Skipping auto-ping...");
|
|
|
|
}
|
|
|
|
|
|
|
|
// [Auto-P2Pool]
|
|
|
|
if app.state.gupax.auto_p2pool {
|
|
|
|
if !Regexes::addr_ok(&app.state.p2pool.address) {
|
2024-03-23 16:45:15 +00:00
|
|
|
warn!("Gupaxx | P2Pool address is not valid! Skipping auto-p2pool...");
|
2024-03-03 07:31:22 +00:00
|
|
|
} else if !Gupax::path_is_file(&app.state.gupax.p2pool_path) {
|
2024-03-23 16:45:15 +00:00
|
|
|
warn!("Gupaxx | P2Pool path is not a file! Skipping auto-p2pool...");
|
2024-03-03 07:31:22 +00:00
|
|
|
} else if !crate::components::update::check_p2pool_path(&app.state.gupax.p2pool_path) {
|
2024-03-23 16:45:15 +00:00
|
|
|
warn!("Gupaxx | P2Pool path is not valid! Skipping auto-p2pool...");
|
2024-03-03 07:31:22 +00:00
|
|
|
} else {
|
|
|
|
let backup_hosts = app.gather_backup_hosts();
|
|
|
|
Helper::start_p2pool(
|
|
|
|
&app.helper,
|
|
|
|
&app.state.p2pool,
|
|
|
|
&app.state.gupax.absolute_p2pool_path,
|
|
|
|
backup_hosts,
|
|
|
|
);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
info!("Skipping auto-p2pool...");
|
|
|
|
}
|
|
|
|
|
|
|
|
// [Auto-XMRig]
|
|
|
|
if app.state.gupax.auto_xmrig {
|
|
|
|
if !Gupax::path_is_file(&app.state.gupax.xmrig_path) {
|
2024-03-23 16:45:15 +00:00
|
|
|
warn!("Gupaxx | XMRig path is not an executable! Skipping auto-xmrig...");
|
2024-03-03 07:31:22 +00:00
|
|
|
} else if !crate::components::update::check_xmrig_path(&app.state.gupax.xmrig_path) {
|
2024-03-23 16:45:15 +00:00
|
|
|
warn!("Gupaxx | XMRig path is not valid! Skipping auto-xmrig...");
|
2024-03-03 07:31:22 +00:00
|
|
|
} else if cfg!(windows) {
|
|
|
|
Helper::start_xmrig(
|
|
|
|
&app.helper,
|
|
|
|
&app.state.xmrig,
|
|
|
|
&app.state.gupax.absolute_xmrig_path,
|
|
|
|
Arc::clone(&app.sudo),
|
|
|
|
);
|
|
|
|
} else {
|
|
|
|
lock!(app.sudo).signal = ProcessSignal::Start;
|
|
|
|
app.error_state.ask_sudo(&app.sudo);
|
|
|
|
}
|
|
|
|
} else {
|
|
|
|
info!("Skipping auto-xmrig...");
|
|
|
|
}
|
2024-03-12 11:25:34 +00:00
|
|
|
// [Auto-XvB]
|
|
|
|
if app.state.gupax.auto_xvb {
|
2024-03-21 11:27:52 +00:00
|
|
|
Helper::start_xvb(
|
|
|
|
&app.helper,
|
|
|
|
&app.state.xvb,
|
|
|
|
&app.state.p2pool,
|
|
|
|
&app.state.xmrig,
|
|
|
|
);
|
2024-03-12 11:25:34 +00:00
|
|
|
} else {
|
|
|
|
info!("Skipping auto-xvb...");
|
|
|
|
}
|
2024-03-03 07:31:22 +00:00
|
|
|
}
|