CRITICAL: Re-add PC sync functionality for original file editing

- Add PC_SYNC_TARGET environment variable support
- Sync original high-quality livestream files to Mac for editing
- Rsync happens after AV1 conversion but sends original file
- Essential workflow feature that was accidentally removed in refactoring
This commit is contained in:
Benjamin Slingo 2025-09-08 12:27:35 -04:00
parent 3cf60dbad1
commit ecea6a851d

View file

@ -14,6 +14,7 @@ pub struct LivestreamArchiver {
nfo_generator: NfoGenerator, nfo_generator: NfoGenerator,
divine_worship_name: String, divine_worship_name: String,
afternoon_program_name: String, afternoon_program_name: String,
pc_sync_target: Option<String>,
} }
impl LivestreamArchiver { impl LivestreamArchiver {
@ -27,6 +28,7 @@ impl LivestreamArchiver {
.unwrap_or_else(|_| "Divine Worship Service - RTSDA".to_string()); .unwrap_or_else(|_| "Divine Worship Service - RTSDA".to_string());
let afternoon_program_name = env::var("AFTERNOON_PROGRAM_NAME") let afternoon_program_name = env::var("AFTERNOON_PROGRAM_NAME")
.unwrap_or_else(|_| "Afternoon Program - RTSDA".to_string()); .unwrap_or_else(|_| "Afternoon Program - RTSDA".to_string());
let pc_sync_target = env::var("PC_SYNC_TARGET").ok();
LivestreamArchiver { LivestreamArchiver {
output_path, output_path,
@ -36,6 +38,7 @@ impl LivestreamArchiver {
nfo_generator, nfo_generator,
divine_worship_name, divine_worship_name,
afternoon_program_name, afternoon_program_name,
pc_sync_target,
} }
} }
@ -86,6 +89,28 @@ impl LivestreamArchiver {
Ok(date) Ok(date)
} }
async fn sync_to_pc(&self, file_path: &PathBuf) -> Result<()> {
if let Some(target) = &self.pc_sync_target {
println!("Syncing original file to PC for editing: {}", file_path.display());
let output = tokio::process::Command::new("rsync")
.arg("-avz")
.arg("--progress")
.arg(file_path)
.arg(target)
.output()
.await?;
if output.status.success() {
println!("Successfully synced {} to {}", file_path.display(), target);
} else {
let stderr = String::from_utf8_lossy(&output.stderr);
return Err(anyhow!("Failed to sync to PC: {}", stderr));
}
}
Ok(())
}
pub async fn process_file(&self, path: PathBuf) -> Result<()> { pub async fn process_file(&self, path: PathBuf) -> Result<()> {
// Only process .mp4 files // Only process .mp4 files
if path.extension().and_then(|ext| ext.to_str()) != Some("mp4") { if path.extension().and_then(|ext| ext.to_str()) != Some("mp4") {
@ -174,6 +199,11 @@ impl LivestreamArchiver {
println!("Successfully converted {} to AV1 and created NFO", path.display()); println!("Successfully converted {} to AV1 and created NFO", path.display());
// Sync the ORIGINAL file to PC for editing
if let Err(e) = self.sync_to_pc(&path).await {
eprintln!("Warning: Failed to sync original file to PC: {}", e);
}
// Clean up the file tracker since we're done with this file // Clean up the file tracker since we're done with this file
self.remove_file_tracker(&path); self.remove_file_tracker(&path);