about summary refs log tree commit diff stats
diff options
context:
space:
mode:
authorBenedikt Peetz <benedikt.peetz@b-peetz.de>2025-06-28 16:33:14 +0200
committerBenedikt Peetz <benedikt.peetz@b-peetz.de>2025-06-28 16:33:14 +0200
commit72d33c13a8a715a5a12d804464d887c2376701ad (patch)
tree98b75ea34317b0ee798f24f29da74e4a4f26b59d
parentfix(yt/select/cmds/add): Use the correct names for the download type (diff)
downloadyt-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.rs29
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")?;