mirror of
https://github.com/Djeeberjr/fw-anwesenheit.git
synced 2025-10-13 15:06:39 +00:00
propper mapping of day to filename
This commit is contained in:
parent
f1b471c6d8
commit
9b926f7a34
@ -1,7 +1,9 @@
|
|||||||
use alloc::vec::Vec;
|
use alloc::{format, vec::Vec};
|
||||||
use embassy_time::Delay;
|
use embassy_time::Delay;
|
||||||
use embedded_hal_bus::spi::ExclusiveDevice;
|
use embedded_hal_bus::spi::ExclusiveDevice;
|
||||||
use embedded_sdmmc::{SdCard, TimeSource, Timestamp, VolumeIdx, VolumeManager};
|
use embedded_sdmmc::{
|
||||||
|
Directory, SdCard, ShortFileName, TimeSource, Timestamp, VolumeIdx, VolumeManager,
|
||||||
|
};
|
||||||
use esp_hal::{Blocking, gpio::Output, spi::master::Spi};
|
use esp_hal::{Blocking, gpio::Output, spi::master::Spi};
|
||||||
|
|
||||||
use crate::store::{AttendanceDay, day::Day, persistence::Persistence};
|
use crate::store::{AttendanceDay, day::Day, persistence::Persistence};
|
||||||
@ -38,37 +40,53 @@ pub struct SDCardPersistence {
|
|||||||
vol_mgr: VolMgr,
|
vol_mgr: VolMgr,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl SDCardPersistence {
|
||||||
|
fn generate_filename(day: Day) -> ShortFileName {
|
||||||
|
let basename = day.to_string();
|
||||||
|
let mut filename: heapless::String<11> = heapless::String::new();
|
||||||
|
filename.push_str(&basename).unwrap();
|
||||||
|
filename.push_str(".js").unwrap();
|
||||||
|
|
||||||
|
ShortFileName::create_from_str(&filename).unwrap()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl Persistence for SDCardPersistence {
|
impl Persistence for SDCardPersistence {
|
||||||
async fn load_day(&mut self, day: Day) -> Option<AttendanceDay> {
|
async fn load_day(&mut self, day: Day) -> Option<AttendanceDay> {
|
||||||
let mut vol_0 = self.vol_mgr.open_volume(VolumeIdx(0)).unwrap();
|
let mut vol_0 = self.vol_mgr.open_volume(VolumeIdx(0)).unwrap();
|
||||||
let mut root_dir = vol_0.open_root_dir().unwrap();
|
let mut root_dir = vol_0.open_root_dir().unwrap();
|
||||||
let mut file = root_dir.open_file_in_dir("day.jsn", embedded_sdmmc::Mode::ReadOnly);
|
|
||||||
|
|
||||||
if let Err(e) = file {
|
let filename = Self::generate_filename(day);
|
||||||
|
let file = root_dir.open_file_in_dir(filename, embedded_sdmmc::Mode::ReadOnly);
|
||||||
|
|
||||||
|
if file.is_err() {
|
||||||
return None;
|
return None;
|
||||||
}
|
}
|
||||||
|
|
||||||
let mut open_file = file.unwrap();
|
let mut open_file = file.unwrap();
|
||||||
|
|
||||||
let mut read_buffer: [u8; 1024] = [0; 1024];
|
let mut read_buffer: [u8; 1024] = [0; 1024];
|
||||||
let read = open_file.read(&mut read_buffer).unwrap();
|
let read = open_file.read(&mut read_buffer).unwrap();
|
||||||
open_file.close().unwrap();
|
open_file.close().unwrap();
|
||||||
|
|
||||||
// let day: AttendanceDay = serde_json::from_slice(&read_buffer[..read]).unwrap();
|
let day: AttendanceDay = serde_json::from_slice(&read_buffer[..read]).unwrap();
|
||||||
|
|
||||||
// Some(day)
|
Some(day)
|
||||||
None
|
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn save_day(&mut self, day: Day, data: &AttendanceDay) {
|
async fn save_day(&mut self, day: Day, data: &AttendanceDay) {
|
||||||
let mut vol_0 = self.vol_mgr.open_volume(VolumeIdx(0)).unwrap();
|
let mut vol_0 = self.vol_mgr.open_volume(VolumeIdx(0)).unwrap();
|
||||||
let mut root_dir = vol_0.open_root_dir().unwrap();
|
let mut root_dir = vol_0.open_root_dir().unwrap();
|
||||||
|
|
||||||
|
let filename = Self::generate_filename(day);
|
||||||
|
|
||||||
let mut file = root_dir
|
let mut file = root_dir
|
||||||
.open_file_in_dir("day.jsn", embedded_sdmmc::Mode::ReadWriteCreateOrTruncate)
|
.open_file_in_dir(filename, embedded_sdmmc::Mode::ReadWriteCreateOrTruncate)
|
||||||
.unwrap();
|
.unwrap();
|
||||||
file.write(&serde_json::to_vec(data).unwrap()).unwrap();
|
file.write(&serde_json::to_vec(data).unwrap()).unwrap();
|
||||||
file.flush();
|
|
||||||
file.close();
|
file.flush().unwrap();
|
||||||
|
file.close().unwrap();
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn load_mapping(&mut self) -> Option<crate::store::IDMapping> {
|
async fn load_mapping(&mut self) -> Option<crate::store::IDMapping> {
|
||||||
@ -87,7 +105,9 @@ impl Persistence for SDCardPersistence {
|
|||||||
let mut days: Vec<Day> = Vec::new();
|
let mut days: Vec<Day> = Vec::new();
|
||||||
days_dir
|
days_dir
|
||||||
.iterate_dir(|e| {
|
.iterate_dir(|e| {
|
||||||
days.push(Day::new(0));
|
let filename = e.name.clone();
|
||||||
|
let day: Day = filename.try_into().unwrap();
|
||||||
|
days.push(day);
|
||||||
})
|
})
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user