aboutsummaryrefslogtreecommitdiff
path: root/src/app
diff options
context:
space:
mode:
authorOgulcan Celik <ogulcancelik@gmail.com>2026-05-15 01:37:57 +0300
committerOgulcan Celik <ogulcancelik@gmail.com>2026-05-15 01:37:57 +0300
commitbfe2f84f4fc8f37517eaadfa3274eb0ff79b47ab (patch)
treeb97f7700b5e13627d273a83e41eb7f3366b65039 /src/app
parent80d70642b7a86d1d9473ed55586412e0345d015e (diff)
feat: add system toast delivery
Diffstat (limited to 'src/app')
-rw-r--r--src/app/api.rs12
-rw-r--r--src/app/config_io.rs1
-rw-r--r--src/app/input/settings.rs8
3 files changed, 15 insertions, 6 deletions
diff --git a/src/app/api.rs b/src/app/api.rs
index 46429ffe..1fb11118 100644
--- a/src/app/api.rs
+++ b/src/app/api.rs
@@ -84,11 +84,17 @@ impl App {
if self.local_terminal_notifications
&& matches!(
self.state.toast_config.delivery,
- crate::config::ToastDelivery::Terminal
+ crate::config::ToastDelivery::Terminal | crate::config::ToastDelivery::System
)
{
+ let notify = match self.state.toast_config.delivery {
+ crate::config::ToastDelivery::Terminal => crate::terminal_notify::show_notification,
+ crate::config::ToastDelivery::System => crate::platform::show_desktop_notification,
+ _ => unreachable!("toast delivery was checked above"),
+ };
+
if let Some(version) = update_ready_version {
- let _ = crate::terminal_notify::show_notification(
+ let _ = notify(
&format!("v{version} available"),
Some("detach, then run `herdr update`"),
);
@@ -127,7 +133,7 @@ impl App {
ToastKind::Finished => "finished",
ToastKind::UpdateInstalled => "updated",
};
- let _ = crate::terminal_notify::show_notification(
+ let _ = notify(
&format!("{} {}", agent_label, event_text),
Some(&crate::app::actions::notification_context(
ws,
diff --git a/src/app/config_io.rs b/src/app/config_io.rs
index 0bf04831..36f44b9a 100644
--- a/src/app/config_io.rs
+++ b/src/app/config_io.rs
@@ -62,6 +62,7 @@ impl App {
crate::config::ToastDelivery::Off => "\"off\"",
crate::config::ToastDelivery::Herdr => "\"herdr\"",
crate::config::ToastDelivery::Terminal => "\"terminal\"",
+ crate::config::ToastDelivery::System => "\"system\"",
};
if self.update_config_file("toast setting", |content| {
let content =
diff --git a/src/app/input/settings.rs b/src/app/input/settings.rs
index 9e89e515..79fdf5d8 100644
--- a/src/app/input/settings.rs
+++ b/src/app/input/settings.rs
@@ -51,6 +51,7 @@ fn toast_delivery_index(delivery: ToastDelivery) -> usize {
ToastDelivery::Off => 0,
ToastDelivery::Herdr => 1,
ToastDelivery::Terminal => 2,
+ ToastDelivery::System => 3,
}
}
@@ -58,7 +59,8 @@ fn toast_delivery_for_index(idx: usize) -> ToastDelivery {
match idx {
0 => ToastDelivery::Off,
1 => ToastDelivery::Herdr,
- _ => ToastDelivery::Terminal,
+ 2 => ToastDelivery::Terminal,
+ _ => ToastDelivery::System,
}
}
@@ -151,7 +153,7 @@ pub(super) fn update_settings_state(state: &mut AppState, key: KeyEvent) -> Opti
},
SettingsSection::Toast => match key.code {
KeyCode::Up | KeyCode::Char('k') => state.settings.list.move_prev(),
- KeyCode::Down | KeyCode::Char('j') => state.settings.list.move_next(3),
+ KeyCode::Down | KeyCode::Char('j') => state.settings.list.move_next(4),
KeyCode::Enter | KeyCode::Char(' ') => {
let delivery = toast_delivery_for_index(state.settings.list.selected);
return Some(SettingsAction::SaveToastDelivery(delivery));
@@ -274,7 +276,7 @@ impl AppState {
}
SettingsSection::Toast => {
let list_y = area.y + 3;
- if row >= list_y && row < list_y + 6 {
+ if row >= list_y && row < list_y + 8 {
Some(((row - list_y) / 2) as usize)
} else {
None