39 lines
1.1 KiB
Rust
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);
|
|
}
|
|
}
|