From 07031cb564db17b7cd6e271cfed51fb73e121bc0 Mon Sep 17 00:00:00 2001 From: thumb2086 Date: Tue, 25 Nov 2025 23:31:16 +0800 Subject: [PATCH] fix: prevent metadata corruption for weba and flac files - Skip metadata writing for flac files to prevent file corruption - FLAC files have strict header requirements where writing metadata after download can corrupt the sync code and make files unplayable - Update download_manager_provider.dart to check for both weba and flac extensions - Update server/routes/playback.dart to check for both weba and flac extensions - Add explanatory comments documenting why metadata writing is skipped for these formats - Refactor extension checking to use variable assignment for clarity --- lib/provider/download_manager_provider.dart | 6 +++++- lib/provider/server/routes/playback.dart | 6 +++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/lib/provider/download_manager_provider.dart b/lib/provider/download_manager_provider.dart index 0ca99ec1..e06c8053 100644 --- a/lib/provider/download_manager_provider.dart +++ b/lib/provider/download_manager_provider.dart @@ -239,7 +239,11 @@ class DownloadManagerNotifier extends Notifier> { return; } - if (container.getFileExtension() == "weba") return; + // Skip metadata writing for weba and flac to prevent file corruption + // FLAC files have strict header requirements and writing metadata after + // download can corrupt the sync code and make files unplayable + final extension = container.getFileExtension(); + if (extension == "weba" || extension == "flac") return; final imageBytes = await ServiceUtils.downloadImage( (task.track.album.images).asUrlString( diff --git a/lib/provider/server/routes/playback.dart b/lib/provider/server/routes/playback.dart index db6bf8f5..d2244a79 100644 --- a/lib/provider/server/routes/playback.dart +++ b/lib/provider/server/routes/playback.dart @@ -247,7 +247,11 @@ class ServerPlaybackRoutes { await trackPartialCacheFile.rename(trackCacheFile.path); - if (track.qualityPreset!.getFileExtension() == "weba") return; + // Skip metadata writing for weba and flac to prevent file corruption + // FLAC files have strict header requirements and writing metadata after + // download can corrupt the sync code and make files unplayable + final extension = track.qualityPreset!.getFileExtension(); + if (extension == "weba" || extension == "flac") return; final imageBytes = await ServiceUtils.downloadImage( track.query.album.images.asUrlString(