From d0a9063631e71928484a698f6c585ebb3915e8a2 Mon Sep 17 00:00:00 2001 From: Joris Date: Sun, 9 Jan 2022 14:37:35 +0100 Subject: Allow to update events --- src/app/update.rs | 35 ++++++++++++++++++++++++++--------- 1 file changed, 26 insertions(+), 9 deletions(-) (limited to 'src/app/update.rs') diff --git a/src/app/update.rs b/src/app/update.rs index e7bf7af..f1576b5 100644 --- a/src/app/update.rs +++ b/src/app/update.rs @@ -1,11 +1,9 @@ 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, + model::{event, event::Event}, }; pub fn send(tx: Sender, msg: Msg) { @@ -16,20 +14,39 @@ pub fn send(tx: Sender, msg: Msg) { pub enum Msg { ShowAddForm { date: NaiveDate }, - AddEvent { event: Event }, + ShowUpdateForm { event: Event }, + AddEvent { new: Event }, + UpdateEvent { old: Event, new: Event }, } -pub async fn event_handler(conn: Rc, rx: Receiver, tx: Sender, mut app: App) { +pub async fn event_handler(rx: Receiver, 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; + form::show(&app, event::init(date), true).await; } - Msg::AddEvent { event } => { - let date = event.date.clone(); - app.events.push(event); + Msg::ShowUpdateForm { event } => { + form::show(&app, event, false).await; + } + Msg::AddEvent { new } => { + let date = new.date.clone(); + app.events.push(new); calendar::refresh_date(&app, date); } + Msg::UpdateEvent { old, new } => { + let new_date = new.date.clone(); + match app.events.iter().position(|e| e.id == new.id) { + Some(index) => { + app.events.remove(index); + app.events.push(new); + calendar::refresh_date(&app, new_date); + if old.date != new_date { + calendar::refresh_date(&app, old.date.clone()) + } + } + None => println!("Event not found when updating from {:?} to {:?}", old, new), + } + } } } } -- cgit v1.2.3