From d80bdf60b1b68fee752b7dfca4b89231015987ff Mon Sep 17 00:00:00 2001 From: metamuffin Date: Sat, 21 Jan 2023 18:57:21 +0100 Subject: multiple source files --- server/src/library.rs | 44 +++++++++++++++++----------- server/src/routes/ui/style/directorypage.css | 1 - server/src/routes/ui/style/player.css | 2 ++ 3 files changed, 29 insertions(+), 18 deletions(-) (limited to 'server/src') diff --git a/server/src/library.rs b/server/src/library.rs index a48e746..ebafa9d 100644 --- a/server/src/library.rs +++ b/server/src/library.rs @@ -36,7 +36,9 @@ pub struct Item { impl Library { pub fn open(path: &PathBuf) -> anyhow::Result { Ok(Self { - root: Node::from_path(path.clone(), PathBuf::new(), true).context("indexing root")?, + root: Node::from_path(path.clone(), PathBuf::new(), true) + .context("indexing root")? + .ok_or(anyhow!("root need directory.json"))?, }) } pub fn nested_path(&self, path: &Path) -> anyhow::Result> { @@ -86,9 +88,12 @@ impl Node { path: PathBuf, mut lib_path: PathBuf, root: bool, - ) -> anyhow::Result> { + ) -> anyhow::Result>> { if path.is_dir() { let mpath = path.join("directory.json"); + if !mpath.exists() { + return Ok(None); + } let data: DirectoryInfo = serde_json::from_reader(File::open(mpath).context("metadata missing")?)?; @@ -109,20 +114,23 @@ impl Node { None } }) - .map(|e| { + .filter_map(|e| { Node::from_path(e.clone(), lib_path.clone(), false) .context(format!("loading {e:?}")) + .transpose() }) .into_iter() .collect::>>()?; - Ok(Node::Directory(Arc::new(Directory { - lib_path, - children, - data, - identifier, - })) - .into()) + Ok(Some( + Node::Directory(Arc::new(Directory { + lib_path, + children, + data, + identifier, + })) + .into(), + )) } else if path.is_file() { info!("loading {path:?}"); let datafile = File::open(path.clone()).context("cant load metadata")?; @@ -134,13 +142,15 @@ impl Node { .to_str() .unwrap() .to_string(); - Ok(Node::Item(Arc::new(Item { - fs_path: path.clone(), - lib_path: lib_path.join(identifier.clone()), - info: data, - identifier, - })) - .into()) + Ok(Some( + Node::Item(Arc::new(Item { + fs_path: path.clone(), + lib_path: lib_path.join(identifier.clone()), + info: data, + identifier, + })) + .into(), + )) } else { bail!("did somebody really put a fifo or socket in the library?!") } diff --git a/server/src/routes/ui/style/directorypage.css b/server/src/routes/ui/style/directorypage.css index 8c6d5d9..2773e3c 100644 --- a/server/src/routes/ui/style/directorypage.css +++ b/server/src/routes/ui/style/directorypage.css @@ -1,4 +1,3 @@ - .page.dir { padding: 1em; padding-left: 3em; diff --git a/server/src/routes/ui/style/player.css b/server/src/routes/ui/style/player.css index b34653e..8d3488f 100644 --- a/server/src/routes/ui/style/player.css +++ b/server/src/routes/ui/style/player.css @@ -42,9 +42,11 @@ input[type="radio"] { width: 1.2em; height: 1.2em; border-radius: 8px; + padding: 2px; background-clip: content-box; border: 2px solid var(--font); background-color: transparent; + transition: background-color 0.3s; } input[type="radio"]:checked { background-color: var(--accent-light); -- cgit v1.2.3-70-g09d2