diff --git a/src/services/livestream_archiver.rs b/src/services/livestream_archiver.rs index db79519..a4bd622 100644 --- a/src/services/livestream_archiver.rs +++ b/src/services/livestream_archiver.rs @@ -88,8 +88,14 @@ impl LivestreamArchiver { async fn create_nfo_file(&self, video_path: &PathBuf, date: &NaiveDateTime) -> Result<()> { let nfo_path = video_path.with_extension("nfo"); + // Check if NFO file already exists + if nfo_path.exists() { + println!("NFO file already exists at: {}", nfo_path.display()); + return Ok(()); + } + // Format the full title with date including year - let full_title = format!("Divine Worship Service - RTSDA | {}", + let full_title = format!("Afternoon Program - RTSDA | {}", date.format("%B %-d %Y") // Format like "December 28 2024" ); @@ -102,7 +108,7 @@ impl LivestreamArchiver { {} {} {} - Divine Worship Service + Afternoon Program "#, full_title, date.format("%Y").to_string(), @@ -146,12 +152,53 @@ impl LivestreamArchiver { // Create directories if they don't exist tokio::fs::create_dir_all(&month_dir).await?; - // Create output path with .mp4 extension - let output_file = month_dir.join(format!( - "Divine Worship Service - RTSDA | {}{}", - date.format("%B %d %Y"), - ".mp4" + // Check for existing files + let divine_worship_file = month_dir.join(format!( + "Divine Worship Service - RTSDA | {}.mp4", + date.format("%B %d %Y") )); + let afternoon_program_file = month_dir.join(format!( + "Afternoon Program - RTSDA | {}.mp4", + date.format("%B %d %Y") + )); + + // Determine which filename to use + let (base_filename, nfo_title, nfo_tag) = if !divine_worship_file.exists() { + ( + format!("Divine Worship Service - RTSDA | {}", date.format("%B %d %Y")), + format!("Divine Worship Service - RTSDA | {}", date.format("%B %-d %Y")), + "Divine Worship Service" + ) + } else if !afternoon_program_file.exists() { + ( + format!("Afternoon Program - RTSDA | {}", date.format("%B %d %Y")), + format!("Afternoon Program - RTSDA | {}", date.format("%B %-d %Y")), + "Afternoon Program" + ) + } else { + // Both exist, add suffix to Afternoon Program + let mut suffix = 1; + let mut test_file = month_dir.join(format!( + "Afternoon Program - RTSDA | {} ({}).mp4", + date.format("%B %d %Y"), + suffix + )); + while test_file.exists() { + suffix += 1; + test_file = month_dir.join(format!( + "Afternoon Program - RTSDA | {} ({}).mp4", + date.format("%B %d %Y"), + suffix + )); + } + ( + format!("Afternoon Program - RTSDA | {} ({})", date.format("%B %d %Y"), suffix), + format!("Afternoon Program - RTSDA | {} ({})", date.format("%B %-d %Y"), suffix), + "Afternoon Program" + ) + }; + + let output_file = month_dir.join(format!("{}.mp4", base_filename)); println!("Converting to AV1 and saving to: {}", output_file.display()); @@ -168,7 +215,7 @@ impl LivestreamArchiver { .arg("-maxrate").arg("12M") .arg("-bufsize").arg("24M") .arg("-c:a").arg("copy") - .arg("-y") + .arg("-n") // Never overwrite existing files .arg(&output_file) .status() .await?; @@ -179,7 +226,28 @@ impl LivestreamArchiver { // Create NFO file println!("Creating NFO file..."); - self.create_nfo_file(&output_file, &date).await?; + let nfo_content = format!(r#" + + {} + LiveStreams + {} + {} + {} + {} + {} + {} +"#, + nfo_title, + date.format("%Y").to_string(), + date.format("%m%d").to_string(), + date.format("%Y-%m-%d"), + date.format("%Y"), + date.format("%m%d"), + nfo_tag + ); + + let nfo_path = output_file.with_extension("nfo"); + tokio::fs::write(nfo_path, nfo_content).await?; println!("Successfully converted {} to AV1 and created NFO", path.display());