From 8ff3649f3425dfb59beccd3d8336ad2cd39b11d6 Mon Sep 17 00:00:00 2001 From: VirtualHotBar <96966978+VirtualHotBar@users.noreply.github.com> Date: Sun, 2 Jun 2024 21:50:54 +0800 Subject: [PATCH] fix:modifyAlistConfig --- src-tauri/build.rs | 2 +- src-tauri/src/fs.rs | 29 ++++++++++++++++++++++++++++- src-tauri/src/lib.rs | 6 ++++-- src-tauri/src/utils.rs | 6 +----- src/utils/alist/alist.ts | 8 ++++---- 5 files changed, 38 insertions(+), 13 deletions(-) diff --git a/src-tauri/build.rs b/src-tauri/build.rs index cb15162..80cb036 100644 --- a/src-tauri/build.rs +++ b/src-tauri/build.rs @@ -295,7 +295,7 @@ use serde_json::{Map, Value}; use std::fs::File; use std::io::{self, Write}; use tauri_build::Attributes; -use tokio::fs::read_to_string; // 此处使用futures_util +//use tokio::fs::read_to_string; // 此处使用futures_util #[tokio::main] pub async fn download_with_progress( url: &str, diff --git a/src-tauri/src/fs.rs b/src-tauri/src/fs.rs index 68d7834..5899332 100644 --- a/src-tauri/src/fs.rs +++ b/src-tauri/src/fs.rs @@ -1,4 +1,4 @@ -use std::path::{Path, PathBuf}; +use std::{fs, path::{Path, PathBuf}}; use tauri::Manager as _; @@ -27,3 +27,30 @@ pub fn fs_make_dir(app: tauri::AppHandle, path: &str) -> anyhow_tauri:: std::fs::create_dir_all(path).map_err(anyhow::Error::from)?; Ok(()) } + + + +use serde_json::{to_string_pretty, Value}; + +#[tauri::command] +pub fn read_json_file(path: Option<&str>) -> Result { + let content_result = fs::read_to_string(PathBuf::from(path.unwrap())); + match content_result { + Ok(content) => match serde_json::from_str(&content) { + Ok(config) => Ok(config), + Err(json_error) => Err(format!("Failed to parse JSON from file: {}", json_error)), + }, + Err(io_error) => Err(format!("Failed to read file: {}", io_error)), + } +} + +#[tauri::command] +pub async fn write_json_file(config_data: Value, path: Option<&str>) -> Result<(), String> { + let pretty_config = to_string_pretty(&config_data) + .map_err(|json_error| format!("Failed to serialize JSON: {}", json_error))?; + + fs::write(PathBuf::from(path.unwrap()), pretty_config) + .map_err(|io_error| format!("Failed to write file: {}", io_error))?; + + Ok(()) +} diff --git a/src-tauri/src/lib.rs b/src-tauri/src/lib.rs index 96ddbb6..8cc7c3a 100644 --- a/src-tauri/src/lib.rs +++ b/src-tauri/src/lib.rs @@ -5,7 +5,7 @@ use std::path::PathBuf; use std::{env, fs::File, ops::Deref, path::Path, sync::RwLock}; use config::Config; -use fs::{fs_exist_dir, fs_make_dir}; +use fs::{fs_exist_dir, fs_make_dir,read_json_file,write_json_file}; use locale::Locale; use tray::Tray; @@ -194,7 +194,9 @@ pub fn init() -> anyhow::Result<()> { get_temp_dir, fs_exist_dir, fs_make_dir, - restart_self + restart_self, + read_json_file, + write_json_file ]) .setup(|app| { if let Some(file) = File::open(app.app_config_file()).ok() { diff --git a/src-tauri/src/utils.rs b/src-tauri/src/utils.rs index d11131b..bad8bae 100644 --- a/src-tauri/src/utils.rs +++ b/src-tauri/src/utils.rs @@ -1,14 +1,10 @@ #[cfg(target_os = "windows")] -use tauri::{Manager, Runtime}; #[cfg(target_os = "windows")] use std::error::Error; #[cfg(target_os = "windows")] use std::fs; -use std::{ - io::{self, Write}, - path::PathBuf, -}; +use std::io::{self, Write}; pub fn get_available_ports(count: usize) -> Vec { use std::net::TcpListener; diff --git a/src/utils/alist/alist.ts b/src/utils/alist/alist.ts index 2cb40f9..0e99bb9 100644 --- a/src/utils/alist/alist.ts +++ b/src/utils/alist/alist.ts @@ -20,10 +20,10 @@ async function setAlistPass(pass:string){ } async function modifyAlistConfig(rewriteData:any=alistInfo.alistConfig){ - // const path = alistDataDir()+'config.json' - // const oldAlistConfig =await invoke('read_config_file',{path}) as object - // const newAlistConfig = {...oldAlistConfig, ...rewriteData} - // await invoke('write_config_file',{configData:newAlistConfig,path:path}) + const path = alistDataDir()+'config.json' + const oldAlistConfig =await invoke('read_json_file',{path}) as object + const newAlistConfig = {...oldAlistConfig, ...rewriteData} + await invoke('write_json_file',{configData:newAlistConfig,path:path}) } async function addAlistInRclone(){