feat: real EXIF extraction via adapters-exif crate

- MetadataExtractorPort in domain (bytes → StructuredData)
- adapters-exif: NomExifExtractor using nom-exif, handles EXIF + TrackInfo
- Worker's MetadataExtractorPlugin delegates to port, no longer knows nom-exif
- Filters noisy binary tags (U8Array, Undefined, Unknown)
This commit is contained in:
2026-05-31 20:28:50 +02:00
parent d1c7243f5b
commit 45669ec848
10 changed files with 212 additions and 8 deletions

View File

@@ -1,6 +1,6 @@
use crate::plugin_registry::InMemoryPluginRegistry;
use crate::plugins::{MetadataExtractorPlugin, NoOpPlugin, SidecarSyncPlugin};
use domain::ports::SidecarWriterPort;
use domain::ports::{MetadataExtractorPort, SidecarWriterPort};
use std::sync::Arc;
use super::Repos;
@@ -9,6 +9,7 @@ pub fn build_plugin_registry(
repos: &Repos,
file_storage: Arc<dyn domain::ports::FileStoragePort>,
sidecar_writer: Arc<dyn SidecarWriterPort>,
extractor: Arc<dyn MetadataExtractorPort>,
) -> InMemoryPluginRegistry {
let mut registry = InMemoryPluginRegistry::new();
@@ -17,6 +18,7 @@ pub fn build_plugin_registry(
repos.asset.clone(),
file_storage,
repos.metadata.clone(),
extractor,
)));
let export_handler = Arc::new(application::sidecar::ExportSidecarHandler::new(