use async_channel::{Receiver, Sender}; use chrono::NaiveDate; use rusqlite::Connection; use std::rc::Rc; use crate::{ app::{calendar, form, utils, App}, model::event::Event, }; pub fn send(tx: Sender, msg: Msg) { utils::spawn(async move { let _ = tx.send(msg).await; }) } pub enum Msg { ShowAddForm { date: NaiveDate }, AddEvent { event: Event }, } pub async fn event_handler(conn: Rc, rx: Receiver, tx: Sender, mut app: App) { while let Ok(msg) = rx.recv().await { match msg { Msg::ShowAddForm { date } => { form::show(Rc::clone(&conn), tx.clone(), Rc::clone(&app.window), date).await; } Msg::AddEvent { event } => { let date = event.date.clone(); app.events.push(event); calendar::refresh_date(&app, date); } } } }