diff --git a/dblib/src/videostore.rs b/dblib/src/videostore.rs index c4e186c..692df7f 100644 --- a/dblib/src/videostore.rs +++ b/dblib/src/videostore.rs @@ -1,14 +1,50 @@ -use std::collections::HashMap; use std::fs::File; -use std::io::BufReader; -use std::io::BufWriter; -use crate::{err, DB, dev_urandom, VideoStore}; +use std::io::{BufReader, BufWriter}; +use crate::{filename, err, DB, uid}; +use crate::{VideoStore, VideoMeta, VideoMetaEntry}; impl VideoStore for DB { - fn new_video(name: &str, desc: &str) -> err::Result<()>; - fn del_video(id: String) -> err::Result<()>; - fn get_video(id: Option, name: Option<&str>) -> err::Result; - fn rename_video(id: String, new: &str) -> err::Result<()>; - fn redescribe_video(id: String, new: &str) -> err::Result<()>; + fn new_video(name: &str, desc: &str) -> err::Result<()> { + let fname = filename(); + let file = File::open(&fname)?; + let reader = BufReader::new(file); + + // Messing with data we care about + let id = uid()?; + let mut data: DB = serde_json::from_reader(reader)?; + let entry = VideoMetaEntry { + name: name.to_string(), + desc: if desc.len() != 0 { None } else { Some(desc.to_string()) } + }; + // update in mem-cache + data.videos.insert(id, entry); + // update the content on disk + let file = File::open(&fname)?; + let writer = BufWriter::new(file); + serde_json::to_writer(writer, &data)?; + Ok(()) + } + fn del_video(id: String) -> err::Result<()> { + let fname = filename(); + let file = File::open(&fname)?; + let reader = BufReader::new(file); + + let mut data: DB = serde_json::from_reader(file)?; + data.videos.remove(id); + + let file = File::open(&fname)?; + let writer = BufWriter::new(file); + serde_json::to_writer(writer, &data)?; + Ok(()) + } + fn get_video(id: Option, name: Option<&str>) -> err::Result { + todo!() + } + fn rename_video(id: String, new: &str) -> err::Result<()> { + todo!() + } + fn redescribe_video(id: String, new: &str) -> err::Result<()> { + todo!() + } }