use super::{App, Toast, root_cause};
impl App {
pub(super) fn run_theme_command(&mut self, _rest: &str) {
let themes = crate::theme::available();
if themes.is_empty() {
self.push_toast(Toast::error("no themes available"));
return;
}
self.theme_origin = Some(crate::theme::active_name());
let current = crate::theme::active_name();
self.prompt.open_theme_picker(themes, ¤t);
}
pub(super) fn preview_theme(&mut self, name: &str) {
match crate::theme::load_by_name(name) {
Ok(theme) => crate::theme::set_active(theme),
Err(e) => self.push_toast(Toast::error(format!("theme {name}: {}", root_cause(&e)))),
}
}
pub(super) fn commit_theme(&mut self, name: &str) {
self.theme_origin = None;
self.preview_theme(name);
match crate::config::persist_theme(name) {
Ok(path) => {
self.config.theme = name.to_string();
self.push_toast(Toast::info(format!(
"theme set to {name} ({})",
path.display()
)));
}
Err(e) => self.push_toast(Toast::error(format!(
"theme {name} applied but not saved: {}",
root_cause(&e)
))),
}
}
pub(super) fn revert_theme(&mut self) {
if let Some(origin) = self.theme_origin.take() {
match crate::theme::load_by_name(&origin) {
Ok(theme) => crate::theme::set_active(theme),
Err(e) => self.push_toast(Toast::error(format!(
"restoring theme {origin}: {}",
root_cause(&e)
))),
}
}
}
}