feat: implement async methods for saving and opening file
This commit is contained in:
Generated
+10
@@ -3656,6 +3656,15 @@ version = "0.1.1"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "1f3ccbac311fea05f86f61904b462b55fb3df8837a366dfc601a0161d0532f20"
|
||||
|
||||
[[package]]
|
||||
name = "tokio"
|
||||
version = "1.49.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "72a2903cd7736441aac9df9d7688bd0ce48edccaadf181c3b90be801e81d3d86"
|
||||
dependencies = [
|
||||
"pin-project-lite",
|
||||
]
|
||||
|
||||
[[package]]
|
||||
name = "toml_datetime"
|
||||
version = "0.7.5+spec-1.1.0"
|
||||
@@ -4849,6 +4858,7 @@ version = "0.1.0"
|
||||
dependencies = [
|
||||
"iced",
|
||||
"rfd",
|
||||
"tokio",
|
||||
"uuid",
|
||||
]
|
||||
|
||||
|
||||
@@ -6,4 +6,5 @@ edition = "2024"
|
||||
[dependencies]
|
||||
iced = { version = "0.14.0", features = ["image", "markdown", "highlighter"] }
|
||||
rfd = "0.17.1"
|
||||
tokio = { version ="1.49.0", features = ["fs"] }
|
||||
uuid = { version = "1.19.0", features = ["v4"] }
|
||||
|
||||
@@ -3,11 +3,55 @@ use std::{
|
||||
path::PathBuf,
|
||||
};
|
||||
|
||||
use rfd::AsyncFileDialog;
|
||||
use tokio::fs;
|
||||
|
||||
pub async fn open_file() -> Result<(PathBuf, String), String> {
|
||||
let handle_result = AsyncFileDialog::new()
|
||||
.set_directory("/")
|
||||
.pick_file()
|
||||
.await
|
||||
.ok_or(String::from("Dialog cancelled"));
|
||||
|
||||
match handle_result {
|
||||
Ok(handle) => {
|
||||
let path = handle.path().to_owned();
|
||||
let content_result = fs::read_to_string(&path).await.map_err(|e| e.to_string());
|
||||
|
||||
match content_result {
|
||||
Ok(content) => Ok((path, content)),
|
||||
Err(e) => Err(e),
|
||||
}
|
||||
}
|
||||
Err(e) => Err(e),
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn save_file(path: Option<PathBuf>, text: String) -> Result<PathBuf, String> {
|
||||
let save_path = match path {
|
||||
Some(p) => p,
|
||||
None => AsyncFileDialog::new()
|
||||
.set_directory("/")
|
||||
.save_file()
|
||||
.await
|
||||
.ok_or(String::from("Dialog cancelled"))?
|
||||
.path()
|
||||
.to_owned(),
|
||||
};
|
||||
|
||||
let save_result = fs::write(&save_path, text).await.map_err(|e| e.to_string());
|
||||
|
||||
match save_result {
|
||||
Ok(_) => Ok(save_path),
|
||||
Err(err) => Err(err),
|
||||
}
|
||||
}
|
||||
|
||||
pub fn save_file_to_disk(path: PathBuf, text: String) {
|
||||
let save_result = write(path, text);
|
||||
|
||||
match save_result {
|
||||
Ok(_) => {},
|
||||
Ok(_) => {}
|
||||
Err(err) => eprintln!("Error: {}", err),
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user