feat: implement media processing plugins and update repository structure
This commit is contained in:
38
libertas_worker/src/plugin_manager.rs
Normal file
38
libertas_worker/src/plugin_manager.rs
Normal 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);
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user