feat(seekbar+ratings): 5 new seekbar styles and entity/mix rating system (PR #130)

Seekbar styles (5 new, by Psychotoxical):
- Neon Glow: transparent track, played section as multi-layer glowing neon tube
- Pulse Wave: flat line with animated gaussian sine pulse at playhead (rAF)
- Particle Trail: particles spawn at playhead and drift with glow (rAF)
- Liquid Fill: glass tube fills with liquid and animated wave surface (rAF)
- Retro Tape: two spinning reels connected by tape, shrink/grow with progress (rAF)

Ratings system (PR #130 by cucadmuh):
- Shared StarRating component with pulse/clear animations, disabled/locked states
- Entity ratings for albums and artists via OpenSubsonic probe (setEntityRatingSupport)
- Skip→1★: after N consecutive manual skips, set unrated track to 1★ (persisted per server)
- Mix rating filter: exclude low-rated songs/albums/artists from RandomMix, RandomAlbums, Hero, Home
- Batch refill in fetchRandomMixSongsUntilFull to fill list despite strict filters
- Prefetch artist/album ratings via getArtist/getAlbum for incomplete list payloads
- Settings: new Ratings section for skip threshold and per-axis mix filter stars
- i18n: all 7 languages (en, de, fr, nl, zh, nb, ru)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Psychotoxical
2026-04-08 10:29:21 +02:00
30 changed files with 1806 additions and 126 deletions
+24
View File
@@ -145,6 +145,13 @@ export const nlTranslation = {
ratingLabel: 'Beoordeling',
enlargeCover: 'Vergroten',
},
entityRating: {
albumShort: 'Albumbeoordeling',
artistShort: 'Artiestbeoordeling',
albumAriaLabel: 'Albumbeoordeling',
artistAriaLabel: 'Artiestbeoordeling',
saveFailed: 'Beoordeling opslaan mislukt.',
},
artistDetail: {
back: 'Terug',
albums: 'Albums',
@@ -510,6 +517,18 @@ export const nlTranslation = {
shortcutNativeFullscreen: 'Systeemvolledig scherm',
tabSystem: 'Systeem',
tabGeneral: 'Algemeen',
ratingsSectionTitle: 'Beoordelingen',
ratingsSkipStarTitle: 'Overslaan voor 1 ster',
ratingsSkipStarDesc:
'Na N overslagen op rij: nummer op 1 ster zetten. Alleen voor nummers die nog niet beoordeeld waren.',
ratingsSkipStarThresholdLabel: 'Overslagen voor 1★',
ratingsMixFilterTitle: 'Filter op beoordeling',
ratingsMixFilterDesc:
'Content met lage beoordeling filteren in {{mix}} en {{albums}}. Klik opnieuw op de gekozen ster om de drempel uit te zetten.',
ratingsMixMinSong: 'Nummers',
ratingsMixMinAlbum: 'Albums',
ratingsMixMinArtist: 'Artiesten',
ratingsMixMinThresholdAria: 'Minimum sterren: {{label}}',
backupTitle: 'Back-up & Herstel',
backupExport: 'Instellingen exporteren',
backupExportDesc: 'Slaat alle instellingen, serverprofielen, Last.fm-configuratie, thema, EQ en sneltoetsen op in een .psybkp-bestand. Wachtwoorden worden opgeslagen als leesbare tekst — bewaar het bestand veilig.',
@@ -548,6 +567,11 @@ export const nlTranslation = {
seekbarBar: 'Balk',
seekbarThick: 'Dikke balk',
seekbarSegmented: 'Gesegmenteerd',
seekbarNeon: 'Neon',
seekbarPulsewave: 'Pulsgolf',
seekbarParticletrail: 'Deeltjesspoor',
seekbarLiquidfill: 'Vloeistofbuis',
seekbarRetrotape: 'Retrotape',
},
changelog: {
modalTitle: 'Wat is nieuw',