use std::sync::Arc; use libertas_core::{ models::Media, plugins::{MediaProcessorPlugin, PluginContext}, }; use crate::plugins::exif_reader::ExifReaderPlugin; pub struct PluginManager { plugins: Vec>, } impl PluginManager { pub fn new() -> Self { let mut plugins: Vec> = Vec::new(); plugins.push(Arc::new(ExifReaderPlugin)); println!("PluginManager loaded {} plugins", plugins.len()); Self { plugins } } pub async fn process_media(&self, media: &Media, context: &Arc) { println!( "PluginManager processing media: {}", media.original_filename ); for plugin in &self.plugins { println!("Running plugin: {}", plugin.name()); match plugin.process(media, context).await { Ok(data) => println!("Plugin {} succeeded: {}", plugin.name(), data.message), Err(e) => eprintln!("Plugin {} failed: {}", plugin.name(), e), } } println!("PluginManager finished processing media: {}", media.id); } }