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};