+ More meta-cache backend for video store

This commit is contained in:
shockrah 2021-09-29 21:19:17 -07:00
parent caed1444c1
commit 678dd3d7ee

View File

@ -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<String>, name: Option<&str>) -> err::Result<VideoMeta>;
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<String>, name: Option<&str>) -> err::Result<VideoMeta> {
todo!()
}
fn rename_video(id: String, new: &str) -> err::Result<()> {
todo!()
}
fn redescribe_video(id: String, new: &str) -> err::Result<()> {
todo!()
}
}