rewrite most of the handler code :3

This commit is contained in:
2025-11-13 20:02:22 +04:00
parent 52d6137c05
commit 0f725073d8
13 changed files with 1585 additions and 281 deletions

63
src/handlers/fetch.rs Normal file
View File

@@ -0,0 +1,63 @@
use std::borrow::Cow;
use indicatif::ProgressBar;
use owo_colors::OwoColorize;
use crate::{action::Action, handlers::Handler, nix_path, pad_string};
pub struct FetchHandler {
id: u64,
bar: ProgressBar,
path: String,
source: String,
}
impl FetchHandler {
pub fn new<'a>(
id: u64,
width: u16,
path: Cow<'a, str>,
source: Cow<'a, str>,
bar: ProgressBar,
) -> Self {
bar.enable_steady_tick(std::time::Duration::from_millis(100));
let new = Self {
id,
bar,
path: path.to_string(),
source: source.to_string(),
};
new.format(width);
new
}
fn format(&self, width: u16) {
let name = nix_path::extract_package_name_string(&self.path)
.expect("Failed to extract package name");
let chunk = (width - 15) / 2;
let name = pad_string(&name, chunk as usize);
let source = pad_string(&self.source, chunk as usize);
let name = format!("Querying {}", name.green().bold());
self.bar
.set_message(format!("{} on {}", name, source.yellow()));
}
}
impl Handler for FetchHandler {
fn handle(
&mut self,
_state: &mut crate::state::State,
action: &crate::action::Action,
) -> color_eyre::Result<bool> {
match action {
&Action::Stop { id, .. } if *id == self.id => {
self.bar.finish_and_clear();
Ok(false)
}
_ => Ok(true),
}
}
fn on_resize(&mut self, state: &mut crate::state::State) -> color_eyre::Result<()> {
self.format(state.term_width);
Ok(())
}
}