diff options
Diffstat (limited to 'src/progress.rs')
| -rw-r--r-- | src/progress.rs | 38 |
1 files changed, 37 insertions, 1 deletions
diff --git a/src/progress.rs b/src/progress.rs index a5509ef..169dca5 100644 --- a/src/progress.rs +++ b/src/progress.rs @@ -137,6 +137,42 @@ pub fn complete(name: &str) { update_progress(name, 1.); } +/// Increase +/// +/// Increase a progress item's value by a specified amount (clamped to 1.0) +pub fn increase(name: &str, amount: f32) { + let Some(center) = PROGRESS_CENTER.get() else { + return; + }; + let mut state = center.tx.borrow().clone(); + let entry = state + .entry(name.to_string()) + .or_insert_with(|| ProgressState { + progress: 0.0, + info: ProgressInfo::default(), + }); + entry.progress = (entry.progress + amount).clamp(0.0, 1.0); + let _ = center.tx.send(state); +} + +/// Reduce +/// +/// Reduce a progress item's value by a specified amount (clamped to 0.0) +pub fn reduce(name: &str, amount: f32) { + let Some(center) = PROGRESS_CENTER.get() else { + return; + }; + let mut state = center.tx.borrow().clone(); + let entry = state + .entry(name.to_string()) + .or_insert_with(|| ProgressState { + progress: 0.0, + info: ProgressInfo::default(), + }); + entry.progress = (entry.progress - amount).clamp(0.0, 1.0); + let _ = center.tx.send(state); +} + /// Clear all /// /// Send a message to clear all items, ensuring no progress remains @@ -177,7 +213,7 @@ pub fn update_progress(name: &str, progress: f32) { progress: 0.0, info: ProgressInfo::default(), }); - entry.progress = progress; + entry.progress = progress.clamp(0.0, 1.0); let _ = center.tx.send(state); } |
