Added a basic check to make sure we don't try to transcode a partially written file
	
		
			
	
		
	
	
		
	
		
			All checks were successful
		
		
	
	
		
			
				
	
				ci/woodpecker/push/woodpecker Pipeline was successful
				
			
		
		
	
	
				
					
				
			
		
			All checks were successful
		
		
	
	ci/woodpecker/push/woodpecker Pipeline was successful
				
			This commit is contained in:
		@@ -1,11 +1,11 @@
 | 
				
			|||||||
use log4rs;
 | 
					use log4rs;
 | 
				
			||||||
use config::Config;
 | 
					use config::Config;
 | 
				
			||||||
use repository::Repository;
 | 
					use transcoder::repository::Repository;
 | 
				
			||||||
use transcoder::Transcoder;
 | 
					use transcoder::transcoder::Transcoder;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
mod config;
 | 
					mod config;
 | 
				
			||||||
mod repository;
 | 
					 | 
				
			||||||
mod transcoder;
 | 
					mod transcoder;
 | 
				
			||||||
 | 
					mod util;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
fn main() {
 | 
					fn main() {
 | 
				
			||||||
  // initialize the log4rs logger
 | 
					  // initialize the log4rs logger
 | 
				
			||||||
 
 | 
				
			|||||||
							
								
								
									
										2
									
								
								src/transcoder/mod.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										2
									
								
								src/transcoder/mod.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,2 @@
 | 
				
			|||||||
 | 
					pub mod repository;
 | 
				
			||||||
 | 
					pub mod transcoder;
 | 
				
			||||||
@@ -4,7 +4,8 @@ use std::{thread, time};
 | 
				
			|||||||
use log::{info};
 | 
					use log::{info};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
use crate::config::Config;
 | 
					use crate::config::Config;
 | 
				
			||||||
use crate::repository::Repository;
 | 
					use crate::util::io;
 | 
				
			||||||
 | 
					use super::repository::Repository;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
pub struct Transcoder {
 | 
					pub struct Transcoder {
 | 
				
			||||||
  config: Config,
 | 
					  config: Config,
 | 
				
			||||||
@@ -31,6 +32,12 @@ impl Transcoder {
 | 
				
			|||||||
        info!("There were no files found in ingest to transcode; skipping run.");
 | 
					        info!("There were no files found in ingest to transcode; skipping run.");
 | 
				
			||||||
      } else {
 | 
					      } else {
 | 
				
			||||||
        for i in ingest_files {
 | 
					        for i in ingest_files {
 | 
				
			||||||
 | 
					          let ingest_path = Path::new(&self.repository.ingest_dir).join(&i);
 | 
				
			||||||
 | 
					          if io::is_file_locked(&ingest_path.to_str().unwrap()) {
 | 
				
			||||||
 | 
					            info!("{} is currently open in another program; skipping it for this run.", &i);
 | 
				
			||||||
 | 
					            continue;
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
          // copy the file to the archive
 | 
					          // copy the file to the archive
 | 
				
			||||||
          self.repository.archive_file(&i);
 | 
					          self.repository.archive_file(&i);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
							
								
								
									
										16
									
								
								src/util/io.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								src/util/io.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,16 @@
 | 
				
			|||||||
 | 
					use std::process;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// checks whether a file is currently open in another program (e.g. still being written)
 | 
				
			||||||
 | 
					pub fn is_file_locked(filepath: &str) -> bool {
 | 
				
			||||||
 | 
					  let cmd = process::Command::new("/usr/bin/lsof")
 | 
				
			||||||
 | 
					    .arg(filepath)
 | 
				
			||||||
 | 
					    .output()
 | 
				
			||||||
 | 
					    .expect("Failed to execute command");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  let results = &String::from_utf8_lossy(&cmd.stdout);
 | 
				
			||||||
 | 
					  if results.contains(filepath) {
 | 
				
			||||||
 | 
					    return true;
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  return false;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										1
									
								
								src/util/mod.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								src/util/mod.rs
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1 @@
 | 
				
			|||||||
 | 
					pub mod io;
 | 
				
			||||||
		Reference in New Issue
	
	Block a user