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 deTranslation = {
ratingLabel: 'Bewertung',
enlargeCover: 'Vergrößern',
},
entityRating: {
albumShort: 'Albumbewertung',
artistShort: 'Künstlerbewertung',
albumAriaLabel: 'Albumbewertung',
artistAriaLabel: 'Künstlerbewertung',
saveFailed: 'Bewertung konnte nicht gespeichert werden.',
},
artistDetail: {
back: 'Zurück',
albums: 'Alben',
@@ -512,6 +519,18 @@ export const deTranslation = {
shortcutNativeFullscreen: 'Nativer Vollbildmodus',
tabSystem: 'System',
tabGeneral: 'Allgemein',
ratingsSectionTitle: 'Bewertungen',
ratingsSkipStarTitle: 'Überspringen für 1 Stern',
ratingsSkipStarDesc:
'Bei N Überspringen hintereinander: Titel auf 1 Stern setzen. Nur für zuvor unbewertete Titel.',
ratingsSkipStarThresholdLabel: 'Überspringer bis 1★',
ratingsMixFilterTitle: 'Filter nach Bewertung',
ratingsMixFilterDesc:
'Inhalte mit niedriger Bewertung in {{mix}} und {{albums}} filtern. Erneut auf den gewählten Stern klicken, um die Schwelle zu deaktivieren.',
ratingsMixMinSong: 'Titel',
ratingsMixMinAlbum: 'Alben',
ratingsMixMinArtist: 'Interpreten',
ratingsMixMinThresholdAria: 'Mindest-Sterne: {{label}}',
backupTitle: 'Backup & Wiederherstellung',
backupExport: 'Einstellungen exportieren',
backupExportDesc: 'Speichert alle Einstellungen, Serverprofile, Last.fm-Konfiguration, Theme, EQ und Tastenkürzel in eine .psybkp-Datei. Passwörter werden im Klartext gespeichert — Datei sicher aufbewahren.',
@@ -550,6 +569,11 @@ export const deTranslation = {
seekbarBar: 'Balken',
seekbarThick: 'Dicker Balken',
seekbarSegmented: 'Segmentiert',
seekbarNeon: 'Neonröhre',
seekbarPulsewave: 'Pulswelle',
seekbarParticletrail: 'Partikel-Spur',
seekbarLiquidfill: 'Flüssigkeit',
seekbarRetrotape: 'Retro-Band',
},
changelog: {
modalTitle: 'Was ist neu',