diff --git a/fitnesstrax/app/src/app.rs b/fitnesstrax/app/src/app.rs index 8482fd1..49500d6 100644 --- a/fitnesstrax/app/src/app.rs +++ b/fitnesstrax/app/src/app.rs @@ -14,7 +14,7 @@ General Public License for more details. You should have received a copy of the GNU General Public License along with FitnessTrax. If not, see . */ -use emseries::Series; +use emseries::{Record, RecordId, Series}; use ft_core::TraxRecord; use std::{ path::{Path, PathBuf}, @@ -30,6 +30,12 @@ pub enum AppInvocation { /// Request a set of records from the core. // Note: this will require a time range, but doesn't yet. RequestRecords, + + UpdateRecord(Record), + + PutRecord(TraxRecord), + + DeleteRecord(RecordId), } /// Responses are messages that the core sends to the UI. Though they are called responses, the @@ -83,6 +89,27 @@ impl App { AppResponse::Records } } + AppInvocation::UpdateRecord(record) => match *self.database.write().unwrap() { + Some(ref mut database) => { + database.update(record).unwrap(); + AppResponse::Records + } + None => AppResponse::NoDatabase, + }, + AppInvocation::PutRecord(record) => match *self.database.write().unwrap() { + Some(ref mut database) => { + database.put(record).unwrap(); + AppResponse::Records + } + None => AppResponse::NoDatabase, + }, + AppInvocation::DeleteRecord(record_id) => match *self.database.write().unwrap() { + Some(ref mut database) => { + database.delete(&record_id).unwrap(); + AppResponse::Records + } + None => AppResponse::NoDatabase, + }, } } diff --git a/fitnesstrax/app/src/components/day.rs b/fitnesstrax/app/src/components/day.rs index f6f8b98..690d9d3 100644 --- a/fitnesstrax/app/src/components/day.rs +++ b/fitnesstrax/app/src/components/day.rs @@ -157,10 +157,10 @@ impl DayDetail { }); let weight_view = match weight_record { - Some((unique_id, record)) => WeightView::new(Some(record), move |weight| { + Some((id, record)) => WeightView::new(Some(record.clone()), move |weight| { println!( "on_blur on the weight view. Need to record {:?}, {:?}", - unique_id, weight + id, weight ); }), None => WeightView::new(None, |weight| { diff --git a/fitnesstrax/app/src/views/historical_view.rs b/fitnesstrax/app/src/views/historical_view.rs index 79c85dd..962fef2 100644 --- a/fitnesstrax/app/src/views/historical_view.rs +++ b/fitnesstrax/app/src/views/historical_view.rs @@ -173,7 +173,6 @@ impl From>> for GroupedRecords { mod test { use super::GroupedRecords; use chrono::{FixedOffset, NaiveDate, TimeZone}; - use chrono_tz::America::Anchorage; use dimensioned::si::{KG, M, S}; use emseries::{Record, RecordId}; use ft_core::{Steps, TimeDistance, TraxRecord, Weight}; @@ -181,36 +180,51 @@ mod test { #[test] fn groups_records() { let records = vec![ - TraxRecord::Steps(Steps { - date: NaiveDate::from_ymd_opt(2023, 10, 13).unwrap(), - count: 1500, - }), - TraxRecord::Weight(Weight { - date: NaiveDate::from_ymd_opt(2023, 10, 13).unwrap(), - weight: 85. * KG, - }), - TraxRecord::Weight(Weight { - date: NaiveDate::from_ymd_opt(2023, 10, 14).unwrap(), - weight: 86. * KG, - }), - TraxRecord::BikeRide(TimeDistance { - datetime: FixedOffset::west_opt(10 * 60 * 60) - .unwrap() - .with_ymd_and_hms(2019, 6, 15, 12, 0, 0) - .unwrap(), - distance: Some(1000. * M), - duration: Some(150. * S), - comments: Some("Test Comments".to_owned()), - }), - TraxRecord::BikeRide(TimeDistance { - datetime: FixedOffset::west_opt(10 * 60 * 60) - .unwrap() - .with_ymd_and_hms(2019, 6, 15, 23, 0, 0) - .unwrap(), - distance: Some(1000. * M), - duration: Some(150. * S), - comments: Some("Test Comments".to_owned()), - }), + Record { + id: RecordId::default(), + data: TraxRecord::Steps(Steps { + date: NaiveDate::from_ymd_opt(2023, 10, 13).unwrap(), + count: 1500, + }), + }, + Record { + id: RecordId::default(), + data: TraxRecord::Weight(Weight { + date: NaiveDate::from_ymd_opt(2023, 10, 13).unwrap(), + weight: 85. * KG, + }), + }, + Record { + id: RecordId::default(), + data: TraxRecord::Weight(Weight { + date: NaiveDate::from_ymd_opt(2023, 10, 14).unwrap(), + weight: 86. * KG, + }), + }, + Record { + id: RecordId::default(), + data: TraxRecord::BikeRide(TimeDistance { + datetime: FixedOffset::west_opt(10 * 60 * 60) + .unwrap() + .with_ymd_and_hms(2019, 6, 15, 12, 0, 0) + .unwrap(), + distance: Some(1000. * M), + duration: Some(150. * S), + comments: Some("Test Comments".to_owned()), + }), + }, + Record { + id: RecordId::default(), + data: TraxRecord::BikeRide(TimeDistance { + datetime: FixedOffset::west_opt(10 * 60 * 60) + .unwrap() + .with_ymd_and_hms(2019, 6, 15, 23, 0, 0) + .unwrap(), + distance: Some(1000. * M), + duration: Some(150. * S), + comments: Some("Test Comments".to_owned()), + }), + }, ]; let groups = GroupedRecords::from(records).0; diff --git a/fitnesstrax/core/src/lib.rs b/fitnesstrax/core/src/lib.rs index b206602..207f483 100644 --- a/fitnesstrax/core/src/lib.rs +++ b/fitnesstrax/core/src/lib.rs @@ -1,3 +1,4 @@ mod legacy; + mod types; pub use types::{RecordType, Steps, TimeDistance, TraxRecord, Weight};