From 551e62a6012284823d6b22a9257c3fae07de7fd9 Mon Sep 17 00:00:00 2001 From: metamuffin Date: Tue, 1 Aug 2023 15:24:09 +0200 Subject: store parent node and show "go up" button --- server/src/import.rs | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) (limited to 'server/src/import.rs') diff --git a/server/src/import.rs b/server/src/import.rs index 72fb399..c8f4f10 100644 --- a/server/src/import.rs +++ b/server/src/import.rs @@ -13,11 +13,15 @@ pub fn import(db: &Database) -> anyhow::Result<()> { info!("clearing node tree"); db.node.clear()?; info!("importing..."); - import_path(CONF.library_path.clone(), db).context("indexing")?; + import_path(CONF.library_path.clone(), db, None).context("indexing")?; Ok(()) } -pub fn import_path(path: PathBuf, db: &Database) -> anyhow::Result> { +pub fn import_path( + path: PathBuf, + db: &Database, + parent: Option, +) -> anyhow::Result> { if path.is_dir() { let mpath = path.join("directory.json"); let children = path.read_dir()?.filter_map(|e| { @@ -30,8 +34,9 @@ pub fn import_path(path: PathBuf, db: &Database) -> anyhow::Result> None } }); + let identifier = path.file_name().unwrap().to_str().unwrap().to_string(); let children = children - .map(|e| import_path(e, db)) + .map(|e| import_path(e, db, Some(identifier.clone()))) .collect::>>()? .into_iter() .flatten() @@ -40,12 +45,10 @@ pub fn import_path(path: PathBuf, db: &Database) -> anyhow::Result> let mut data: Node = serde_json::from_reader(File::open(mpath).context("metadata missing")?)?; - let identifier = path.file_name().unwrap().to_str().unwrap().to_string(); - data.public.children = children; + data.public.parent = parent; info!("insert {identifier}"); db.node.insert(&identifier, &data)?; - Ok(vec![identifier]) } else { Ok(children) @@ -53,7 +56,7 @@ pub fn import_path(path: PathBuf, db: &Database) -> anyhow::Result> } else if path.is_file() { info!("loading item {path:?}"); let datafile = File::open(path.clone()).context("cant load metadata")?; - let data: Node = serde_json::from_reader(datafile).context("invalid metadata")?; + let mut data: Node = serde_json::from_reader(datafile).context("invalid metadata")?; let identifier = path .file_name() .unwrap() @@ -62,7 +65,9 @@ pub fn import_path(path: PathBuf, db: &Database) -> anyhow::Result> .strip_suffix(".jelly") .unwrap() .to_string(); + info!("insert {identifier}"); + data.public.parent = parent; db.node.insert(&identifier, &data)?; Ok(vec![identifier]) } else { -- cgit v1.2.3-70-g09d2