1
0
mirror of https://github.com/kunkunsh/kunkun.git synced 2025-04-26 00:19:17 +00:00
Huakun Shen 4a05c5a475
[Feature] Implement UI template worker command ()
* feat: add ui worker command loading code (not working yet)

* feat: add unocss

* feat: add-dev-extension page

* feat: implemented list view template

* feat: implement list view detail view width, add demo extension for dev

* fix: resize listview, add metadata component

* fix: metadata tag component  background color

* feat: implement boolean (checkbox), date fields for form template

* feat: support default, optional, placeholder for form fields

* feat: implemented form view Select Field

* feat: markdown view

* feat: fixed a markdown schema type error

* fix: markdown styling

* feat: implement action panel for UI worker template list view

* format: format all

* chore: bump desktop version

* fix: fix search term bind in list view
2024-11-08 15:12:20 -05:00

93 lines
3.9 KiB
Rust

use std::path::PathBuf;
use tauri::{AppHandle, Manager};
pub fn tauri_file_server(
app: &AppHandle,
request: tauri::http::Request<Vec<u8>>,
extension_folder_path: PathBuf,
dist: Option<String>,
) -> tauri::http::Response<Vec<u8>> {
let path = &request.uri().path()[1..]; // skip the first /
let path = urlencoding::decode(path).unwrap().to_string();
let mut url_file_path = extension_folder_path;
match dist {
Some(dist) => url_file_path = url_file_path.join(dist),
None => {}
}
url_file_path = url_file_path.join(path);
// check if it's file or directory, if file and exist, return file, if directory, return index.html, if neither, check .html
if url_file_path.is_file() {
// println!("1st case url_file_path: {:?}", url_file_path);
let mime_type = match url_file_path.extension().and_then(std::ffi::OsStr::to_str) {
Some("js") => "application/javascript",
Some("html") => "text/html",
Some("css") => "text/css",
_ => "application/octet-stream",
};
return tauri::http::Response::builder()
.status(tauri::http::StatusCode::OK)
.header("Access-Control-Allow-Origin", "*")
.header("Content-Type", mime_type)
.body(std::fs::read(url_file_path).unwrap())
.unwrap();
} else if url_file_path.is_dir() {
/*
* there are two cases:
* 1. directory conntains a index.html, then return index.html
* 2. directory has a sibling file with .html extension, return that file
*/
let index_html_path = url_file_path.join("index.html");
if index_html_path.is_file() {
// println!("2nd case index_html_path: {:?}", index_html_path);
return tauri::http::Response::builder()
.status(tauri::http::StatusCode::OK)
.header("Access-Control-Allow-Origin", "*")
.body(std::fs::read(index_html_path).unwrap())
.unwrap();
}
// check if path has a sibling file with .html extension
// get folder name
match url_file_path.file_name() {
Some(folder_name) => {
let parent_path = url_file_path.parent().unwrap();
let html_file_path =
parent_path.join(format!("{}.html", folder_name.to_str().unwrap()));
if html_file_path.is_file() {
// println!("3rd case html_file_path: {:?}", html_file_path);
return tauri::http::Response::builder()
.status(tauri::http::StatusCode::OK)
.header("Access-Control-Allow-Origin", "*")
.body(std::fs::read(html_file_path).unwrap())
.unwrap();
}
}
None => {}
}
// check if url_file_path's parent has a file with name folder_name.html
} else {
// file not found, check if end with .html works. if path ends with /, remove the / and check if adding .html makes a file
let mut path_str = url_file_path.to_str().unwrap().to_string();
if path_str.ends_with("/") {
path_str.pop();
}
path_str.push_str(".html");
let path_str = PathBuf::from(path_str);
if path_str.is_file() {
// println!("4rd case path_str: {:?}", path_str);
return tauri::http::Response::builder()
.status(tauri::http::StatusCode::OK)
.header("Access-Control-Allow-Origin", "*")
.body(std::fs::read(path_str).unwrap())
.unwrap();
}
}
// println!("5th case file not found");
return tauri::http::Response::builder()
.status(tauri::http::StatusCode::NOT_FOUND)
.header("Access-Control-Allow-Origin", "*")
.body("file not found".as_bytes().to_vec())
.unwrap();
}