The table is pinned to Unicode 15.0.0 for matching parity and its generator
is no longer in the repository. Say so in the header and mark the file as
generated for linguist.
Rust is the only backend and routes the app on Android and iOS. Rewrite
the migration-era crate, script and comment wording that implied Go still
runs, and note in each crate doc that Go mentions describe the retired
backend whose observable behavior remains a compatibility contract.
Remove tokio from spotiflac-extensions and thiserror and the direct hyper
entry from spotiflac-network (hyper stays resolved through hyper-util).
Move roxmltree, rusqlite and libc into workspace.dependencies. libc already
resolves to 0.2.190, so the workspace pin uses that exact version. No
resolved version or enabled feature changes.
The boundaries table left out the two audioplayers forks and the encrypted
Discord SDK, and the test prerequisites implied SPOTIFLAC_TEST_FFMPEG applies
to every ffmpeg test when only the automix renderer test reads it.
Drop the gomod renovate rule, the stray em dash in crowdin.yml and the migration wording in check_rust_backend.sh. Rename the SMB fixture servers so test_*.py discovery no longer implies unit tests, and describe supported_locales.dart as hand-maintained since its generator never existed.
Generated l10n sources are gitignored, there is no Gradle wrapper, some tests need ffmpeg, and the test layers and boundary directories were undocumented.
The rust job rebuilt the Android libraries that the android job already builds through Gradle. Drop it, cache Cargo for the rust, rust-ios and android jobs, widen the rust path filter to the fixtures the Rust tests read, default workflow tokens to contents: read, and delete the inert auto-tag workflow.
The month-year DateFormat was rebuilt for every loaded row and every
fast-scroller drag label; it is now cached per locale tag. Constant-pattern
RegExp objects built per call (or per word) are now static or top-level.
Nothing read parentPageController, parentPageIndex or nextPageIndex, and the
Library tab root watched showExtensionStore only to compute them, so toggling
that setting rebuilt the tab for nothing. No caller passed the fast scroller
onDragStart/onDragEnd callbacks.
Applying a preset replaced every setting, so built-in presets silently
turned automatic headroom, the limiter and the compressor back on and
reset balance. Presets now carry only the curve, preamp, bass and treble.
The active preset is matched on the same fields, so it no longer shows as
Custom once headroom is off.
The desktop search CGI now answers HTTP 500 for every query, so QQ Music
never reached its lyrics. Search through the suggestion box instead, rank
title and artist matches, and check the length of the best few through
the song detail CGI so a live or remixed cut is skipped. The lyrics CGI
is unchanged and still answers.
Explain the default provider order and Search online in the FAQ, mention
SpotiFLAC-Mobile Lyrics in the Lyrics feature, and credit lrc.red,
LyricsPlus and BetterLyrics.
The empty lyrics page offers Search online, which asks the enabled lyrics
providers in their configured order. The result is shown in the player
only and never written to the file; a late result is dropped after the
track changes, and a miss says so.
Add two keyless providers that serve Apple Music TTML: lrc.red, matched by
recording, and BetterLyrics, which answers songs it has already cached.
TTML is read into the first-party Apple line structure, so vocal sides,
backing groups, word timing, translations and romanization share one eLRC
formatter. The XML depth guard moves to core so both readers use it.
SpotiFLAC-Mobile Lyrics becomes its own provider instead of a fallback
inside Apple Music. New defaults are Apple Music, lrc.red, SpotiFLAC-Mobile
Lyrics, LyricsPlus and LRCLIB. Migration 13 moves untouched defaults to the
new list and keeps the former fallback right after Apple Music in custom
orders. Replace the dead LyricsPlus Workers mirror.
Replace the banner with animated light and dark SVGs built from M3
Expressive shapes, give every section heading a shaped icon, and swap the
four screenshots for a themed showcase of Home, Library, Now Playing and
Equalizer. Rewrite the FAQ for the current app and trim API Credits to a
single line of services the app still uses.
Without a feed, the Material Home now greets in its header with a
prompt picked once per launch, keeps import and paste out of the
resting search field, and fills the page with Continue listening,
player shortcuts, Recently added tracks from the whole Library and the
most played tracks of the last four weeks.
Replace the old screenshots with Home, Library, Now Playing and
Equalizer captures, add the Featured on FMHY badge, redraw the release,
Crowdin and Telegram badges as Material Expressive light and dark
images, and replace the Extensions section with a two-column feature
table using colored shape icons.
Single-choice sheet rows still built their own checkmark trailing, with
inconsistent colours, so only three rows used AppSheetOption.choice. Move
the remaining sixteen rows to it, drop the now unused colour plumbing, and
remove a duplicate Semantics wrapper that announced selection twice.