Files
k-photos/libertas_worker/src/plugin_manager.rs

39 lines
1.1 KiB
Rust

use std::sync::Arc;
use libertas_core::{
models::Media,
plugins::{MediaProcessorPlugin, PluginContext},
};
use crate::plugins::exif_reader::ExifReaderPlugin;
pub struct PluginManager {
plugins: Vec<Arc<dyn MediaProcessorPlugin>>,
}
impl PluginManager {
pub fn new() -> Self {
let mut plugins: Vec<Arc<dyn MediaProcessorPlugin>> = 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<PluginContext>) {
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);
}
}