From 46c251655db7bb3d9aa814b1a5dde85336b0b9b1 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Sat, 20 Jan 2024 00:50:20 +0100 Subject: replace sled with redb --- server/src/routes/ui/home.rs | 62 ++++++++++++++++++++++---------------------- 1 file changed, 31 insertions(+), 31 deletions(-) (limited to 'server/src/routes/ui/home.rs') 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) -> MyResult { - 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::>>()? - .into_iter() - .map(|(k, n, u)| (k, n.public, u)) - .collect::>(); - +pub fn r_home(sess: Session, db: &State) -> MyResult { + 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::>(); + drop(nodes); + i + }; let random = (0..16) .flat_map(|i| Some(items[cheap_daily_random(i).checked_rem(items.len())?].clone())) .collect::>(); - 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) -> MyResult { .into_iter() .collect::>(); - 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) -> MyResult { .filter(|(_, _, u)| matches!(u.watched, WatchedState::Progress(_))) .map(|k| k.to_owned()) .collect::>(); - + let watchlist = items .iter() .filter(|(_, _, u)| matches!(u.watched, WatchedState::Pending)) -- cgit v1.2.3-70-g09d2