diff --git a/yazi-dds/src/state.rs b/yazi-dds/src/state.rs index 13799f8f..dcf23ac7 100644 --- a/yazi-dds/src/state.rs +++ b/yazi-dds/src/state.rs @@ -56,6 +56,7 @@ impl State { return Ok(()); } + fs::create_dir_all(&BOOT.state_dir).await?; let mut buf = BufWriter::new( OpenOptions::new() .write(true) diff --git a/yazi-fm/src/app/commands/quit.rs b/yazi-fm/src/app/commands/quit.rs index 72a9f4ec..27c871bd 100644 --- a/yazi-fm/src/app/commands/quit.rs +++ b/yazi-fm/src/app/commands/quit.rs @@ -1,5 +1,6 @@ use std::ffi::OsString; +use tokio::fs; use yazi_boot::ARGS; use yazi_shared::event::EventQuit; @@ -9,29 +10,29 @@ impl App { pub(crate) fn quit(&mut self, opt: EventQuit) -> ! { self.cx.tasks.shutdown(); self.cx.mgr.shutdown(); - futures::executor::block_on(yazi_dds::shutdown()); - futures::executor::block_on(yazi_dds::STATE.drain()).ok(); - if !opt.no_cwd_file { - self.cwd_to_file(); - } - if let Some(selected) = opt.selected { - self.selected_to_file(selected); - } + futures::executor::block_on(async { + _ = futures::join!( + yazi_dds::shutdown(), + yazi_dds::STATE.drain(), + self.cwd_to_file(opt.no_cwd_file), + self.selected_to_file(opt.selected) + ); + }); Term::goodbye(|| opt.code); } - fn cwd_to_file(&self) { - if let Some(p) = &ARGS.cwd_file { + async fn cwd_to_file(&self, no: bool) { + if let Some(p) = ARGS.cwd_file.as_ref().filter(|_| !no) { let cwd = self.cx.mgr.cwd().as_os_str(); - std::fs::write(p, cwd.as_encoded_bytes()).ok(); + fs::write(p, cwd.as_encoded_bytes()).await.ok(); } } - fn selected_to_file(&self, selected: OsString) { - if let Some(p) = &ARGS.chooser_file { - std::fs::write(p, selected.as_encoded_bytes()).ok(); + async fn selected_to_file(&self, selected: Option) { + if let (Some(s), Some(p)) = (selected, &ARGS.chooser_file) { + fs::write(p, s.as_encoded_bytes()).await.ok(); } } }