aboutsummaryrefslogtreecommitdiff
path: root/server/src/routes/ui/home.rs
diff options
context:
space:
mode:
Diffstat (limited to 'server/src/routes/ui/home.rs')
-rw-r--r--server/src/routes/ui/home.rs62
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))