use super::*;
fn delete_question(name: &str) -> String {
format!("Delete {name}? An adopted dog with no receipt keeps its file.")
}
impl App {
pub(crate) fn start_install(&mut self, adopt_as: &str) -> Effect {
self.start_job(Job::Install {
adopt_as: adopt_as.to_owned(),
})
}
pub(crate) fn start_upgrade(&mut self, name: &str) -> Effect {
self.start_job(Job::Upgrade {
name: name.to_owned(),
})
}
pub(crate) fn ask_delete(&mut self, name: &str) -> Effect {
let tag = self.mint_tag();
self.dog_delete = Some((tag, name.to_owned()));
self.open_modal(Modal::confirm(tag, delete_question(name)));
Effect::None
}
pub(crate) fn can_install(&self, row: &CatalogueRow) -> bool {
matches!(row.state, DogState::NotInstalled | DogState::Adopted)
&& row.dog.is_installable()
&& WriteAuthority::granted(self).is_some()
}
pub(crate) fn can_upgrade(&self, row: &CatalogueRow) -> bool {
matches!(row.state, DogState::Installed | DogState::Enabled)
&& row.is_behind()
&& WriteAuthority::granted(self).is_some()
}
pub(crate) fn can_delete(&self, row: &CatalogueRow) -> bool {
row.state != DogState::NotInstalled
&& !crate::dog::BUILT_IN_DOGS.contains(&row.dog.adopt_as.as_str())
&& WriteAuthority::granted(self).is_some()
}
pub(super) fn on_delete_answer(&mut self, tag: u64, yes: bool) -> Option<Effect> {
let (asked, name) = self.dog_delete.take()?;
if asked != tag {
self.dog_delete = Some((asked, name));
return None;
}
Some(if yes {
self.start_job(Job::Delete { name })
} else {
Effect::None
})
}
}