use crate::otel::global_tracer; use crate::video::ffmpeg::{Ffmpeg, GifType}; use crate::{is_video, update_media_counts}; use log::{info}; use opentelemetry::trace::{Tracer}; use std::path::{Path, PathBuf}; use std::{fs}; use walkdir::WalkDir; pub mod actors; pub mod ffmpeg; pub async fn generate_video_gifs() { tokio::spawn(async { info!("Starting to make video gifs"); let start = std::time::Instant::now(); let tracer = global_tracer(); tracer.start("creating video gifs"); let gif_base_path = &dotenv::var("GIFS_DIRECTORY").unwrap_or(String::from("gifs")); let gif_directory: &Path = Path::new(gif_base_path); fs::create_dir_all(gif_base_path).expect("There was an issue creating directory"); let files = PathBuf::from(dotenv::var("BASE_PATH").unwrap()); let ffmpeg = Ffmpeg; for file in WalkDir::new(&files) .into_iter() .filter_map(|entry| entry.ok()) .filter(|entry| entry.file_type().is_file()) .filter(is_video) .filter(|entry| { let path = entry.path(); let relative_path = &path.strip_prefix(&files).unwrap(); let thumb_path = Path::new(gif_directory).join(relative_path); let gif_path = thumb_path.with_extension("gif"); !gif_path.exists() }) { let path = file.path(); let relative_path = &path.strip_prefix(&files).unwrap(); let gif_path = Path::new(gif_directory).join(relative_path); let gif_path = gif_path.with_extension("gif"); if let Some(parent_dir) = gif_path.parent() { fs::create_dir_all(parent_dir).unwrap_or_else(|_| panic!("There was an issue creating gif directory {:?}", gif_path)); } info!("Generating gif for {:?}", path); ffmpeg .generate_video_gif( path.to_str().unwrap(), gif_path.to_str().unwrap(), GifType::Overview, ) .await .expect("There was an issue generating the gif"); } info!("Finished making video gifs in {:?}", start.elapsed()); update_media_counts(&files); }); }