From 18024dbc62bd1f633248b11a422e9b978abd53e2 Mon Sep 17 00:00:00 2001 From: Alexander Date: Sun, 17 May 2026 18:23:15 +0200 Subject: [PATCH] fix(cli): wire OverlayReader into mount command The metadata overlay feature was implemented but not connected to the CLI daemon. Files were being served with original metadata instead of synthesized headers from the database. - Import OverlayReader from musicfs-cache - Create OverlayReader with db, format_registry, and reader - Call .with_overlay() on MusicFs builder Tested: ffprobe now shows modified metadata from database updates. --- crates/musicfs-cli/src/main.rs | 21 +++++++++++++++------ 1 file changed, 15 insertions(+), 6 deletions(-) diff --git a/crates/musicfs-cli/src/main.rs b/crates/musicfs-cli/src/main.rs index 2cec762..807d906 100644 --- a/crates/musicfs-cli/src/main.rs +++ b/crates/musicfs-cli/src/main.rs @@ -4,8 +4,8 @@ use anyhow::{Context, Result}; use clap::{Parser, Subcommand}; use metadata::MetadataCommand; use musicfs_cache::{ - Database, FlacHandler, FormatHandlerRegistry, FormatLayout, Id3v2Handler, RenameError, - TrashedFilter, TreeBuilder, VirtualTree, + Database, FlacHandler, FormatHandlerRegistry, FormatLayout, Id3v2Handler, OverlayReader, + RenameError, TrashedFilter, TreeBuilder, VirtualTree, }; use musicfs_cas::{CasConfig, CasStore, ContentFetcher, FileReader}; use musicfs_core::{FileId, FileMeta, LoggingConfig, OriginId, RealPath, VirtualPath}; @@ -263,7 +263,7 @@ fn run_mount(config: musicfs_core::Config) -> Result<()> { let runtime = tokio::runtime::Runtime::new().context("Failed to create Tokio runtime")?; let handle = runtime.handle().clone(); - let (tree, reader, db) = runtime.block_on(async { + let (tree, reader, db, overlay_reader) = runtime.block_on(async { info!(mountpoint = ?config.mount_point, "Mount configuration"); info!("Cache directory: {:?}", config.cache_dir); @@ -364,9 +364,16 @@ fn run_mount(config: musicfs_core::Config) -> Result<()> { let tree = Arc::new(RwLock::new(tree)); - let reader = Arc::new(FileReader::with_fetcher(store, fetcher)); + let reader = Arc::new(FileReader::with_fetcher(store.clone(), fetcher)); - Ok::<_, anyhow::Error>((tree, reader, db)) + // Create overlay reader for metadata synthesis + let overlay_reader = Arc::new(OverlayReader::new( + db.clone(), + format_registry, + reader.clone(), + )); + + Ok::<_, anyhow::Error>((tree, reader, db, overlay_reader)) })?; check_stale_mount(&config.mount_point)?; @@ -384,7 +391,9 @@ fn run_mount(config: musicfs_core::Config) -> Result<()> { let tree_for_restore = tree.clone(); let db_for_restore = db.clone(); - let fs = MusicFs::with_reader(tree, reader, handle.clone()).with_db(db); + let fs = MusicFs::with_reader(tree, reader, handle.clone()) + .with_db(db) + .with_overlay(overlay_reader); info!("Mounting filesystem at {:?}", config.mount_point);