aboutsummaryrefslogtreecommitdiffstats
path: root/crates
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 /crates
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.
Diffstat (limited to 'crates')
-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")?;