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
This commit is contained in:
thumb2086 2025-11-25 23:31:16 +08:00
parent b254ab6fe2
commit 07031cb564
2 changed files with 10 additions and 2 deletions

View File

@ -239,7 +239,11 @@ class DownloadManagerNotifier extends Notifier<List<DownloadTask>> {
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(

View File

@ -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(