wallitor/wallitor-gui/src-tauri/src/handler/file.rs

90 lines
2.4 KiB
Rust

use crate::handler::get_absolute_path;
use crate::{reader, VERSION};
use serde::{Deserialize, Serialize};
use serde_json::json;
use std::fs;
use std::path::Path;
use tauri::ipc::Response;
#[tauri::command]
pub async fn get_file(path: String) -> Response {
let p = get_absolute_path(&path);
if let Ok(true) = fs::exists(&p) {
let data: Vec<u8> = fs::read(&p).unwrap();
return tauri::ipc::Response::new(data);
}
tauri::ipc::Response::new(String::from(""))
}
#[tauri::command]
pub async fn read_resource_dir() -> String {
let mut file_map = reader::FileMap::new();
let path = get_absolute_path(&String::from(".\\resource"));
if let Ok(false) = fs::exists(&path) {
fs::create_dir(&path).expect("Can't create dir");
}
file_map
.read_resourse_directory(&path)
.expect("Can't read dir");
serde_json::to_string(&file_map).unwrap()
}
#[tauri::command]
pub async fn del_folder(path: String) -> bool {
let p = Path::new(&path);
if p.starts_with(".\\") {
let folder_path = get_absolute_path(&path);
if folder_path.is_dir() {
if let Ok(true) = fs::exists(&folder_path) {
if fs::remove_dir_all(&folder_path).is_ok() {
return true;
}
}
}
}
false
}
#[derive(Serialize, Deserialize)]
pub struct Settings {
title_bar: String,
auto_start: bool,
auto_pause: bool,
version: String,
}
impl Settings {
fn new() -> Settings {
Settings {
title_bar: String::from("win"),
auto_start: false,
auto_pause: true,
version: String::from(VERSION),
}
}
}
static SETTING_PATH: &str = "./settings.json";
#[tauri::command]
pub async fn get_settings() -> String {
let setting_path = get_absolute_path(&String::from(SETTING_PATH));
if let Ok(file) = fs::read(setting_path) {
let mut settings: Settings = serde_json::from_slice(&file).unwrap();
settings.version = String::from(VERSION);
return json!(settings).to_string();
} else {
set_settings(Settings::new()).await;
return json!(Settings::new()).to_string();
}
}
#[tauri::command]
pub async fn set_settings(settings: Settings) -> bool {
let setting_path = get_absolute_path(&String::from(SETTING_PATH));
if fs::write(setting_path, json!(settings).to_string()).is_ok() {
return true;
}
false
}