made db work on relative paths
This commit is contained in:
parent
b38d0cc149
commit
5ef9f17436
8 changed files with 74 additions and 23 deletions
|
|
@ -4,14 +4,20 @@ use html_tag::HtmlTag;
|
|||
use shellexpand;
|
||||
use std::{
|
||||
fs::{self, DirEntry},
|
||||
path::Path,
|
||||
ops::Deref,
|
||||
path::{Path, PathBuf},
|
||||
};
|
||||
#[tauri::command]
|
||||
pub async fn dir_tree_html(app_handle: tauri::AppHandle, filter: Vec<String>) -> String {
|
||||
if let Some(basepath) = get_basepath(app_handle.clone()) {
|
||||
add_dir_tree_node(&app_handle, &Path::new(&basepath), &filter)
|
||||
.await
|
||||
.to_html()
|
||||
add_dir_tree_node(
|
||||
&app_handle,
|
||||
&Path::new(&basepath),
|
||||
&filter,
|
||||
&Path::new(&basepath).parent().unwrap_or(Path::new("/")),
|
||||
)
|
||||
.await
|
||||
.to_html()
|
||||
} else {
|
||||
String::new()
|
||||
}
|
||||
|
|
@ -20,6 +26,7 @@ async fn add_dir_tree_node(
|
|||
app_handle: &tauri::AppHandle,
|
||||
path: &Path,
|
||||
filter: &Vec<String>,
|
||||
parent_path: &Path,
|
||||
) -> HtmlTag {
|
||||
let mut html = HtmlTag::new("div")
|
||||
.with_class("filetree-node")
|
||||
|
|
@ -48,24 +55,36 @@ async fn add_dir_tree_node(
|
|||
),
|
||||
),
|
||||
);
|
||||
|
||||
if let Ok(entries) = fs::read_dir(path) {
|
||||
for dir_entry_res in entries {
|
||||
if let Ok(dir_entry) = dir_entry_res {
|
||||
if let Ok(metadata) = fs::metadata(dir_entry.path()) {
|
||||
let absolute_path = dir_entry.path();
|
||||
let relative_path =
|
||||
absolute_path.strip_prefix(parent_path).unwrap_or_else(|_| {
|
||||
log::error!("{:?}:{:?}", path, parent_path);
|
||||
Path::new("/")
|
||||
});
|
||||
if metadata.is_file() {
|
||||
add_file(
|
||||
app_handle,
|
||||
path.to_string_lossy().as_ref(),
|
||||
relative_path.to_string_lossy().as_ref(),
|
||||
dir_entry.file_name().to_string_lossy().as_ref(),
|
||||
)
|
||||
.await;
|
||||
html.add_child(div_from_dir_entry(&dir_entry))
|
||||
html.add_child(div_from_dir_entry(&absolute_path, &relative_path))
|
||||
} else if metadata.is_dir() {
|
||||
html.add_child(
|
||||
Box::pin(add_dir_tree_node(app_handle, &dir_entry.path(), &filter))
|
||||
.await
|
||||
.with_attribute("style", "visibility: hidden; height: 0px;"), // .with_style("visibility", "hidden")
|
||||
// .with_style("height", "0px"),
|
||||
Box::pin(add_dir_tree_node(
|
||||
app_handle,
|
||||
&dir_entry.path(),
|
||||
&filter,
|
||||
parent_path,
|
||||
))
|
||||
.await
|
||||
.with_attribute("style", "visibility: hidden; height: 0px;"), // .with_style("visibility", "hidden")
|
||||
// .with_style("height", "0px"),
|
||||
);
|
||||
}
|
||||
}
|
||||
|
|
@ -75,14 +94,13 @@ async fn add_dir_tree_node(
|
|||
return html;
|
||||
}
|
||||
|
||||
fn div_from_dir_entry(dir_entry: &DirEntry) -> HtmlTag {
|
||||
fn div_from_dir_entry(absolute_path: &Path, relative_path: &Path) -> HtmlTag {
|
||||
let mut file_div = HtmlTag::new("div")
|
||||
.with_class("filetree-node")
|
||||
.with_id(&format!("{}", dir_entry.path().to_string_lossy()))
|
||||
.with_id(&format!("{}", absolute_path.to_string_lossy()))
|
||||
.with_attribute("style", "visibility: hidden; height: 0px;");
|
||||
let mut file_button = HtmlTag::new("button").with_class("filetree-file-button");
|
||||
match dir_entry
|
||||
.path()
|
||||
match relative_path
|
||||
.extension()
|
||||
.unwrap_or_default()
|
||||
.to_string_lossy()
|
||||
|
|
@ -102,7 +120,14 @@ fn div_from_dir_entry(dir_entry: &DirEntry) -> HtmlTag {
|
|||
),
|
||||
};
|
||||
|
||||
file_button.add_child(HtmlTag::new("a").with_body(&dir_entry.file_name().to_string_lossy()));
|
||||
file_button.add_child(
|
||||
HtmlTag::new("a").with_body(
|
||||
&relative_path
|
||||
.file_name()
|
||||
.unwrap_or_default()
|
||||
.to_string_lossy(),
|
||||
),
|
||||
);
|
||||
file_div.add_child(file_button);
|
||||
return file_div;
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue