diff options
author | Benedikt Peetz <benedikt.peetz@b-peetz.de> | 2025-06-28 16:33:14 +0200 |
---|---|---|
committer | Benedikt Peetz <benedikt.peetz@b-peetz.de> | 2025-06-28 16:33:14 +0200 |
commit | 72d33c13a8a715a5a12d804464d887c2376701ad (patch) | |
tree | 98b75ea34317b0ee798f24f29da74e4a4f26b59d | |
parent | fix(yt/select/cmds/add): Use the correct names for the download type (diff) | |
download | yt-72d33c13a8a715a5a12d804464d887c2376701ad.zip |
fix(yt/select/split): Also use persist the selection file
This makes re-editing after a selection failure possible.
-rw-r--r-- | crates/yt/src/select/mod.rs | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/crates/yt/src/select/mod.rs b/crates/yt/src/select/mod.rs index 135bd76..2478b76 100644 --- a/crates/yt/src/select/mod.rs +++ b/crates/yt/src/select/mod.rs @@ -12,8 +12,8 @@ use std::{ collections::HashMap, env::{self}, - fs::{self, File}, - io::{BufRead, BufReader, BufWriter, Write}, + fs::{self, File, OpenOptions}, + io::{BufRead, BufReader, BufWriter, Read, Seek, Write}, iter, path::Path, string::String, @@ -134,12 +134,25 @@ pub async fn select_split( paths.sort(); - let mut processed = 0; + let mut persistent_file = OpenOptions::new() + .read(true) + .write(true) + .truncate(true) + .open(&app.config.paths.last_selection_path) + .context("Failed to open persistent selection file")?; + for path in paths { - let read_file = File::open(path)?; - processed = process_file(app, &read_file, processed).await?; + let mut read_file = File::open(path)?; + + let mut buffer = vec![]; + read_file.read_to_end(&mut buffer)?; + persistent_file.write_all(&buffer)?; } + persistent_file.rewind()?; + + let processed = process_file(app, &persistent_file).await?; + info!("Processed {processed} records."); temp_dir.close().context("Failed to close the temp dir")?; Ok(()) @@ -167,7 +180,7 @@ pub async fn select_file(app: &App, done: bool, use_last_selection: bool) -> Res fs::copy(temp_file.path(), &app.config.paths.last_selection_path) .context("Failed to persist selection file")?; - let processed = process_file(app, &read_file, 0).await?; + let processed = process_file(app, &read_file).await?; info!("Processed {processed} records."); Ok(()) @@ -220,10 +233,10 @@ async fn write_videos_to_file(app: &App, file: &File, videos: &[Video]) -> Resul Ok(()) } -async fn process_file(app: &App, file: &File, processed: i64) -> Result<i64> { +async fn process_file(app: &App, file: &File) -> Result<i64> { let reader = BufReader::new(file); - let mut line_number = -processed; + let mut line_number = 0; for line in reader.lines() { let line = line.context("Failed to read a line")?; |