feat: implement media processing plugins and update repository structure

This commit is contained in:
2025-11-02 15:40:39 +01:00
parent a5a88c7f33
commit 4427428cf6
14 changed files with 232 additions and 291 deletions

View File

@@ -0,0 +1,38 @@
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);
}
}