feat(core,web): player queue, play events and web player controller (M3, wip)
- core: PlayQueue with shuffle and repeat, PlayAttempt counting only time actually played, EventBuffer with batching and backoff, uuidv7 - web: Player over HTMLAudioElement with Media Session, preload of the next track, expired-link refresh, local and server playback state, hotkeys; PlayerProvider is not wired into the shell yet - ru/en strings and icons for the player and Collection Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
c05e523cbe
commit
ec3c2810c8
10 files changed
+1025
-4
No files matched your search
@@ -25,7 +25,11 @@
|
||||
"users": "Users",
|
||||
"audit": "Audit log",
|
||||
"library": "Library",
|
||||
"sources": "Storage"
|
||||
"sources": "Storage",
|
||||
"collection": "Collection",
|
||||
"history": "History",
|
||||
"likes": "Likes",
|
||||
"dislikes": "Dislikes"
|
||||
},
|
||||
"profile": {
|
||||
"menu": "Profile menu",
|
||||
@@ -43,7 +47,26 @@
|
||||
"wave_soon": "An endless stream tuned to your taste will appear once the server has a library."
|
||||
},
|
||||
"player": {
|
||||
"empty": "Nothing is playing"
|
||||
"empty": "Nothing is playing",
|
||||
"label": "Player",
|
||||
"play": "Play",
|
||||
"pause": "Pause",
|
||||
"next": "Next",
|
||||
"prev": "Previous",
|
||||
"like": "Like",
|
||||
"unlike": "Remove from likes",
|
||||
"dislike": "Dislike",
|
||||
"undislike": "Remove dislike",
|
||||
"volume": "Volume",
|
||||
"mute": "Mute",
|
||||
"unmute": "Unmute",
|
||||
"shuffle": "Shuffle",
|
||||
"repeat_off": "Repeat off",
|
||||
"repeat_all": "Repeat queue",
|
||||
"repeat_one": "Repeat track",
|
||||
"progress": "Position",
|
||||
"unavailable": "Track is unavailable — skipping",
|
||||
"error": "Could not play the track"
|
||||
},
|
||||
"settings": {
|
||||
"title": "Settings",
|
||||
@@ -117,5 +140,20 @@
|
||||
"back_home": "Back home",
|
||||
"artist": "Artist",
|
||||
"album": "Album"
|
||||
},
|
||||
"collection": {
|
||||
"title": "Collection",
|
||||
"history": "History",
|
||||
"likes": "Likes",
|
||||
"dislikes": "Dislikes",
|
||||
"clear_history": "Clear history",
|
||||
"clear_confirm": "Clear your listening history? Recommendations will still take it into account.",
|
||||
"today": "Today",
|
||||
"yesterday": "Yesterday",
|
||||
"empty_history": "What you listen to will show up here",
|
||||
"empty_likes": "Tap the heart on tracks — they will gather here",
|
||||
"empty_dislikes": "Disliked tracks stay out of the wave. None so far",
|
||||
"play_all": "Play all",
|
||||
"more": "Show more"
|
||||
}
|
||||
}
|
||||
@@ -61,5 +61,10 @@
|
||||
},
|
||||
"search": {
|
||||
"unavailable": "Search is temporarily unavailable"
|
||||
},
|
||||
"playback": {
|
||||
"link_invalid": "The link has expired — reload the page",
|
||||
"track_unavailable": "Track is unavailable",
|
||||
"transcode_failed": "Could not prepare the track"
|
||||
}
|
||||
}
|
||||
Reference in new issue
Block a user