diff options
Diffstat (limited to 'server/src/routes/ui/home.rs')
-rw-r--r-- | server/src/routes/ui/home.rs | 62 |
1 files changed, 31 insertions, 31 deletions
diff --git a/server/src/routes/ui/home.rs b/server/src/routes/ui/home.rs index d332447..9a00532 100644 --- a/server/src/routes/ui/home.rs +++ b/server/src/routes/ui/home.rs @@ -9,44 +9,48 @@ use super::{ node::{DatabaseNodeUserDataExt, NodeCard}, }; use crate::{ - database::Database, + database::DataAcid, routes::ui::{error::MyResult, layout::DynLayoutPage}, }; use anyhow::Context; use chrono::{Datelike, Utc}; -use jellybase::CONF; -use jellycommon::{ - user::{NodeUserData, WatchedState}, - NodePublic, +use jellybase::{ + database::{ReadableTable, TableExt, T_NODE, T_USER_NODE}, + CONF, }; +use jellycommon::user::WatchedState; use rocket::{get, State}; use tokio::fs::read_to_string; #[get("/")] -pub fn r_home(sess: Session, db: &State<Database>) -> MyResult<DynLayoutPage> { - let mut items = db - .node - .iter() - .map(|e| { - let (i, n) = e.context("listing")?; - let u = db - .user_node - .get(&(sess.user.name.clone(), i.clone()))? - .unwrap_or_default(); - Ok((i, n, u)) - }) - .collect::<anyhow::Result<Vec<_>>>()? - .into_iter() - .map(|(k, n, u)| (k, n.public, u)) - .collect::<Vec<(String, NodePublic, NodeUserData)>>(); - +pub fn r_home(sess: Session, db: &State<DataAcid>) -> MyResult<DynLayoutPage> { + let mut items = { + let txn = db.begin_read()?; + let nodes = txn.open_table(T_NODE)?; + let node_users = txn.open_table(T_USER_NODE)?; + let i = nodes + .iter()? + .map(|a| { + let (x, y) = a.unwrap(); + let (x, y) = (x.value().to_owned(), y.value().0); + let z = node_users + .get(&(sess.user.name.as_str(), x.as_str())) + .unwrap() + .map(|z| z.value().0) + .unwrap_or_default(); + let y = y.public; + (x, y, z) + }) + .collect::<Vec<_>>(); + drop(nodes); + i + }; let random = (0..16) .flat_map(|i| Some(items[cheap_daily_random(i).checked_rem(items.len())?].clone())) .collect::<Vec<_>>(); - let toplevel = db - .node - .get(&"library".to_string())? + let toplevel = T_NODE + .get(&db, "library")? .context("root node missing")? .public .children @@ -56,11 +60,7 @@ pub fn r_home(sess: Session, db: &State<Database>) -> MyResult<DynLayoutPage> { .into_iter() .collect::<Vec<_>>(); - items.sort_by_key(|(_, n, _)| { - n.release_date - .map(|d| -d.naive_utc().timestamp()) - .unwrap_or(i64::MAX) - }); + items.sort_by_key(|(_, n, _)| n.release_date.map(|d| -d).unwrap_or(i64::MAX)); let latest = items .iter() @@ -73,7 +73,7 @@ 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)) |