feat(ratings): Subsonic entity ratings and StarRating UX

Probe OpenSubsonic after connect; persist album/artist ratings via setRating when supported. Add shared StarRating (repeat same star to clear, pulse and shrink animations, hover freeze after clear). Widen tracklist duration column and bump narrow saved widths in localStorage. Use StarRating in AlbumHeader, track lists, and playlist rows.
This commit is contained in:
Maxim Isaev
2026-04-08 01:08:41 +03:00
parent c1624342d3
commit 705c80ef07
20 changed files with 462 additions and 61 deletions
+7
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',
+7
View File
@@ -146,6 +146,13 @@ export const enTranslation = {
ratingLabel: 'Rating',
enlargeCover: 'Enlarge',
},
entityRating: {
albumShort: 'Album rating',
artistShort: 'Artist rating',
albumAriaLabel: 'Album rating',
artistAriaLabel: 'Artist rating',
saveFailed: 'Could not save rating.',
},
artistDetail: {
back: 'Back',
albums: 'Albums',
+7
View File
@@ -145,6 +145,13 @@ export const frTranslation = {
ratingLabel: 'Note',
enlargeCover: 'Agrandir',
},
entityRating: {
albumShort: 'Note de lalbum',
artistShort: 'Note de lartiste',
albumAriaLabel: 'Note de lalbum',
artistAriaLabel: 'Note de lartiste',
saveFailed: 'Impossible denregistrer la note.',
},
artistDetail: {
back: 'Retour',
albums: 'Albums',
+7
View File
@@ -145,6 +145,13 @@ export const nbTranslation = {
ratingLabel: 'Vurdering',
enlargeCover: 'Forstørr',
},
entityRating: {
albumShort: 'Albumvurdering',
artistShort: 'Artistvurdering',
albumAriaLabel: 'Albumvurdering',
artistAriaLabel: 'Artistvurdering',
saveFailed: 'Kunne ikke lagre vurderingen.',
},
artistDetail: {
back: 'Tilbake',
albums: 'Album',
+7
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',
+7
View File
@@ -147,6 +147,13 @@ export const ruTranslation = {
ratingLabel: 'Оценка',
enlargeCover: 'Увеличить обложку',
},
entityRating: {
albumShort: 'Оценка альбома',
artistShort: 'Оценка исполнителя',
albumAriaLabel: 'Оценка альбома',
artistAriaLabel: 'Оценка исполнителя',
saveFailed: 'Не удалось сохранить оценку.',
},
artistDetail: {
back: 'Назад',
albums: 'Альбомы',
+7
View File
@@ -145,6 +145,13 @@ export const zhTranslation = {
ratingLabel: '评分',
enlargeCover: '放大',
},
entityRating: {
albumShort: '专辑评分',
artistShort: '艺人评分',
albumAriaLabel: '专辑评分',
artistAriaLabel: '艺人评分',
saveFailed: '无法保存评分。',
},
artistDetail: {
back: '返回',
albums: '专辑',