diff options
author | metamuffin <metamuffin@disroot.org> | 2023-08-01 15:24:09 +0200 |
---|---|---|
committer | metamuffin <metamuffin@disroot.org> | 2023-08-01 15:24:09 +0200 |
commit | 551e62a6012284823d6b22a9257c3fae07de7fd9 (patch) | |
tree | 506c20d23a73b57acaa19f3abfa00ec5cc16a315 /server/src/import.rs | |
parent | dbb8c1c2f0035ea41224dec319a996b89e13ec84 (diff) | |
download | jellything-551e62a6012284823d6b22a9257c3fae07de7fd9.tar jellything-551e62a6012284823d6b22a9257c3fae07de7fd9.tar.bz2 jellything-551e62a6012284823d6b22a9257c3fae07de7fd9.tar.zst |
store parent node and show "go up" button
Diffstat (limited to 'server/src/import.rs')
-rw-r--r-- | server/src/import.rs | 19 |
1 files changed, 12 insertions, 7 deletions
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<Vec<String>> { +pub fn import_path( + path: PathBuf, + db: &Database, + parent: Option<String>, +) -> anyhow::Result<Vec<String>> { 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<Vec<String>> 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::<anyhow::Result<Vec<_>>>()? .into_iter() .flatten() @@ -40,12 +45,10 @@ pub fn import_path(path: PathBuf, db: &Database) -> anyhow::Result<Vec<String>> 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<Vec<String>> } 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<Vec<String>> .strip_suffix(".jelly") .unwrap() .to_string(); + info!("insert {identifier}"); + data.public.parent = parent; db.node.insert(&identifier, &data)?; Ok(vec![identifier]) } else { |