From 8d4cc05be0c696db2aabca7e9995e59019a01469 Mon Sep 17 00:00:00 2001 From: Ogulcan Celik Date: Sun, 17 May 2026 00:17:34 +0300 Subject: feat: add homebrew update handling refs #127 --- src/app/actions.rs | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) (limited to 'src/app/actions.rs') diff --git a/src/app/actions.rs b/src/app/actions.rs index 870044a8..be8e1018 100644 --- a/src/app/actions.rs +++ b/src/app/actions.rs @@ -652,8 +652,12 @@ impl AppState { self.handle_pane_died(pane_id); Vec::new() } - AppEvent::UpdateReady { version } => { + AppEvent::UpdateReady { + version, + install_command, + } => { self.update_available = Some(version.clone()); + self.update_install_command = install_command.clone(); self.latest_release_notes_available = true; self.update_dismissed = true; if matches!( @@ -663,7 +667,7 @@ impl AppState { self.toast = Some(ToastNotification { kind: ToastKind::UpdateInstalled, title: format!("v{version} available"), - context: "detach, then run `herdr update`".to_string(), + context: format!("detach, then run `{install_command}`"), target: None, }); } @@ -953,6 +957,7 @@ mod tests { let updates = state.handle_app_event(crate::events::AppEvent::UpdateReady { version: "0.5.0".into(), + install_command: "herdr update".into(), }); assert!(updates.is_empty()); @@ -1500,6 +1505,7 @@ mod tests { let updates = state.handle_app_event(AppEvent::UpdateReady { version: "0.5.0".into(), + install_command: "herdr update".into(), }); assert!(updates.is_empty()); @@ -1512,6 +1518,27 @@ mod tests { assert_eq!(toast.context, "detach, then run `herdr update`"); } + #[test] + fn update_ready_uses_event_install_command_in_toast() { + let mut state = AppState::test_new(); + state.toast_config.delivery = crate::config::ToastDelivery::Herdr; + + state.handle_app_event(AppEvent::UpdateReady { + version: "0.5.0".into(), + install_command: "brew update && brew upgrade herdr".into(), + }); + + assert_eq!( + state.update_install_command, + "brew update && brew upgrade herdr" + ); + let toast = state.toast.as_ref().expect("update toast"); + assert_eq!( + toast.context, + "detach, then run `brew update && brew upgrade herdr`" + ); + } + #[test] fn toggle_fullscreen_works() { let mut state = app_with_workspaces(&["test"]); -- cgit v1.2.3