From aea2a9a7badf8e54c149eead1ceb457175eb38da Mon Sep 17 00:00:00 2001 From: Iaphetes Date: Tue, 14 Jan 2025 07:09:57 +0100 Subject: [PATCH] Worked on search --- src-tauri/src/lib.rs | 3 +- src-tauri/src/search.rs | 73 +++++++++++++++++++++++++++++++++++++---- src/filesearch.js | 22 +++++++++++++ src/index.html | 1 + src/styles.css | 2 +- 5 files changed, 92 insertions(+), 9 deletions(-) diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 4bf24f8..db41ff4 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -4,6 +4,7 @@ mod search; use std::env; use tauri_plugin_fs::FsExt; +use search::search_files; use file_tree::dir_tree_html; use markdown_parser::parse_markdown; @@ -21,7 +22,7 @@ pub fn run() { Ok(()) }) - .invoke_handler(tauri::generate_handler![dir_tree_html, parse_markdown]) + .invoke_handler(tauri::generate_handler![dir_tree_html, parse_markdown, search_files]) .run(tauri::generate_context!()) .expect("error while running tauri application"); } diff --git a/src-tauri/src/search.rs b/src-tauri/src/search.rs index 2947c33..fd3cf03 100644 --- a/src-tauri/src/search.rs +++ b/src-tauri/src/search.rs @@ -1,21 +1,80 @@ +use html_tag::HtmlTag; +use std::{ + fs::{self, DirEntry}, + path::Path, +}; -pub fn search_files(searchstring: &str, filter: Vec<&str>) -> HtmlTag{ +#[tauri::command] +pub fn search_files(basepath: &str, searchstring: &str, filter: Vec) -> Vec { + match shellexpand::full(basepath) { + Ok(path) => _search_files(&Path::new(&path.into_owned()), searchstring, &filter), + Err(_) => Vec::new(), + } +} + +fn search_result_div_from_dir_entry(dir_entry: &DirEntry) -> HtmlTag { + let mut file_div = HtmlTag::new("div") + .with_class("filetree-node") + .with_id(&format!("{}", dir_entry.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() + .extension() + .unwrap_or_default() + .to_string_lossy() + .to_string() + .as_str() + { + "md" => file_button.add_child( + HtmlTag::new("img") + .with_class("filetree-icon") + .with_attribute("src", "images/markdown.svg"), + ), + + _ => file_button.add_child( + HtmlTag::new("img") + .with_class("filetree-icon") + .with_attribute("src", "images/file.svg"), + ), + }; + + file_button.add_child(HtmlTag::new("a").with_body(&dir_entry.file_name().to_string_lossy())); + file_div.add_child(file_button); + return file_div; +} +pub fn _search_files(path: &Path, searchstring: &str, filter: &Vec) -> Vec { + let mut search_results: Vec = Vec::new(); 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()) { if metadata.is_file() { - html.add_child(div_from_dir_entry(&dir_entry)) + if filter.contains( + &dir_entry + .path() + .extension() + .unwrap_or_default() + .to_string_lossy() + .to_string() + ) { + let div =search_result_div_from_dir_entry(&dir_entry).to_html(); + println!("{:?}", div); + search_results + .push(div); + } } else if metadata.is_dir() { - html.add_child( - add_dir_tree_node(&dir_entry.path(), &filter) - .with_attribute("style", "visibility: hidden; height: 0px;"), // .with_style("visibility", "hidden") - // .with_style("height", "0px"), - ); + search_results.append(&mut _search_files( + &dir_entry.path(), + searchstring, + &filter, + )); } } } } } + println!("{:?}", search_results); + return search_results; } diff --git a/src/filesearch.js b/src/filesearch.js index e69de29..2091070 100644 --- a/src/filesearch.js +++ b/src/filesearch.js @@ -0,0 +1,22 @@ +const { convertFileSrc, invoke } = window.__TAURI__.core; + +var search_input = document.getElementById("file-search-dialog-input"); +search_input.addEventListener('input', () => { + search_files(); +}); + + +function search_files(){ + var text = search_input.innerText; + invoke("search_files", { searchstring: text, basepath: "$HOME/Documents/Knowledgebase", filter: ["md"]}).then( + (ret) => { + var tag_id = document.getElementById('rendered_markdown'); + var result_div = ""; + ret.array.forEach(element => { + result_div += element; + }); + tag_id.innerHTML = "
".concat("", result_div).concat("", "
"); + // tag_id.innerHTML = assetUrl.concat(" ", ' \n Girl in a jacket')) + } + ); +} diff --git a/src/index.html b/src/index.html index 83af55e..14ce23f 100644 --- a/src/index.html +++ b/src/index.html @@ -10,6 +10,7 @@ + diff --git a/src/styles.css b/src/styles.css index f03cbc0..c185988 100644 --- a/src/styles.css +++ b/src/styles.css @@ -10,7 +10,7 @@ --sidebar-width: 3em; --filetree-width: 10em; font-family: Avenir, Helvetica, Arial, sans-serif; - font-size: 16px; + font-size: 30px; line-height: 24px; color: #f6f6f6;