diff options
Diffstat (limited to 'server/src/library.rs')
-rw-r--r-- | server/src/library.rs | 19 |
1 files changed, 14 insertions, 5 deletions
diff --git a/server/src/library.rs b/server/src/library.rs index c46937a..4bded8a 100644 --- a/server/src/library.rs +++ b/server/src/library.rs @@ -22,6 +22,7 @@ pub struct Directory { #[derive(Debug, Clone)] pub struct Item { + pub fs_path: PathBuf, pub lib_path: PathBuf, pub identifier: String, pub data: ItemInfo, @@ -49,12 +50,18 @@ impl Library { } impl Node { - pub fn get_directory(&self) -> anyhow::Result<&Directory> { + pub fn get_directory(&self) -> anyhow::Result<Arc<Directory>> { match self { - Node::Directory(d) => Ok(d), + Node::Directory(d) => Ok(d.clone()), Node::Item(_) => bail!("not a directory"), } } + pub fn get_item(&self) -> anyhow::Result<Arc<Item>> { + match self { + Node::Item(i) => Ok(i.clone()), + Node::Directory(_) => bail!("not an item"), + } + } pub fn title(&self) -> &str { match self { Node::Directory(d) => &d.data.name, @@ -86,9 +93,10 @@ impl Node { .read_dir()? .filter_map(|e| { let e = e.unwrap(); - eprintln!("{:?}",e.path()); - eprintln!("{:?}",e.path().extension()); - if e.path().extension() == Some(OsStr::new("json")) + eprintln!("{:?}", e.path()); + eprintln!("{:?}", e.path().extension()); + if (e.path().extension() == Some(OsStr::new("json")) + && e.path().file_name() != Some(OsStr::new("directory.json"))) || e.metadata().unwrap().is_dir() { Some(e.path()) @@ -121,6 +129,7 @@ impl Node { .unwrap() .to_string(); Ok(Node::Item(Arc::new(Item { + fs_path: path.clone(), lib_path: lib_path.join(identifier.clone()), data, identifier, |