diff options
author | metamuffin <metamuffin@disroot.org> | 2023-12-25 21:06:47 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2023-12-25 21:06:47 +0100 |
commit | 2ff2d07b5ed265d0f4ce095002484fe771e51dae (patch) | |
tree | c1ec7370f0df772a5fafd2bf33b7481036c06f65 | |
parent | e2c62c34b4c2983b8ceef034347bc62b28a88122 (diff) | |
download | jellything-2ff2d07b5ed265d0f4ce095002484fe771e51dae.tar jellything-2ff2d07b5ed265d0f4ce095002484fe771e51dae.tar.bz2 jellything-2ff2d07b5ed265d0f4ce095002484fe771e51dae.tar.zst |
watchlist and some small fixes
-rw-r--r-- | Cargo.lock | 2 | ||||
-rw-r--r-- | common/src/user.rs | 1 | ||||
-rw-r--r-- | server/Cargo.toml | 2 | ||||
-rw-r--r-- | server/src/routes/api/mod.rs | 2 | ||||
-rw-r--r-- | server/src/routes/progress.rs | 41 | ||||
-rw-r--r-- | server/src/routes/ui/home.rs | 12 | ||||
-rw-r--r-- | server/src/routes/ui/node.rs | 30 | ||||
-rw-r--r-- | web/style/props.css | 6 |
8 files changed, 58 insertions, 38 deletions
@@ -1443,7 +1443,7 @@ dependencies = [ [[package]] name = "jellything" -version = "0.1.0" +version = "0.1.1" dependencies = [ "aes-gcm-siv", "anyhow", diff --git a/common/src/user.rs b/common/src/user.rs index 7fc1233..5f012dd 100644 --- a/common/src/user.rs +++ b/common/src/user.rs @@ -33,6 +33,7 @@ pub enum WatchedState { None, Progress(f64), Watched, + Pending, } #[derive(Debug, Serialize, Deserialize)] diff --git a/server/Cargo.toml b/server/Cargo.toml index 68ae861..e6e6d20 100644 --- a/server/Cargo.toml +++ b/server/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "jellything" -version = "0.1.0" +version = "0.1.1" edition = "2021" [dependencies] diff --git a/server/src/routes/api/mod.rs b/server/src/routes/api/mod.rs index 214c5de..828b576 100644 --- a/server/src/routes/api/mod.rs +++ b/server/src/routes/api/mod.rs @@ -30,7 +30,7 @@ pub fn r_api_root() -> Redirect { #[get("/api/version")] pub fn r_api_version() -> &'static str { - "2" + env!("CARGO_PKG_VERSION") } #[post("/api/create_session", data = "<data>")] diff --git a/server/src/routes/progress.rs b/server/src/routes/progress.rs index c4eb182..fa6f844 100644 --- a/server/src/routes/progress.rs +++ b/server/src/routes/progress.rs @@ -8,14 +8,21 @@ use crate::routes::ui::node::rocket_uri_macro_r_library_node; use anyhow::anyhow; use jellybase::database::Database; use jellycommon::user::WatchedState; -use rocket::{post, response::Redirect, State}; +use rocket::{post, response::Redirect, FromFormField, State, UriDisplayQuery}; + +#[derive(Debug, FromFormField, UriDisplayQuery)] +pub enum UrlWatchedState { + None, + Watched, + Pending, +} #[post("/n/<id>/watched?<state>")] pub async fn r_player_watched( session: Session, db: &State<Database>, id: &str, - state: bool, + state: UrlWatchedState, ) -> MyResult<Redirect> { db.node .get(&id.to_string())? @@ -25,11 +32,11 @@ pub async fn r_player_watched( 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 - } + t.watched = match state { + UrlWatchedState::None => WatchedState::None, + UrlWatchedState::Watched => WatchedState::Watched, + UrlWatchedState::Pending => WatchedState::Pending, + }; Some(t) })?; @@ -51,26 +58,12 @@ pub async fn r_player_progress( 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::None | WatchedState::Pending | 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(()) } diff --git a/server/src/routes/ui/home.rs b/server/src/routes/ui/home.rs index ed9f7c1..6a3b9a4 100644 --- a/server/src/routes/ui/home.rs +++ b/server/src/routes/ui/home.rs @@ -73,6 +73,12 @@ pub fn r_home(sess: Session, db: &State<Database>) -> MyResult<DynLayoutPage> { .filter(|(_, _, u)| matches!(u.watched, WatchedState::Progress(_))) .map(|k| k.to_owned()) .collect::<Vec<_>>(); + + let watchlist = items + .iter() + .filter(|(_, _, u)| matches!(u.watched, WatchedState::Pending)) + .map(|k| k.to_owned()) + .collect::<Vec<_>>(); Ok(LayoutPage { title: "Home".to_string(), @@ -87,6 +93,12 @@ pub fn r_home(sess: Session, db: &State<Database>) -> MyResult<DynLayoutPage> { li { @NodeCard { id, node, udata } } }}} } + @if !watchlist.is_empty() { + h2 { "Watchlist" } + .homelist { ul {@for (id, node, udata) in &watchlist { + li { @NodeCard { id, node, udata } } + }}} + } h2 { "Latest Releases" } .homelist { ul {@for (id, node, udata) in &latest { li { @NodeCard { id, node, udata } } diff --git a/server/src/routes/ui/node.rs b/server/src/routes/ui/node.rs index 7f80ea2..795effa 100644 --- a/server/src/routes/ui/node.rs +++ b/server/src/routes/ui/node.rs @@ -12,7 +12,7 @@ use crate::{ database::Database, routes::{ api::AcceptJson, - progress::rocket_uri_macro_r_player_watched, + progress::{rocket_uri_macro_r_player_watched, UrlWatchedState}, ui::{ account::session::Session, assets::AssetRole, @@ -114,17 +114,24 @@ markup::define! { h1 { @node.title } @if node.media.is_some() { a.play[href=&uri!(r_player(id, PlayerConfig::default()))] { "Watch now" }} @if !matches!(node.kind.unwrap_or_default(), NodeKind::Collection | NodeKind::Channel) { - @match udata.watched { - WatchedState::None | - WatchedState::Progress(_) => { - form.mark_watched[method="POST", action=uri!(r_player_watched(id, true))] { - input[type="submit", value="Mark Watched"]; - } + @if matches!(udata.watched, WatchedState::None | WatchedState::Pending | WatchedState::Progress(_)) { + form.mark_watched[method="POST", action=uri!(r_player_watched(id, UrlWatchedState::Watched))] { + input[type="submit", value="Mark Watched"]; } - WatchedState::Watched => { - form.mark_unwatched[method="POST", action=uri!(r_player_watched(id, false))] { - input[type="submit", value="Mark Unwatched"]; - } + } + @if matches!(udata.watched, WatchedState::Watched) { + form.mark_unwatched[method="POST", action=uri!(r_player_watched(id, UrlWatchedState::None))] { + input[type="submit", value="Mark Unwatched"]; + } + } + @if matches!(udata.watched, WatchedState::None) { + form.mark_unwatched[method="POST", action=uri!(r_player_watched(id, UrlWatchedState::Pending))] { + input[type="submit", value="Add to Watchlist"]; + } + } + @if matches!(udata.watched, WatchedState::Pending) { + form.mark_unwatched[method="POST", action=uri!(r_player_watched(id, UrlWatchedState::None))] { + input[type="submit", value="Remove from Watchlist"]; } } } @@ -199,6 +206,7 @@ markup::define! { } @match udata.watched { WatchedState::None => {} + WatchedState::Pending => { p.pending { "Watchlisted" } } WatchedState::Progress(x) => { p.progress { "Watched up to " @format_duration(x) } } WatchedState::Watched => { p.watched { "Watched" } } } diff --git a/web/style/props.css b/web/style/props.css index 415503a..6afc19d 100644 --- a/web/style/props.css +++ b/web/style/props.css @@ -31,6 +31,12 @@ .props p.progress::before { content: "pending"; } +.props p.pending { + background: rgba(156, 35, 69, 0.63); +} +.props p.pending::before { + content: "playlist_add_check"; +} .props p.rating { background: rgba(138, 156, 35, 0.63); } |