aboutsummaryrefslogtreecommitdiff
path: root/server/src/routes/progress.rs
diff options
context:
space:
mode:
authormetamuffin <metamuffin@disroot.org>2023-12-16 01:08:15 +0100
committermetamuffin <metamuffin@disroot.org>2023-12-16 01:08:15 +0100
commitaf99c406af8ee47bee38708cf23e86af826e41ba (patch)
tree23498a36f813454c2edea46906f812d929ba792e /server/src/routes/progress.rs
parent21b58037c69798e922c5512ea5380943781558ff (diff)
downloadjellything-af99c406af8ee47bee38708cf23e86af826e41ba.tar
jellything-af99c406af8ee47bee38708cf23e86af826e41ba.tar.bz2
jellything-af99c406af8ee47bee38708cf23e86af826e41ba.tar.zst
watch progress and some draft ui
Diffstat (limited to 'server/src/routes/progress.rs')
-rw-r--r--server/src/routes/progress.rs75
1 files changed, 59 insertions, 16 deletions
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/<id>/watched?<state>")]
+pub async fn r_player_watched(
+ session: Session,
+ db: &State<Database>,
+ id: &str,
+ state: bool,
+) -> MyResult<Redirect> {
+ 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/<id>/progress?<t>")]
pub async fn r_player_progress(
session: Session,
db: &State<Database>,
id: &str,
- t: Option<f64>,
+ 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(())
}