diff options
author | metamuffin <metamuffin@disroot.org> | 2023-01-21 18:57:21 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2023-01-21 18:57:21 +0100 |
commit | d80bdf60b1b68fee752b7dfca4b89231015987ff (patch) | |
tree | dadfe609f7e63ecb766acd8bbe8d44df8d362def /server/src/library.rs | |
parent | bf578cf3b131bc430152f952a37a99d449df8d83 (diff) | |
download | jellything-d80bdf60b1b68fee752b7dfca4b89231015987ff.tar jellything-d80bdf60b1b68fee752b7dfca4b89231015987ff.tar.bz2 jellything-d80bdf60b1b68fee752b7dfca4b89231015987ff.tar.zst |
multiple source files
Diffstat (limited to 'server/src/library.rs')
-rw-r--r-- | server/src/library.rs | 44 |
1 files changed, 27 insertions, 17 deletions
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<Self> { 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<Arc<Node>> { @@ -86,9 +88,12 @@ impl Node { path: PathBuf, mut lib_path: PathBuf, root: bool, - ) -> anyhow::Result<Arc<Node>> { + ) -> anyhow::Result<Option<Arc<Node>>> { 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::<anyhow::Result<Vec<_>>>()?; - 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?!") } |