use crate::cli::{
args::NeoArgs,
commands::{SwitchMode, matrix_mode, parse_interval, select_random_dictionary},
global::GlobalArgs,
};
use base_d::DictionaryRegistry;
pub fn handle(
args: NeoArgs,
global: &GlobalArgs,
config: &DictionaryRegistry,
) -> Result<(), Box<dyn std::error::Error>> {
let initial_dictionary = if let Some(dict_name) = &args.dictionary {
dict_name.clone()
} else if args.dejavu {
select_random_dictionary(config, !global.quiet)?
} else {
"base256_matrix".to_string()
};
let switch_mode = if args.cycle {
if let Some(interval_str) = &args.interval {
let interval = parse_interval(interval_str)?;
SwitchMode::Cycle(interval)
} else {
SwitchMode::Cycle(crate::cli::commands::SwitchInterval::PerLine)
}
} else if args.random {
if let Some(interval_str) = &args.interval {
let interval = parse_interval(interval_str)?;
SwitchMode::Random(interval)
} else {
SwitchMode::Random(crate::cli::commands::SwitchInterval::PerLine)
}
} else {
SwitchMode::Static
};
matrix_mode(
config,
&initial_dictionary,
switch_mode,
global.no_color,
global.quiet,
args.superman,
)
}