- DirectoryScannerPlugin: recursive directory walk via FileStoragePort
- Computes SHA256 checksums, classifies media by extension
- Registers each file via RegisterAssetHandler (triggers AssetIngested → extract_metadata pipeline)
- Reads library_path_id from job payload, looks up volume + path
- Seeded plugin + scan_directory pipeline
- Trigger via POST /jobs with { job_type: "ScanDirectory", payload: { library_path_id: "..." } }
59 lines
1.8 KiB
Rust
59 lines
1.8 KiB
Rust
use crate::plugin_registry::InMemoryPluginRegistry;
|
|
use crate::plugins::{
|
|
DirectoryScannerPlugin, MetadataExtractorPlugin, NoOpPlugin, SidecarSyncPlugin,
|
|
ThumbnailGeneratorPlugin,
|
|
};
|
|
use application::catalog::RegisterAssetHandler;
|
|
use domain::ports::{
|
|
EventPublisher, MetadataExtractorPort, SidecarWriterPort, ThumbnailGeneratorPort,
|
|
};
|
|
use std::sync::Arc;
|
|
|
|
use super::Repos;
|
|
|
|
pub fn build_plugin_registry(
|
|
repos: &Repos,
|
|
file_storage: Arc<dyn domain::ports::FileStoragePort>,
|
|
sidecar_writer: Arc<dyn SidecarWriterPort>,
|
|
extractor: Arc<dyn MetadataExtractorPort>,
|
|
thumbnail_gen: Arc<dyn ThumbnailGeneratorPort>,
|
|
event_pub: Arc<dyn EventPublisher>,
|
|
) -> InMemoryPluginRegistry {
|
|
let mut registry = InMemoryPluginRegistry::new();
|
|
|
|
registry.register(Arc::new(NoOpPlugin));
|
|
registry.register(Arc::new(MetadataExtractorPlugin::new(
|
|
repos.asset.clone(),
|
|
file_storage.clone(),
|
|
repos.metadata.clone(),
|
|
extractor,
|
|
)));
|
|
registry.register(Arc::new(ThumbnailGeneratorPlugin::new(
|
|
repos.asset.clone(),
|
|
file_storage.clone(),
|
|
repos.derivative.clone(),
|
|
thumbnail_gen,
|
|
)));
|
|
|
|
let register_handler = Arc::new(RegisterAssetHandler::new(
|
|
repos.asset.clone(),
|
|
repos.duplicate.clone(),
|
|
event_pub,
|
|
));
|
|
registry.register(Arc::new(DirectoryScannerPlugin::new(
|
|
repos.volume.clone(),
|
|
repos.library_path.clone(),
|
|
file_storage.clone(),
|
|
register_handler,
|
|
)));
|
|
|
|
let export_handler = Arc::new(application::sidecar::ExportSidecarHandler::new(
|
|
repos.metadata.clone(),
|
|
repos.sidecar.clone(),
|
|
sidecar_writer,
|
|
));
|
|
registry.register(Arc::new(SidecarSyncPlugin::new(export_handler)));
|
|
|
|
registry
|
|
}
|