diff --git a/Cargo.lock b/Cargo.lock index d649631..7276675 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -86,6 +86,12 @@ dependencies = [ "memchr", ] +[[package]] +name = "bytes" +version = "0.6.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "e0dcbc35f504eb6fc275a6d20e4ebcda18cf50d40ba6fabff8c711fa16cb3b16" + [[package]] name = "cassowary" version = "0.3.0" @@ -945,6 +951,8 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "720ba21c25078711bf456d607987d95bce90f7c3bea5abe1db587862e7a1e87c" dependencies = [ "autocfg", + "bytes", + "memchr", "pin-project-lite", "slab", "tokio-macros", diff --git a/Cargo.toml b/Cargo.toml index 4cba9b2..1f511e6 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -26,4 +26,4 @@ tui = { version = "0.13", default-features = false, features = ["crossterm"] } [dependencies.tokio] version = "0.3" default-features = false -features = ["sync", "rt", "macros", "time"] +features = ["sync", "rt", "macros", "time", "fs", "io-util"] diff --git a/src/main.rs b/src/main.rs index 43bf48d..abc334d 100644 --- a/src/main.rs +++ b/src/main.rs @@ -12,13 +12,12 @@ use std::{ error::Error as StdError, ffi, fmt, fmt::Write as FmtWrite, - io::Write as IoWrite, path::{Path, PathBuf}, result::Result as StdResult, sync::Arc, time::Duration, }; -use tokio::{task, time::interval}; +use tokio::{fs, io::AsyncWriteExt, task, time::interval}; #[derive(Clone, Debug, GBoxed)] #[gboxed(type_name = "GBoxErrorWrapper")] @@ -189,10 +188,11 @@ async fn main_loop(ui_queue: ui::MsgQueue) -> Result<()> { args.rel_from_path.display() )); - let mut log_file = match std::fs::OpenOptions::new() + let mut log_file = match fs::OpenOptions::new() .create(true) .append(true) .open(log_path) + .await { Ok(log_file) => log_file, Err(fs_err) => { @@ -204,12 +204,15 @@ async fn main_loop(ui_queue: ui::MsgQueue) -> Result<()> { let mut err_str = String::new(); write!(&mut err_str, "{:?}\n", err).context("TODO")?; - log_file.write_all(err_str.as_ref()).map_err(|fs_err| { - err.context(format!( - "Unable to write transcoding error to log file (fs error: {})", - fs_err - )) - })?; + log_file + .write_all(err_str.as_ref()) + .map_err(|fs_err| { + err.context(format!( + "Unable to write transcoding error to log file (fs error: {})", + fs_err + )) + }) + .await?; msg_queue.push(ui::Msg::TaskError { id: i }); } @@ -362,11 +365,12 @@ async fn transcode( let bus = pipeline.get_bus().context("pipe get bus")?; - std::fs::create_dir_all( + fs::create_dir_all( to_path .parent() .with_context(|| format!("could not get parent dir for {}", to_path.display()))?, - )?; + ) + .await?; rm_file_on_err(&to_path_tmp, async { pipeline @@ -475,7 +479,7 @@ async fn transcode( .set_state(gstreamer::State::Null) .context("Unable to set the pipeline to the `Null` state")?; - std::fs::rename(&to_path_tmp, &to_path)?; + fs::rename(&to_path_tmp, &to_path).await?; Ok(()) }) @@ -487,7 +491,7 @@ where F: Future>, { match f.await { - Err(err) => match std::fs::remove_file(path) { + Err(err) => match fs::remove_file(path).await { Ok(..) => Err(err), Err(fs_err) if fs_err.kind() == std::io::ErrorKind::NotFound => Err(err), Err(fs_err) => {