Add asynchronous file loading and load default file
This commit is contained in:
parent
dd34f09958
commit
b36d3fafc6
24
src/main.rs
24
src/main.rs
|
@ -1,12 +1,15 @@
|
||||||
|
use std::{io, path::Path, sync::Arc};
|
||||||
|
|
||||||
use iced::{
|
use iced::{
|
||||||
executor,
|
executor,
|
||||||
widget::{column, text, text_editor},
|
widget::{column, text, text_editor},
|
||||||
Application, Command, Element, Result, Settings, Theme,
|
Application, Command, Element, Settings, Theme,
|
||||||
};
|
};
|
||||||
|
|
||||||
#[derive(Debug, Clone)]
|
#[derive(Debug, Clone)]
|
||||||
enum Message {
|
enum Message {
|
||||||
Edit(text_editor::Action),
|
Edit(text_editor::Action),
|
||||||
|
FileOpened(Result<Arc<String>, io::ErrorKind>),
|
||||||
}
|
}
|
||||||
|
|
||||||
struct BookManagerApp {
|
struct BookManagerApp {
|
||||||
|
@ -24,7 +27,10 @@ impl Application for BookManagerApp {
|
||||||
Self {
|
Self {
|
||||||
book_content: text_editor::Content::new(),
|
book_content: text_editor::Content::new(),
|
||||||
},
|
},
|
||||||
Command::none(),
|
Command::perform(
|
||||||
|
load_file(format!("{}/src/main.rs", env!("CARGO_MANIFEST_DIR"))),
|
||||||
|
Message::FileOpened,
|
||||||
|
),
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -35,6 +41,11 @@ impl Application for BookManagerApp {
|
||||||
fn update(&mut self, message: Self::Message) -> Command<Self::Message> {
|
fn update(&mut self, message: Self::Message) -> Command<Self::Message> {
|
||||||
match message {
|
match message {
|
||||||
Message::Edit(action) => self.book_content.perform(action),
|
Message::Edit(action) => self.book_content.perform(action),
|
||||||
|
Message::FileOpened(result) => {
|
||||||
|
if let Ok(content) = result {
|
||||||
|
self.book_content = text_editor::Content::with_text(&content);
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Command::none()
|
Command::none()
|
||||||
|
@ -55,6 +66,13 @@ impl Application for BookManagerApp {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() -> Result {
|
fn main() -> iced::Result {
|
||||||
BookManagerApp::run(Settings::default())
|
BookManagerApp::run(Settings::default())
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async fn load_file(path: impl AsRef<Path>) -> Result<Arc<String>, io::ErrorKind> {
|
||||||
|
tokio::fs::read_to_string(path)
|
||||||
|
.await
|
||||||
|
.map(Arc::new)
|
||||||
|
.map_err(|error| error.kind())
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue