diff options
author | metamuffin <metamuffin@disroot.org> | 2023-06-12 23:51:20 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2023-06-12 23:51:20 +0200 |
commit | 77274b9a2af62124293b5a8a0ec0e430fa046de8 (patch) | |
tree | 15f176d57b4ea4d96f85eb9ba24bc94ab1b1660f /server/src/routes/ui/node.rs | |
parent | 161693f372ea01d945b111501c6c1af4182c283d (diff) | |
download | jellything-77274b9a2af62124293b5a8a0ec0e430fa046de8.tar jellything-77274b9a2af62124293b5a8a0ec0e430fa046de8.tar.bz2 jellything-77274b9a2af62124293b5a8a0ec0e430fa046de8.tar.zst |
flat view
Diffstat (limited to 'server/src/routes/ui/node.rs')
-rw-r--r-- | server/src/routes/ui/node.rs | 54 |
1 files changed, 33 insertions, 21 deletions
diff --git a/server/src/routes/ui/node.rs b/server/src/routes/ui/node.rs index e6f0809..d09c75c 100644 --- a/server/src/routes/ui/node.rs +++ b/server/src/routes/ui/node.rs @@ -17,7 +17,8 @@ use crate::{ use anyhow::Context; use log::info; use rocket::{get, http::ContentType, State}; -use std::{ops::Deref, path::PathBuf, sync::Arc}; +use rocket::{FromFormField, UriDisplayQuery}; +use std::{path::PathBuf, sync::Arc}; use tokio::fs::File; #[get("/library/<path..>")] @@ -32,24 +33,30 @@ pub async fn r_library_node( Ok(LayoutPage { title: node.title().to_string(), content: markup::new! { - @NodePage { node: node.clone() } + @NodePage { node: &node } }, ..Default::default() }) } markup::define! { - NodePage(node: Arc<Node>) { - @match node.deref() { - Node::Directory(dir) => { @DirectoryPage { dir: dir.clone() } } - Node::Item(item) => { @ItemPage { item: item.clone() } } + NodePage<'a>(node: &'a Arc<Node>) { + @match node.as_ref() { + Node::Directory(dir) => { @DirectoryPage { dir } } + Node::Item(item) => { @ItemPage { item } } } } - DirectoryCard(dir: Arc<Directory>) { + NodeCard<'a>(node: &'a Arc<Node>) { + @match node.as_ref() { + Node::Directory(dir) => { @DirectoryCard { dir } } + Node::Item(item) => { @ItemCard { item } } + } + } + DirectoryCard<'a>(dir: &'a Arc<Directory>) { div.card.dir { div.banner { a[href=uri!(r_library_node(&dir.lib_path))] { - img[src=uri!(r_item_assets(&dir.lib_path))]; + img[src=uri!(r_item_assets(&dir.lib_path, AssetRole::Banner))]; } div.hover { a[href=uri!(r_library_node(&dir.lib_path))] { "Open" } } } @@ -59,29 +66,25 @@ markup::define! { } } } - // a[href=&uri!(r_library_node(&dir.lib_path))] { @dir.info.name } } } - DirectoryPage(dir: Arc<Directory>) { + DirectoryPage<'a>(dir: &'a Arc<Directory>) { div.page.dir { h1 { @dir.info.name } @if let Some(parent) = dir.lib_path.parent() { a.dirup[href=uri!(r_library_node(&parent))] { "Go up" } } ul.directorylisting { - @for el in &dir.children { - li { @match el.deref().to_owned() { - Node::Directory(dir) => { @DirectoryCard { dir } } - Node::Item(item) => { @ItemCard { item } } - } } + @for node in &dir.children { + li { @NodeCard { node } } } } } } - ItemCard(item: Arc<Item>) { + ItemCard<'a>(item: &'a Arc<Item>) { div.card.item { div.banner { a[href=uri!(r_library_node(&item.lib_path))] { - img[src=uri!(r_item_assets(&item.lib_path))]; + img[src=uri!(r_item_assets(&item.lib_path, AssetRole::Banner))]; } div.hover { a[href=&player_uri(&item.lib_path)] { "▶" } } } @@ -92,12 +95,12 @@ markup::define! { } } } - ItemPage(item: Arc<Item>) { + ItemPage<'a>(item: &'a Arc<Item>) { // TODO different image here - img.backdrop[src=uri!(r_item_assets(&item.lib_path))]; + img.backdrop[src=uri!(r_item_assets(&item.lib_path, AssetRole::Backdrop))]; div.page.item { div.banner { - img[src=uri!(r_item_assets(&item.lib_path))]; + img[src=uri!(r_item_assets(&item.lib_path, AssetRole::Banner))]; } div.title { h1 { @item.info.title } @@ -112,12 +115,21 @@ markup::define! { } } -#[get("/item_assets/<path..>")] +#[derive(FromFormField, UriDisplayQuery)] +pub enum AssetRole { + Banner, + Backdrop, +} + +#[get("/item_assets/<path..>?<role>")] pub async fn r_item_assets( _sess: Session, path: PathBuf, + role: AssetRole, library: &State<Library>, ) -> Result<(ContentType, File), MyError> { + // TODO role + drop(role); let node = library .nested_path(&path) .context("retrieving library node")?; |