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.
This commit is contained in:
Alexander
2026-05-17 18:23:15 +02:00
parent b0c41e3fa0
commit 18024dbc62
+15 -6
View File
@@ -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);