diff options
author | metamuffin <metamuffin@disroot.org> | 2023-01-11 18:14:24 +0100 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2023-01-11 18:14:24 +0100 |
commit | 0737008c5c649f0ce33719fb9126b284d76c9807 (patch) | |
tree | 55f3bfe31079269cdec2c00b7be0c29c62c792dd /server/src/library.rs | |
parent | 948700d35f0eddbc2e0fd29548991e687362983d (diff) | |
download | jellything-0737008c5c649f0ce33719fb9126b284d76c9807.tar jellything-0737008c5c649f0ce33719fb9126b284d76c9807.tar.bz2 jellything-0737008c5c649f0ce33719fb9126b284d76c9807.tar.zst |
modularize!
Diffstat (limited to 'server/src/library.rs')
-rw-r--r-- | server/src/library.rs | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/server/src/library.rs b/server/src/library.rs index 0c42a73..f33508f 100644 --- a/server/src/library.rs +++ b/server/src/library.rs @@ -1,5 +1,5 @@ -use crate::metadata::{DirectoryInfo, ItemInfo}; use anyhow::{anyhow, bail, Context, Ok}; +use jellycommon::{DirectoryInfo, ItemInfo}; use std::{ffi::OsStr, fs::File, path::PathBuf, sync::Arc}; pub struct Library { @@ -84,8 +84,16 @@ impl Node { let children = path .read_dir()? - .map(|e| e.unwrap().path()) - .filter(|e| e.extension() != Some(OsStr::new("json"))) + .filter_map(|e| { + let e = e.unwrap(); + if e.path().extension() == Some(OsStr::new("metadata.json")) + || e.metadata().unwrap().is_dir() + { + Some(e.path()) + } else { + None + } + }) .map(|e| { Node::from_path(e.clone(), lib_path.clone(), false) .context(format!("loading {e:?}")) @@ -101,9 +109,7 @@ impl Node { })) .into()) } else if path.is_file() { - let mpath = path.clone().with_extension("metadata.json"); - let datafile = File::open(mpath.clone()) - .context(format!("metadata missing, tried path {mpath:?}"))?; + let datafile = File::open(path.clone()).context("cant load metadata")?; let data: ItemInfo = serde_json::from_reader(datafile).context("invalid metadata")?; let identifier = path .with_extension("") |