diff --git a/src/app/panels/middle/xvb.rs b/src/app/panels/middle/xvb.rs index 3339c7a..3c2fd5e 100644 --- a/src/app/panels/middle/xvb.rs +++ b/src/app/panels/middle/xvb.rs @@ -177,7 +177,6 @@ impl crate::disk::state::Xvb { } if self.mode == XvbMode::ManualDonationLevel { - ui.radio_value(&mut self.manual_donation_level, ManualDonationLevel::VIP, "VIP"); ui.radio_value(&mut self.manual_donation_level, ManualDonationLevel::Donor, "Donor"); ui.radio_value(&mut self.manual_donation_level, ManualDonationLevel::DonorVIP, "DonorVIP"); ui.radio_value(&mut self.manual_donation_level, ManualDonationLevel::DonorWhale, "DonorWhale"); diff --git a/src/disk/state.rs b/src/disk/state.rs index 5cf6121..7b174f3 100644 --- a/src/disk/state.rs +++ b/src/disk/state.rs @@ -255,7 +255,6 @@ pub enum XvbMode { #[derive(Clone, Eq, PartialEq, Debug, Deserialize, Serialize)] pub enum ManualDonationLevel { - VIP, Donor, DonorVIP, DonorWhale, @@ -407,6 +406,6 @@ impl Default for XvbMode { impl Default for ManualDonationLevel { fn default() -> Self { - Self::VIP + Self::Donor } } \ No newline at end of file diff --git a/src/helper/xvb/algorithm.rs b/src/helper/xvb/algorithm.rs index 52db839..cf36bac 100644 --- a/src/helper/xvb/algorithm.rs +++ b/src/helper/xvb/algorithm.rs @@ -20,7 +20,7 @@ use crate::{ XVB_ROUND_DONOR_WHALE_MIN_HR, XVB_TIME_ALGO, }; -use super::{PubXvbApi, SamplesAverageHour}; +use super::{priv_stats::RuntimeDonationLevel, PubXvbApi, SamplesAverageHour}; pub(crate) fn calcul_donated_time( lhr: f32, @@ -63,17 +63,18 @@ pub(crate) fn calcul_donated_time( output_console(gui_api_xvb, &msg_lhr); output_console(gui_api_xvb, &msg_mhr); output_console(gui_api_xvb, &msg_ehr); - // calculate how much time can be spared + let xvb_chr = lock!(gui_api_xvb).stats_priv.donor_1hr_avg * 1000.0; + info!("current HR on XvB (last hour): {xvb_chr}"); + let shr = calc_last_hour_avg_hash_rate(&lock!(gui_api_xvb).xvb_sent_last_hour_samples); + + // calculate how much time can be spared let mode = lock!(gui_api_xvb).stats_priv.runtime_mode.clone(); let default_spared_time = time_that_could_be_spared(lhr, min_hr); let spared_time = match mode { RuntimeMode::Auto => { info!("RuntimeMode::Auto - calculating spared_time"); - let xvb_chr = lock!(gui_api_xvb).stats_priv.donor_1hr_avg * 1000.0; - info!("current HR on XvB (last hour): {xvb_chr}"); - let shr = calc_last_hour_avg_hash_rate(&lock!(gui_api_xvb).xvb_sent_last_hour_samples); // calculate how much time needed to be spared to be in most round type minimum HR + buffer minimum_time_for_highest_accessible_round(default_spared_time, lhr, xvb_chr, shr) }, @@ -95,7 +96,9 @@ pub(crate) fn calcul_donated_time( XVB_TIME_ALGO - (XVB_TIME_ALGO * (keep_hr as u32) / (lhr as u32)) }, RuntimeMode::ManualDonationLevel => { - todo!() + let donation_level = lock!(gui_api_xvb).stats_priv.runtime_manual_donation_level.clone(); + + minimum_time_for_manual_round(donation_level, default_spared_time, lhr, xvb_chr, shr) } }; @@ -198,6 +201,35 @@ fn minimum_time_for_highest_accessible_round(st: u32, lhr: f32, chr: f32, shr: f (((hr_for_xvb - (hr_for_xvb - min)) / lhr) * XVB_TIME_ALGO as f32).ceil() as u32 } + +fn minimum_time_for_manual_round(level: RuntimeDonationLevel, st: u32, lhr: f32, chr: f32, shr: f32) -> u32 { + let hr_for_xvb = ((st - 1) as f32 / XVB_TIME_ALGO as f32) * lhr; + info!( + "hr for xvb is: ({st} / {}) * {lhr} = {hr_for_xvb}H/s", + XVB_TIME_ALGO + ); + let ohr = chr - shr; + + let min = match level { + RuntimeDonationLevel::Donor => { + XVB_ROUND_DONOR_MIN_HR as f32 - ohr + }, + RuntimeDonationLevel::DonorVIP => { + XVB_ROUND_DONOR_VIP_MIN_HR as f32 - ohr + }, + RuntimeDonationLevel::DonorWhale => { + XVB_ROUND_DONOR_WHALE_MIN_HR as f32 - ohr + }, + RuntimeDonationLevel::DonorMega => { + XVB_ROUND_DONOR_MEGA_MIN_HR as f32 - ohr + } + }; + + + + (((hr_for_xvb - (hr_for_xvb - min)) / lhr) * XVB_TIME_ALGO as f32).ceil() as u32 +} + #[allow(clippy::too_many_arguments)] async fn sleep_then_update_node_xmrig( spared_time: u32, diff --git a/src/helper/xvb/priv_stats.rs b/src/helper/xvb/priv_stats.rs index 4496a4e..7b353cd 100644 --- a/src/helper/xvb/priv_stats.rs +++ b/src/helper/xvb/priv_stats.rs @@ -29,7 +29,6 @@ pub enum RuntimeMode { #[derive(Debug, Clone, Deserialize, PartialEq, Eq)] pub enum RuntimeDonationLevel { - VIP, Donor, DonorVIP, DonorWhale, @@ -145,7 +144,6 @@ impl From for RuntimeMode { impl From for RuntimeDonationLevel { fn from(level: ManualDonationLevel) -> Self { match level { - ManualDonationLevel::VIP => RuntimeDonationLevel::VIP, ManualDonationLevel::Donor => RuntimeDonationLevel::Donor, ManualDonationLevel::DonorVIP => RuntimeDonationLevel::DonorVIP, ManualDonationLevel::DonorWhale => RuntimeDonationLevel::DonorWhale, @@ -162,6 +160,6 @@ impl Default for RuntimeMode { impl Default for RuntimeDonationLevel { fn default() -> Self { - Self::VIP + Self::Donor } } \ No newline at end of file