diff options
Diffstat (limited to 'server/src/routes/node.rs')
| -rw-r--r-- | server/src/routes/node.rs | 31 |
1 files changed, 17 insertions, 14 deletions
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<RawHtml<String>> { 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<Vec< 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), - }); + list.push(create_nku(txn, row)?); } Ok(list) } @@ -103,9 +95,8 @@ fn c_credits(txn: &mut dyn Transaction, node: &Object) -> Result<Vec<(Tag, Vec<N cats.entry(cred.get(CR_KIND).unwrap_or(CRCAT_CREW)) .or_default() .push(Nku { - node: Cow::Owned(txn.get(row)?.unwrap()), role: cred.get(CR_ROLE).map(String::from).map(Cow::Owned), - userdata: Cow::Borrowed(EMPTY), + ..create_nku(txn, row)? }); } let mut cats = cats.into_iter().collect::<Vec<_>>(); @@ -137,10 +128,22 @@ fn c_credited(txn: &mut dyn Transaction, row: u64) -> Result<Vec<Nku<'static>>> 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<Nku<'static>> { + 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, + }) +} |