From a7e8095bdaa6ebec05a20e76c6d936827f586731 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Thu, 12 Mar 2026 15:31:16 +0100 Subject: show child count via nku --- server/src/routes/home.rs | 23 ++++------------------- server/src/routes/items.rs | 25 ++++++++----------------- server/src/routes/node.rs | 31 +++++++++++++++++-------------- server/src/routes/player.rs | 20 ++++++-------------- server/src/routes/search.rs | 24 ++++++------------------ 5 files changed, 41 insertions(+), 82 deletions(-) (limited to 'server') diff --git a/server/src/routes/home.rs b/server/src/routes/home.rs index 17cac83..cb3fffd 100644 --- a/server/src/routes/home.rs +++ b/server/src/routes/home.rs @@ -5,13 +5,12 @@ */ use super::error::MyResult; -use crate::request_info::RequestInfo; +use crate::{request_info::RequestInfo, routes::node::create_nku}; use anyhow::{Context, Result}; -use jellycommon::{Nku, jellyobject::EMPTY}; use jellydb::{Query, helper::DatabaseReturnExt}; use jellyui::components::home::{Home, HomeRow}; use rocket::{get, response::content::RawHtml}; -use std::{borrow::Cow, str::FromStr}; +use std::str::FromStr; #[get("/home")] pub fn r_home(ri: RequestInfo<'_>) -> MyResult> { @@ -58,15 +57,9 @@ fn home_row( let q = Query::from_str(query).context("parse query")?; ri.state.database.transaction_ret(|txn| { let rows = txn.query(q.clone())?.take(16).collect::>>()?; - let mut nkus = Vec::new(); for (row, _) in rows { - let node = txn.get(row)?.unwrap(); - nkus.push(Nku { - node: Cow::Owned(node), - role: None, - userdata: Cow::Borrowed(EMPTY), - }); + nkus.push(create_nku(txn, row)?); } Ok((title, HomeRow::Inline(nkus))) }) @@ -83,14 +76,6 @@ fn home_row_highlight( return Ok(None); }; let row = row?.0; - let node = txn.get(row)?.unwrap(); - Ok(Some(( - title, - HomeRow::Highlight(Nku { - node: Cow::Owned(node), - role: None, - userdata: Cow::Borrowed(EMPTY), - }), - ))) + Ok(Some((title, HomeRow::Highlight(create_nku(txn, row)?)))) }) } diff --git a/server/src/routes/items.rs b/server/src/routes/items.rs index 84869a1..8db60da 100644 --- a/server/src/routes/items.rs +++ b/server/src/routes/items.rs @@ -4,17 +4,16 @@ Copyright (C) 2026 metamuffin */ -use crate::{request_info::RequestInfo, routes::error::MyResult}; +use crate::{ + request_info::RequestInfo, + routes::{error::MyResult, node::create_nku}, +}; use anyhow::anyhow; use base64::{Engine, prelude::BASE64_URL_SAFE}; -use jellycommon::{ - jellyobject::{EMPTY, Path}, - *, -}; +use jellycommon::{jellyobject::Path, *}; use jellydb::{Filter, MultiBehaviour, Query, Sort, SortOrder, ValueSort}; use jellyui::components::items::Items; use rocket::{get, response::content::RawHtml}; -use std::borrow::Cow; #[get("/items?")] pub fn r_items(ri: RequestInfo, cont: Option<&str>) -> MyResult> { @@ -45,9 +44,8 @@ pub fn r_items(ri: RequestInfo, cont: Option<&str>) -> MyResult> items.clear(); cont_out = None; - for (r, is) in rows { - let node = txn.get(r)?.unwrap(); - items.push(node); + for (row, is) in rows { + items.push(create_nku(txn, row)?); cont_out = Some(is) } Ok(()) @@ -55,14 +53,7 @@ pub fn r_items(ri: RequestInfo, cont: Option<&str>) -> MyResult> Ok(ri.respond_ui(&Items { ri: &ri.render_info(), - items: &items - .iter() - .map(|node| Nku { - node: Cow::Borrowed(node), - userdata: Cow::Borrowed(EMPTY), - role: None, - }) - .collect::>(), + items: &items, cont: cont_out.map(|x| BASE64_URL_SAFE.encode(x)), })) } diff --git a/server/src/routes/node.rs b/server/src/routes/node.rs index d7ef0b5..d8d9ba5 100644 --- a/server/src/routes/node.rs +++ b/server/src/routes/node.rs @@ -33,11 +33,7 @@ pub fn r_node(ri: RequestInfo<'_>, slug: &str) -> MyResult> { children = c_children(txn, row, &n)?; credits = c_credits(txn, &n)?; credited = c_credited(txn, row)?; - nku = Some(Nku { - node: Cow::Owned(n), - userdata: Cow::Borrowed(EMPTY), - role: None, - }); + nku = Some(create_nku(txn, row)?); } Ok(()) })?; @@ -80,11 +76,7 @@ fn c_children(txn: &mut dyn Transaction, row: u64, node: &Object) -> Result Result>(); @@ -137,10 +128,22 @@ fn c_credited(txn: &mut dyn Transaction, row: u64) -> Result>> let mut list = Vec::new(); for (row, _) in children_rows { list.push(Nku { - node: Cow::Owned(txn.get(row)?.unwrap()), role: None, - userdata: Cow::Borrowed(EMPTY), + ..create_nku(txn, row)? }); } Ok(list) } + +pub fn create_nku(txn: &mut dyn Transaction, row: u64) -> Result> { + let child_count = txn.count(Query { + filter: Filter::Match(Path(vec![NO_PARENT.0]), row.into()), + ..Default::default() + })?; + Ok(Nku { + node: Cow::Owned(txn.get(row)?.unwrap()), + role: None, + userdata: Cow::Borrowed(EMPTY), + child_count, + }) +} diff --git a/server/src/routes/player.rs b/server/src/routes/player.rs index c6c177e..45fd6de 100644 --- a/server/src/routes/player.rs +++ b/server/src/routes/player.rs @@ -4,16 +4,12 @@ Copyright (C) 2026 metamuffin */ use super::error::MyResult; -use crate::request_info::RequestInfo; +use crate::{request_info::RequestInfo, routes::node::create_nku}; use anyhow::anyhow; -use jellycommon::{ - jellyobject::{EMPTY, Path}, - *, -}; +use jellycommon::{jellyobject::Path, *}; use jellydb::{Filter, Query}; use jellyui::components::node_page::Player; use rocket::{get, response::content::RawHtml}; -use std::borrow::Cow; // fn jellynative_url(action: &str, seek: f64, secret: &str, node: &str, session: &str) -> String { // let protocol = if CONF.tls { "https" } else { "http" }; @@ -33,26 +29,22 @@ pub fn r_player(ri: RequestInfo<'_>, t: Option, slug: &str) -> MyResult */ -use std::{borrow::Cow, time::Instant}; - use super::error::MyResult; -use crate::request_info::RequestInfo; -use jellycommon::{ - jellyobject::{EMPTY, Path}, - *, -}; +use crate::{request_info::RequestInfo, routes::node::create_nku}; +use jellycommon::{jellyobject::Path, *}; use jellydb::{Filter, Query, Sort}; use jellyui::components::search::Search; use log::info; use rocket::{get, response::content::RawHtml}; +use std::time::Instant; #[get("/search?")] pub async fn r_search(ri: RequestInfo<'_>, q: Option<&str>) -> MyResult> { @@ -43,9 +39,8 @@ pub async fn r_search(ri: RequestInfo<'_>, q: Option<&str>) -> MyResult, _>>()?; items.clear(); - for (r, _is) in rows { - let node = txn.get(r)?.unwrap(); - items.push(node); + for (row, _is) in rows { + items.push(create_nku(txn, row)?); } Ok(()) })?; @@ -54,14 +49,7 @@ pub async fn r_search(ri: RequestInfo<'_>, q: Option<&str>) -> MyResult>(), + items: &items, ri: &ri.render_info(), cont: None, })) -- cgit v1.3