diff options
| author | metamuffin <metamuffin@disroot.org> | 2026-02-27 20:56:20 +0100 |
|---|---|---|
| committer | metamuffin <metamuffin@disroot.org> | 2026-02-27 20:56:20 +0100 |
| commit | 7930d543a2aa68d4ad2958605827d7eb1baa91f8 (patch) | |
| tree | fe59d1f549e303a96b78d3e925d75abb70b73af0 /server/src/ui/node.rs | |
| parent | c05bfcc2775f0e11db6e856bfcf06d0419c35d54 (diff) | |
| download | jellything-7930d543a2aa68d4ad2958605827d7eb1baa91f8.tar jellything-7930d543a2aa68d4ad2958605827d7eb1baa91f8.tar.bz2 jellything-7930d543a2aa68d4ad2958605827d7eb1baa91f8.tar.zst | |
reimplement Object as slice type
Diffstat (limited to 'server/src/ui/node.rs')
| -rw-r--r-- | server/src/ui/node.rs | 295 |
1 files changed, 146 insertions, 149 deletions
diff --git a/server/src/ui/node.rs b/server/src/ui/node.rs index 55a1d09..ca07bac 100644 --- a/server/src/ui/node.rs +++ b/server/src/ui/node.rs @@ -5,186 +5,183 @@ */ use super::error::MyResult; -use crate::{request_info::RequestInfo, ui_responder::UiResponse}; -use anyhow::Result; +use crate::request_info::RequestInfo; +use anyhow::anyhow; use jellycommon::{ - jellyobject::{OBB, Object, ObjectBuffer, ObjectBufferBuilder, Path}, + jellyobject::{EMPTY, Path}, *, }; -use jellydb::{Filter, MultiBehaviour, Query, Sort, SortOrder, Transaction, ValueSort}; -use rocket::get; -use std::collections::BTreeMap; +use jellydb::{Filter, Query}; +use jellyui::components::node_page::NodePage; +use rocket::{get, response::content::RawHtml}; +use std::borrow::Cow; #[get("/n/<slug>")] -pub fn r_node(ri: RequestInfo<'_>, slug: &str) -> MyResult<UiResponse> { +pub fn r_node(ri: RequestInfo<'_>, slug: &str) -> MyResult<RawHtml<String>> { ri.require_user()?; - let mut page = OBB::new(); + let mut nku = None; ri.state.database.transaction(&mut |txn| { if let Some(row) = txn.query_single(Query { filter: Filter::Match(Path(vec![NO_SLUG.0]), slug.into()), ..Default::default() })? { let n = txn.get(row)?.unwrap(); - let nku = Object::EMPTY.insert(NKU_NODE, n.as_object()); - let nku = nku.as_object(); - - page = OBB::new(); - let title = nku - .get(NKU_NODE) - .unwrap_or_default() - .get(NO_TITLE) - .unwrap_or_default(); - - page.push(VIEW_TITLE, title); - page.push(VIEW_NODE_PAGE, nku); - c_children(&mut page, txn, row, &nku)?; - c_credits(&mut page, txn, &nku)?; - c_credited(&mut page, txn, row)?; + nku = Some(Nku { + node: Cow::Owned(n), + userdata: Cow::Borrowed(EMPTY), + role: None, + }); } Ok(()) })?; + let Some(nku) = nku else { + Err(anyhow!("no such node"))? + }; - Ok(ri.respond_ui(page)) + Ok(ri.respond_ui(&NodePage { + ri: &ri.render_info(), + nku, + })) } -fn c_children( - page: &mut ObjectBufferBuilder, - txn: &mut dyn Transaction, - row: u64, - nku: &Object, -) -> Result<()> { - let kind = nku - .get(NKU_NODE) - .unwrap_or_default() - .get(NO_KIND) - .unwrap_or(KIND_COLLECTION); +// fn c_children( +// page: &mut ObjectBufferBuilder, +// txn: &mut dyn Transaction, +// row: u64, +// nku: &Object, +// ) -> Result<()> { +// let kind = nku +// .get(NKU_NODE) +// .unwrap_or_default() +// .get(NO_KIND) +// .unwrap_or(KIND_COLLECTION); - let (order, path) = match kind { - KIND_CHANNEL => (SortOrder::Descending, Path(vec![NO_RELEASEDATE.0])), - KIND_SEASON | KIND_SHOW => (SortOrder::Ascending, Path(vec![NO_INDEX.0])), - _ => (SortOrder::Ascending, Path(vec![NO_TITLE.0])), - }; +// let (order, path) = match kind { +// KIND_CHANNEL => (SortOrder::Descending, Path(vec![NO_RELEASEDATE.0])), +// KIND_SEASON | KIND_SHOW => (SortOrder::Ascending, Path(vec![NO_INDEX.0])), +// _ => (SortOrder::Ascending, Path(vec![NO_TITLE.0])), +// }; - let children_rows = txn - .query(Query { - sort: Sort::Value(ValueSort { - multi: MultiBehaviour::First, - offset: None, - order, - path, - }), - filter: Filter::All(vec![ - Filter::Match(Path(vec![NO_VISIBILITY.0]), VISI_VISIBLE.into()), - Filter::Match(Path(vec![NO_PARENT.0]), row.into()), - ]), - ..Default::default() - })? - .collect::<Result<Vec<_>>>()?; +// let children_rows = txn +// .query(Query { +// sort: Sort::Value(ValueSort { +// multi: MultiBehaviour::First, +// offset: None, +// order, +// path, +// }), +// filter: Filter::All(vec![ +// Filter::Match(Path(vec![NO_VISIBILITY.0]), VISI_VISIBLE.into()), +// Filter::Match(Path(vec![NO_PARENT.0]), row.into()), +// ]), +// ..Default::default() +// })? +// .collect::<Result<Vec<_>>>()?; - if children_rows.is_empty() { - return Ok(()); - } +// if children_rows.is_empty() { +// return Ok(()); +// } - let mut list = ObjectBufferBuilder::default(); +// let mut list = ObjectBufferBuilder::default(); - list.push( - NODELIST_DISPLAYSTYLE, - match kind { - KIND_SEASON | KIND_SHOW => NLSTYLE_LIST, - _ => NLSTYLE_GRID, - }, - ); +// list.push( +// NODELIST_DISPLAYSTYLE, +// match kind { +// KIND_SEASON | KIND_SHOW => NLSTYLE_LIST, +// _ => NLSTYLE_GRID, +// }, +// ); - for (row, _) in children_rows { - list.push( - NODELIST_ITEM, - Object::EMPTY - .insert(NKU_NODE, txn.get(row)?.unwrap().as_object()) - .as_object(), - ); - } +// for (row, _) in children_rows { +// list.push( +// NODELIST_ITEM, +// Object::EMPTY +// .insert(NKU_NODE, txn.get(row)?.unwrap().as_object()) +// .as_object(), +// ); +// } - page.push(VIEW_NODE_LIST, list.finish().as_object()); - Ok(()) -} +// page.push(VIEW_NODE_LIST, list.finish().as_object()); +// Ok(()) +// } -fn c_credits( - page: &mut ObjectBufferBuilder, - txn: &mut dyn Transaction, - nku: &Object, -) -> Result<()> { - if !nku.get(NKU_NODE).unwrap_or_default().has(NO_CREDIT.0) { - return Ok(()); - } +// fn c_credits( +// page: &mut ObjectBufferBuilder, +// txn: &mut dyn Transaction, +// nku: &Object, +// ) -> Result<()> { +// if !nku.get(NKU_NODE).unwrap_or_default().has(NO_CREDIT.0) { +// return Ok(()); +// } - let mut cats = BTreeMap::<_, Vec<_>>::new(); - for cred in nku.get(NKU_NODE).unwrap_or_default().iter(NO_CREDIT) { - let mut o = ObjectBuffer::empty(); - if let Some(row) = cred.get(CR_NODE) { - let node = txn.get(row)?.unwrap(); - o = o.as_object().insert(NKU_NODE, node.as_object()); - } - if let Some(role) = cred.get(CR_ROLE) { - o = o.as_object().insert(NKU_ROLE, role) - } - cats.entry(cred.get(CR_KIND).unwrap_or(CRCAT_CREW)) - .or_default() - .push(o); - } - let mut cats = cats.into_iter().collect::<Vec<_>>(); - cats.sort_by_key(|(c, _)| match *c { - CRCAT_CAST => 0, - CRCAT_CREW => 1, - _ => 100, - }); - for (cat, elems) in cats { - let mut list = ObjectBufferBuilder::default(); - list.push(NODELIST_DISPLAYSTYLE, NLSTYLE_INLINE); - list.push(NODELIST_TITLE, &format!("tag.cred.kind.{cat}")); - for item in elems { - list.push(NODELIST_ITEM, item.as_object()); - } - page.push(VIEW_NODE_LIST, list.finish().as_object()); - } +// let mut cats = BTreeMap::<_, Vec<_>>::new(); +// for cred in nku.get(NKU_NODE).unwrap_or_default().iter(NO_CREDIT) { +// let mut o = ObjectBuffer::empty(); +// if let Some(row) = cred.get(CR_NODE) { +// let node = txn.get(row)?.unwrap(); +// o = o.as_object().insert(NKU_NODE, node.as_object()); +// } +// if let Some(role) = cred.get(CR_ROLE) { +// o = o.as_object().insert(NKU_ROLE, role) +// } +// cats.entry(cred.get(CR_KIND).unwrap_or(CRCAT_CREW)) +// .or_default() +// .push(o); +// } +// let mut cats = cats.into_iter().collect::<Vec<_>>(); +// cats.sort_by_key(|(c, _)| match *c { +// CRCAT_CAST => 0, +// CRCAT_CREW => 1, +// _ => 100, +// }); +// for (cat, elems) in cats { +// let mut list = ObjectBufferBuilder::default(); +// list.push(NODELIST_DISPLAYSTYLE, NLSTYLE_INLINE); +// list.push(NODELIST_TITLE, &format!("tag.cred.kind.{cat}")); +// for item in elems { +// list.push(NODELIST_ITEM, item.as_object()); +// } +// page.push(VIEW_NODE_LIST, list.finish().as_object()); +// } - Ok(()) -} +// Ok(()) +// } -fn c_credited(page: &mut ObjectBufferBuilder, txn: &mut dyn Transaction, row: u64) -> Result<()> { - let children_rows = txn - .query(Query { - sort: Sort::Value(ValueSort { - multi: MultiBehaviour::First, - offset: None, - order: SortOrder::Ascending, - path: Path(vec![NO_TITLE.0]), - }), - filter: Filter::All(vec![ - Filter::Match(Path(vec![NO_VISIBILITY.0]), VISI_VISIBLE.into()), - Filter::Match(Path(vec![NO_CREDIT.0, CR_NODE.0]), row.into()), - ]), - ..Default::default() - })? - .collect::<Result<Vec<_>>>()?; +// fn c_credited(page: &mut ObjectBufferBuilder, txn: &mut dyn Transaction, row: u64) -> Result<()> { +// let children_rows = txn +// .query(Query { +// sort: Sort::Value(ValueSort { +// multi: MultiBehaviour::First, +// offset: None, +// order: SortOrder::Ascending, +// path: Path(vec![NO_TITLE.0]), +// }), +// filter: Filter::All(vec![ +// Filter::Match(Path(vec![NO_VISIBILITY.0]), VISI_VISIBLE.into()), +// Filter::Match(Path(vec![NO_CREDIT.0, CR_NODE.0]), row.into()), +// ]), +// ..Default::default() +// })? +// .collect::<Result<Vec<_>>>()?; - if children_rows.is_empty() { - return Ok(()); - } +// if children_rows.is_empty() { +// return Ok(()); +// } - let mut list = ObjectBufferBuilder::default(); - list.push(NODELIST_DISPLAYSTYLE, NLSTYLE_GRID); - list.push(NODELIST_TITLE, "node.credited"); +// let mut list = ObjectBufferBuilder::default(); +// list.push(NODELIST_DISPLAYSTYLE, NLSTYLE_GRID); +// list.push(NODELIST_TITLE, "node.credited"); - for (row, _) in children_rows { - list.push( - NODELIST_ITEM, - Object::EMPTY - .insert(NKU_NODE, txn.get(row)?.unwrap().as_object()) - .as_object(), - ); - } +// for (row, _) in children_rows { +// list.push( +// NODELIST_ITEM, +// Object::EMPTY +// .insert(NKU_NODE, txn.get(row)?.unwrap().as_object()) +// .as_object(), +// ); +// } - page.push(VIEW_NODE_LIST, list.finish().as_object()); - Ok(()) -} +// page.push(VIEW_NODE_LIST, list.finish().as_object()); +// Ok(()) +// } |