feat(lyrics): add Netease Cloud Music as opt-in fallback source

Netease is queried only when server and LRCLIB both return nothing,
preserving the existing lyrics chain completely. Off by default.

- Rust command `fetch_netease_lyrics` proxies Netease API (CORS bypass)
- `src/api/netease.ts` TypeScript wrapper via invoke
- `authStore.enableNeteaselyrics` toggle (default: false)
- `useLyrics`: Netease fires last in fallback chain when enabled
- Settings toggle in the Lyrics section
- `lyricsSourceNetease` label in LyricsPane
- i18n: all 7 languages (en, de, fr, nl, nb, ru, zh)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Psychotoxical
2026-04-10 15:11:06 +02:00
parent 33a15fd17a
commit 6ffcd6f6fa
13 changed files with 121 additions and 4 deletions
+3 -1
View File
@@ -57,7 +57,9 @@ export default function LyricsPane({ currentTrack }: Props) {
? t('player.lyricsSourceServer')
: source === 'lrclib'
? t('player.lyricsSourceLrclib')
: null;
: source === 'netease'
? t('player.lyricsSourceNetease')
: null;
return (
<div className="lyrics-pane">