mod common;
mod doas_persist_setup;
mod foreign_overlap;
mod handlers;
mod import;
mod install;
mod optional_deps;
mod password;
mod repositories;
pub use repositories::repositories_modal_wheel_step;
mod restore;
mod scan;
mod sudo_timestamp_setup;
mod system_update;
#[cfg(test)]
mod tests;
use crossterm::event::KeyEvent;
use tokio::sync::mpsc;
use crate::state::{AppState, Modal, PackageItem};
pub(super) fn handle_modal_key(
ke: KeyEvent,
app: &mut AppState,
add_tx: &mpsc::UnboundedSender<PackageItem>,
) -> bool {
let modal = std::mem::take(&mut app.modal);
match modal {
Modal::Alert { .. } => handlers::handle_alert_modal(ke, app, &modal),
Modal::PreflightExec { .. } => handlers::handle_preflight_exec_modal(ke, app, modal),
Modal::PostSummary { .. } => handlers::handle_post_summary_modal(ke, app, &modal),
Modal::SystemUpdate { .. } => handlers::handle_system_update_modal(ke, app, modal),
Modal::ConfirmInstall { .. } => handlers::handle_confirm_install_modal(ke, app, &modal),
Modal::ConfirmRemove { .. } => handlers::handle_confirm_remove_modal(ke, app, &modal),
Modal::ConfirmReinstall { .. } => handlers::handle_confirm_reinstall_modal(ke, app, &modal),
Modal::ConfirmBatchUpdate { .. } => {
handlers::handle_confirm_batch_update_modal(ke, app, &modal)
}
Modal::ConfirmAurUpdate { .. } => {
handlers::handle_confirm_aur_update_modal(ke, app, &modal)
}
Modal::ConfirmAurVote { .. } => handlers::handle_confirm_aur_vote_modal(ke, app, &modal),
Modal::WarnAurRepoDuplicate { .. } => {
handlers::handle_warn_aur_repo_duplicate_modal(ke, app, &modal)
}
Modal::ForeignRepoOverlap { .. } => {
handlers::handle_foreign_repo_overlap_modal(ke, app, &modal)
}
Modal::Help => handlers::handle_help_modal(ke, app, modal),
Modal::News { .. } => handlers::handle_news_modal(ke, app, modal),
Modal::Announcement { .. } => handlers::handle_announcement_modal(ke, app, modal),
Modal::Updates { .. } => handlers::handle_updates_modal(ke, app, modal),
Modal::OptionalDeps { .. } => handlers::handle_optional_deps_modal(ke, app, modal),
Modal::Repositories { .. } => handlers::handle_repositories_modal(ke, app, modal),
Modal::SshAurSetup { .. } => handlers::handle_ssh_setup_modal(ke, app, modal),
Modal::ScanConfig { .. } => handlers::handle_scan_config_modal(ke, app, modal),
Modal::VirusTotalSetup { .. } => handlers::handle_virustotal_setup_modal(ke, app, modal),
Modal::SudoTimestampSetup { .. } => {
handlers::handle_sudo_timestamp_setup_modal(ke, app, modal)
}
Modal::DoasPersistSetup { .. } => handlers::handle_doas_persist_setup_modal(ke, app, modal),
Modal::NewsSetup { .. } => handlers::handle_news_setup_modal(ke, app, modal),
Modal::StartupSetupSelector { .. } => {
handlers::handle_startup_setup_selector_modal(ke, app, modal)
}
Modal::PasswordPrompt { .. } => handlers::handle_password_prompt_modal(ke, app, modal),
Modal::GnomeTerminalPrompt => handlers::handle_gnome_terminal_prompt_modal(ke, app, modal),
Modal::ImportHelp => handlers::handle_import_help_modal(ke, app, add_tx, modal),
Modal::None => false,
Modal::Loading { .. } => {
app.modal = modal;
true }
Modal::Preflight { .. } => {
app.modal = modal;
false
}
}
}
#[cfg(test)]
pub fn handle_modal_key_test(
ke: KeyEvent,
app: &mut AppState,
add_tx: &mpsc::UnboundedSender<PackageItem>,
) -> bool {
handle_modal_key(ke, app, add_tx)
}