SpotiFLAC-Mobile/go_backend
zarzet f37e4704a6 feat: add ReplayGain scanning, APEv2 tag support, and fix metadata bugs
ReplayGain (track + album):
- Scan track loudness via FFmpeg ebur128 filter (-18 LUFS reference)
- Duration-weighted power-mean for album gain computation
- Support for FLAC (native Vorbis), MP3 (ID3v2 TXXX), Opus, M4A
- Album RG auto-finalizes when all album tracks complete
- Retryable gate: blocks finalization while failed/skipped items exist
- SAF support: lossy album RG writes via temp file + writeTempToSaf
- New embedReplayGain setting (off by default) with UI toggle

APEv2 tag support:
- Full APEv2 reader/writer with header+items+footer format
- Merge-based editing with override keys for explicit deletions
- Binary cover art embedding (Cover Art (Front) item)
- Library scanner support for .ape/.wv/.mpc files
- ReplayGain fields in APE read/write/edit pipeline

Bug fixes (26):
- setArtistComments wiping fields on empty string value
- APEv2 rewrite corrupting files with ID3v1 trailer
- APE edit replacing entire tag instead of merging
- ReplayGain lost on manual MP3/Opus/M4A metadata edit
- Editor metadata save losing custom tags (preserveMetadata)
- Album RG accumulator not cleaned on queue mutation
- Album gain using unweighted mean instead of power-mean
- writeAlbumReplayGainTags return value silently ignored
- SAF album RG writing to deleted temp path
- Cancelled tracks polluting album gain computation
- APE ReplayGain not wired end-to-end
- APE field deletion not working in merge
- APE cover edit was a no-op
- Album RG duplicate entries on retry
- APE apeKeysFromFields missing track/disc/lyrics mappings
- Album RG entries purged by removeItem before computation
- FFmpeg converters discarding empty metadata values
- _appendVorbisArtistEntries skipping empty value (null vs empty)
- Album RG write-back fails for SAF lossy files
- Album RG partial finalization on failed tracks
- FLAC ClearEmpty flag destroying tags on partial callers
- clearCompleted not retriggering album RG checks
- ReadFileMetadata MP3/Ogg missing label and copyright
- Cover embed on CUE split destroying split artist tags
- Album RG gain format inconsistent (missing + prefix)
- FLAC reader/editor missing tag aliases (ALBUMARTIST, LABEL, etc.)
- dart:math log shadowed by logger.dart export
2026-04-13 23:32:14 +07:00
..
ape_tags.go feat: add ReplayGain scanning, APEv2 tag support, and fix metadata bugs 2026-04-13 23:32:14 +07:00
audio_metadata.go feat: add ReplayGain scanning, APEv2 tag support, and fix metadata bugs 2026-04-13 23:32:14 +07:00
audio_metadata_cache_test.go feat: add stable cover cache keys, Qobuz album-search fallback, metadata filters and extended sort options 2026-04-13 23:32:12 +07:00
audio_metadata_mp3_test.go feat: add audio quality analysis widget and fix USLT lyrics detection 2026-03-26 01:11:29 +07:00
cancel.go refactor: more code cleanup 2026-01-17 10:04:21 +07:00
cover.go chore: clean up codebase 2026-03-26 16:43:56 +07:00
cue_parser.go feat: add resolve API with SongLink fallback, fix multi-artist tags (#288), and cleanup 2026-04-13 23:32:14 +07:00
deezer.go feat: add resolve API with SongLink fallback, fix multi-artist tags (#288), and cleanup 2026-04-13 23:32:14 +07:00
deezer_download.go feat: add resolve API with SongLink fallback, fix multi-artist tags (#288), and cleanup 2026-04-13 23:32:14 +07:00
duplicate.go feat: add resolve API with SongLink fallback, fix multi-artist tags (#288), and cleanup 2026-04-13 23:32:14 +07:00
exports.go feat: add ReplayGain scanning, APEv2 tag support, and fix metadata bugs 2026-04-13 23:32:14 +07:00
exports_deezer_metadata_test.go feat: improve auto-fill track resolution in Edit Metadata sheet 2026-03-15 21:12:47 +07:00
exports_test.go feat: add field selection dialog for bulk re-enrich metadata 2026-04-13 23:32:13 +07:00
extension_manager.go Extension OAuth + store: flatten action JSON, open auth URLs, spotiflac:// callback 2026-04-12 02:40:31 -06:00
extension_manifest.go feat: move Amazon Music to extension, fix Deezer download timeout 2026-03-08 04:15:28 +07:00
extension_providers.go feat: add resolve API with SongLink fallback, fix multi-artist tags (#288), and cleanup 2026-04-13 23:32:14 +07:00
extension_providers_test.go feat: add Qobuz and Tidal as built-in metadata search providers with priority-based unified search 2026-03-14 16:07:41 +07:00
extension_runtime.go feat: track byte-level download progress for extension downloads 2026-03-27 21:58:01 +07:00
extension_runtime_auth.go feat: add resolve API with SongLink fallback, fix multi-artist tags (#288), and cleanup 2026-04-13 23:32:14 +07:00
extension_runtime_ffmpeg.go feat: move Amazon Music to extension, fix Deezer download timeout 2026-03-08 04:15:28 +07:00
extension_runtime_file.go feat: track byte-level download progress for extension downloads 2026-03-27 21:58:01 +07:00
extension_runtime_http.go feat: move Amazon Music to extension, fix Deezer download timeout 2026-03-08 04:15:28 +07:00
extension_runtime_matching.go feat: move Amazon Music to extension, fix Deezer download timeout 2026-03-08 04:15:28 +07:00
extension_runtime_polyfills.go feat: add resolve API with SongLink fallback, fix multi-artist tags (#288), and cleanup 2026-04-13 23:32:14 +07:00
extension_runtime_storage.go feat: move Amazon Music to extension, fix Deezer download timeout 2026-03-08 04:15:28 +07:00
extension_runtime_storage_test.go chore: rebuild dev history without streaming-era commits 2026-02-27 13:48:44 +07:00
extension_runtime_utils.go feat: move Amazon Music to extension, fix Deezer download timeout 2026-03-08 04:15:28 +07:00
extension_settings.go feat: move Amazon Music to extension, fix Deezer download timeout 2026-03-08 04:15:28 +07:00
extension_store.go feat: add resolve API with SongLink fallback, fix multi-artist tags (#288), and cleanup 2026-04-13 23:32:14 +07:00
extension_test.go refactor: continue code cleanup 2026-02-04 10:42:51 +07:00
extension_timeout.go feat: move Amazon Music to extension, fix Deezer download timeout 2026-03-08 04:15:28 +07:00
filename.go feat: advanced filename templates, low-RAM device profiling, responsive artist UI, and project site 2026-02-13 21:39:08 +07:00
filename_test.go feat: advanced filename templates, low-RAM device profiling, responsive artist UI, and project site 2026-02-13 21:39:08 +07:00
go.mod fix: prefer local file for cover/lyrics save and update build dependencies 2026-04-13 23:32:13 +07:00
go.sum fix: prefer local file for cover/lyrics save and update build dependencies 2026-04-13 23:32:13 +07:00
httputil.go feat: add resolve API with SongLink fallback, fix multi-artist tags (#288), and cleanup 2026-04-13 23:32:14 +07:00
httputil_ios.go feat: add resolve API with SongLink fallback, fix multi-artist tags (#288), and cleanup 2026-04-13 23:32:14 +07:00
httputil_utls.go feat: add resolve API with SongLink fallback, fix multi-artist tags (#288), and cleanup 2026-04-13 23:32:14 +07:00
idhs.go feat: add resolve API with SongLink fallback, fix multi-artist tags (#288), and cleanup 2026-04-13 23:32:14 +07:00
library_scan.go feat: add ReplayGain scanning, APEv2 tag support, and fix metadata bugs 2026-04-13 23:32:14 +07:00
library_scan_test.go feat: add stable cover cache keys, Qobuz album-search fallback, metadata filters and extended sort options 2026-04-13 23:32:12 +07:00
logbuffer.go feat: add resolve API with SongLink fallback, fix multi-artist tags (#288), and cleanup 2026-04-13 23:32:14 +07:00
lyrics.go feat: add resolve API with SongLink fallback, fix multi-artist tags (#288), and cleanup 2026-04-13 23:32:14 +07:00
lyrics_apple.go feat: add resolve API with SongLink fallback, fix multi-artist tags (#288), and cleanup 2026-04-13 23:32:14 +07:00
lyrics_musixmatch.go feat: add resolve API with SongLink fallback, fix multi-artist tags (#288), and cleanup 2026-04-13 23:32:14 +07:00
lyrics_netease.go feat: add resolve API with SongLink fallback, fix multi-artist tags (#288), and cleanup 2026-04-13 23:32:14 +07:00
lyrics_qqmusic.go feat: add resolve API with SongLink fallback, fix multi-artist tags (#288), and cleanup 2026-04-13 23:32:14 +07:00
metadata.go feat: add ReplayGain scanning, APEv2 tag support, and fix metadata bugs 2026-04-13 23:32:14 +07:00
metadata_artist_tags_test.go feat: add artist tag mode setting with split Vorbis support and improve library scan progress 2026-04-13 23:32:12 +07:00
metadata_types.go refactor: remove legacy API clients, Yoinkify fallback, and unused lyrics provider 2026-04-13 23:32:13 +07:00
mobile_deps.go feat: move Amazon Music to extension, fix Deezer download timeout 2026-03-08 04:15:28 +07:00
output_fd.go feat: add multi-select to library folders, batch playlist picker, and Go backend FD safety 2026-02-19 18:27:14 +07:00
output_fd_unix.go feat: add multi-select to library folders, batch playlist picker, and Go backend FD safety 2026-02-19 18:27:14 +07:00
output_fd_windows.go feat: add multi-select to library folders, batch playlist picker, and Go backend FD safety 2026-02-19 18:27:14 +07:00
parallel.go feat: move Amazon Music to extension, fix Deezer download timeout 2026-03-08 04:15:28 +07:00
progress.go perf: optimize polling, progress caching, staggered warmup, and snapshot-based library scan 2026-03-14 16:52:33 +07:00
qobuz.go fix: remove deleted local library item from provider state after file deletion 2026-04-13 23:32:14 +07:00
qobuz_test.go feat: add resolve API with SongLink fallback, fix multi-artist tags (#288), and cleanup 2026-04-13 23:32:14 +07:00
ratelimit.go feat: move Amazon Music to extension, fix Deezer download timeout 2026-03-08 04:15:28 +07:00
romaji.go feat: add resolve API with SongLink fallback, fix multi-artist tags (#288), and cleanup 2026-04-13 23:32:14 +07:00
songlink.go feat: add resolve API with SongLink fallback, fix multi-artist tags (#288), and cleanup 2026-04-13 23:32:14 +07:00
songlink_test.go feat: add resolve API with SongLink fallback, fix multi-artist tags (#288), and cleanup 2026-04-13 23:32:14 +07:00
tidal.go feat: add resolve API with SongLink fallback, fix multi-artist tags (#288), and cleanup 2026-04-13 23:32:14 +07:00
tidal_test.go fix: fix Tidal track resolution, playlist owner info, and improve track provider state 2026-03-14 15:42:21 +07:00
title_match_utils.go feat: add resolve API with SongLink fallback, fix multi-artist tags (#288), and cleanup 2026-04-13 23:32:14 +07:00
title_match_utils_test.go feat: improve track matching 2026-04-13 23:32:11 +07:00