reminder_cli/
notification.rs1use crate::reminder::Reminder;
2use crate::storage::Storage;
3use anyhow::Result;
4use std::fs::OpenOptions;
5use std::io::Write;
6
7pub fn send_notification(reminder: &Reminder) -> Result<()> {
8 let result = notify_rust::Notification::new()
9 .summary(&reminder.title)
10 .body(reminder.description.as_deref().unwrap_or(""))
11 .appname("Reminder CLI")
12 .timeout(notify_rust::Timeout::Milliseconds(10000))
13 .show();
14
15 match result {
16 Ok(_) => Ok(()),
17 Err(e) => {
18 eprintln!("Failed to show notification: {}, falling back to log", e);
19 log_reminder(reminder)
20 }
21 }
22}
23
24fn log_reminder(reminder: &Reminder) -> Result<()> {
25 let log_path = Storage::log_file_path()?;
26 let mut file = OpenOptions::new()
27 .create(true)
28 .append(true)
29 .open(log_path)?;
30
31 let timestamp = chrono::Local::now().format("%Y-%m-%d %H:%M:%S");
32 let description = reminder.description.as_deref().unwrap_or("");
33
34 writeln!(
35 file,
36 "[{}] REMINDER: {} - {}",
37 timestamp, reminder.title, description
38 )?;
39
40 Ok(())
41}