From af99c406af8ee47bee38708cf23e86af826e41ba Mon Sep 17 00:00:00 2001 From: metamuffin Date: Sat, 16 Dec 2023 01:08:15 +0100 Subject: watch progress and some draft ui --- server/src/routes/progress.rs | 75 ++++++++++++++++++++++++++++++++++--------- 1 file changed, 59 insertions(+), 16 deletions(-) (limited to 'server/src/routes/progress.rs') diff --git a/server/src/routes/progress.rs b/server/src/routes/progress.rs index 170ed97..0ba5b31 100644 --- a/server/src/routes/progress.rs +++ b/server/src/routes/progress.rs @@ -1,28 +1,71 @@ -use std::collections::HashMap; - use super::ui::{account::session::Session, error::MyResult}; +use crate::routes::ui::node::rocket_uri_macro_r_library_node; +use anyhow::anyhow; use jellybase::database::Database; -use rocket::{post, State}; +use jellycommon::user::WatchedState; +use rocket::{post, response::Redirect, State}; + +#[post("/n//watched?")] +pub async fn r_player_watched( + session: Session, + db: &State, + id: &str, + state: bool, +) -> MyResult { + db.node + .get(&id.to_string())? + .ok_or(anyhow!("node does not exist"))?; + + let key = (session.user.name.clone(), id.to_owned()); + + db.user_node.fetch_and_update(&key, |t| { + let mut t = t.unwrap_or_default(); + if state { + t.watched = WatchedState::Watched + } else { + t.watched = WatchedState::None + } + Some(t) + })?; + + Ok(Redirect::found(rocket::uri!(r_library_node(id)))) +} #[post("/n//progress?")] pub async fn r_player_progress( session: Session, db: &State, id: &str, - t: Option, + t: f64, ) -> MyResult<()> { - db.user_progess.fetch_and_update(&session.user.name, |p| { - let mut m = p.unwrap_or_else(|| HashMap::new()); - if let Some(t) = t { - m.insert(id.to_string(), t); - } else { - m.remove(&id.to_string()); - } - if m.is_empty() { - None - } else { - Some(m) - } + db.node + .get(&id.to_string())? + .ok_or(anyhow!("node does not exist"))?; + + let key = (session.user.name.clone(), id.to_owned()); + db.user_node.fetch_and_update(&key, |d| { + let mut d = d.unwrap_or_default(); + d.watched = match d.watched { + WatchedState::None | WatchedState::Progress(_) => WatchedState::Progress(t), + WatchedState::Watched => WatchedState::Watched, + }; + Some(d) })?; + + // db.user_progess.fetch_and_update(&session.user.name, |p| { + // let mut m = p.unwrap_or_else(|| HashMap::new()); + // if let Some(t) = t { + // if m.len() < 16 { + // m.insert(id.to_string(), t); + // } + // } else { + // m.remove(&id.to_string()); + // } + // if m.is_empty() { + // None + // } else { + // Some(m) + // } + // })?; Ok(()) } -- cgit v1.2.3-70-g09d2