mirror of
https://github.com/Psychotoxical/psysonic.git
synced 2026-07-22 15:25:46 +00:00
* fix(queue): persist timeline play history across queue replace (#1096) Add a session-scoped play-history buffer (with play_session cold bootstrap) and timeline UI that shows history + current + upcoming without mutating the canonical queue or Subsonic sync. * fix(queue): pin timeline current to top and replay history in-place Timeline scroll matches queue mode (current at top). History clicks insert after the playing track instead of replacing the queue, and replayed tracks stay visible in the history strip. * docs: add CHANGELOG and credits for timeline play history (PR #1204) * fix(queue): resolve cross-server cover art for timeline history Include album/cover ids in play_session bootstrap rows, prefetch history refs through the queue resolver per server, and resolve before replay so Now Playing artwork works for inactive-server tracks. * fix(now-playing): stop playbackReport on cross-server track switch Send stopped to the previous server's playbackReport session when the playback server changes (queue click, history replay, etc.) so Who is listening clears on the server that was showing the prior track. * fix(queue): close timeline history review gaps for PR #1204 Defer play_session bootstrap until the library index is ready with retry while timeline mode is active; resolve history and queue rows by serverId + trackId for mixed-server queues; add tests for bootstrap defer and ref lookup. * chore(queue): remove dead timeline scroll guard in QueueList Timeline scroll is handled in the virtual-rows effect; the legacy branch is queue/playlist only. * fix(queue): address PR review nits for timeline play history Use authoritative row.ref.serverId for history clicks before resolver fill; simplify empty bootstrap seed; tighten completion types; unify recent_plays SQL. * fix(queue): immutable session history append for useSyncExternalStore Replace in-place push with a fresh array so getSnapshot returns a new reference and React re-renders on live appends without a playerStore update.
This commit is contained in:
@@ -460,7 +460,7 @@ export const settings = {
|
||||
queueModeTitle: 'Warteschlangen-Ansicht',
|
||||
queueModeQueueSub: 'Zeigt nur kommende Titel. Der laufende Titel bleibt im Kopf und verschwindet aus der Liste, sobald er gespielt wurde.',
|
||||
queueModePlaylistSub: 'Behält die ganze Warteschlange in der Liste, der laufende Titel oben hervorgehoben; gespielte Titel bleiben stehen.',
|
||||
queueModeTimelineSub: 'Aktuellen Titel zentrieren — gespielter Verlauf darüber, kommende Titel (in Shuffle-Reihenfolge) darunter.',
|
||||
queueModeTimelineSub: 'Aktuellen Titel oben in der Liste halten — gespielter Verlauf darüber scrollbar, kommende Titel (in Shuffle-Reihenfolge) darunter.',
|
||||
queueToolbarTitle: 'Warteschlangen-Toolbar',
|
||||
queueToolbarReset: 'Zurücksetzen',
|
||||
queueToolbarSeparator: 'Trennlinie',
|
||||
|
||||
@@ -504,7 +504,7 @@ export const settings = {
|
||||
queueModeTitle: 'Queue Display Mode',
|
||||
queueModeQueueSub: 'Show only upcoming tracks. The current track stays in the header and leaves the list once it has played.',
|
||||
queueModePlaylistSub: 'Keep the whole queue in the list with the current track highlighted at the top; played tracks stay.',
|
||||
queueModeTimelineSub: 'Center the current track, with played history above and upcoming tracks (in shuffle order) below.',
|
||||
queueModeTimelineSub: 'Keep the current track at the top of the list, with played history scrollable above and upcoming tracks (in shuffle order) below.',
|
||||
queueToolbarTitle: 'Queue Toolbar',
|
||||
queueToolbarReset: 'Reset to default',
|
||||
queueToolbarSeparator: 'Separator',
|
||||
|
||||
@@ -459,7 +459,7 @@ export const settings = {
|
||||
queueModeTitle: 'Modo de visualización de la cola',
|
||||
queueModeQueueSub: 'Muestra solo las próximas pistas. La pista actual permanece en el encabezado y sale de la lista al reproducirse.',
|
||||
queueModePlaylistSub: 'Mantiene toda la cola en la lista, con la pista actual resaltada arriba; las reproducidas permanecen.',
|
||||
queueModeTimelineSub: 'Centrar la pista actual, con el historial reproducido arriba y las próximas pistas (en orden aleatorio) debajo.',
|
||||
queueModeTimelineSub: 'Mantener la pista actual arriba de la lista, con el historial reproducido desplazable arriba y las próximas pistas (en orden aleatorio) abajo.',
|
||||
queueToolbarTitle: 'Barra de herramientas de cola',
|
||||
queueToolbarReset: 'Restablecer a predeterminado',
|
||||
queueToolbarSeparator: 'Separador',
|
||||
|
||||
@@ -447,7 +447,7 @@ export const settings = {
|
||||
queueModeTitle: 'Mode d\'affichage de la file',
|
||||
queueModeQueueSub: 'N\'affiche que les pistes à venir. La piste en cours reste dans l\'en-tête et quitte la liste une fois jouée.',
|
||||
queueModePlaylistSub: 'Conserve toute la file dans la liste, la piste en cours surlignée en haut ; les pistes jouées restent.',
|
||||
queueModeTimelineSub: 'Centrer le morceau en cours, avec l\'historique au-dessus et les morceaux à venir (dans l\'ordre aléatoire) en dessous.',
|
||||
queueModeTimelineSub: 'Garde le morceau en cours en haut de la liste, avec l\'historique défilable au-dessus et les morceaux à venir (dans l\'ordre aléatoire) en dessous.',
|
||||
queueToolbarTitle: 'Barre d\'outils de file d\'attente',
|
||||
queueToolbarReset: 'Réinitialiser',
|
||||
queueToolbarSeparator: 'Séparateur',
|
||||
|
||||
@@ -503,7 +503,7 @@ export const settings = {
|
||||
queueModeTitle: 'Lejátszási sor megjelenítési módja',
|
||||
queueModeQueueSub: 'Csak a következő számokat mutatja. Az aktuális szám a fejlécben marad, és lejátszás után kikerül a listából.',
|
||||
queueModePlaylistSub: 'A teljes sort a listában tartja, az aktuális számmal felül kiemelve; a lejátszott számok megmaradnak.',
|
||||
queueModeTimelineSub: 'Az aktuális számot középre helyezi, fölötte a lejátszott előzményekkel, alatta a következő számokkal (keverési sorrendben).',
|
||||
queueModeTimelineSub: 'Az aktuális számot a lista tetején tartja, fölötte görgethető lejátszási előzményekkel, alatta a következő számokkal (keverési sorrendben).',
|
||||
queueToolbarTitle: 'Lejátszási sor eszköztára',
|
||||
queueToolbarReset: 'Visszaállítás alapértelmezettre',
|
||||
queueToolbarSeparator: 'Elválasztó',
|
||||
|
||||
@@ -497,7 +497,7 @@ export const settings = {
|
||||
queueModeTitle: 'キュー表示モード',
|
||||
queueModeQueueSub: '今後のトラックのみ表示します。現在のトラックはヘッダーに残り、再生済みになるとリストから外れます。',
|
||||
queueModePlaylistSub: 'キュー全体をリストに残し、現在のトラックを上部で強調表示します。再生済みトラックも残ります。',
|
||||
queueModeTimelineSub: '現在のトラックを中央に置き、上に再生履歴、下に今後のトラック (シャッフル順) を表示します。',
|
||||
queueModeTimelineSub: '現在のトラックをリスト上部に固定し、上にスクロール可能な再生履歴、下に今後のトラック (シャッフル順) を表示します。',
|
||||
queueToolbarTitle: 'キューツールバー',
|
||||
queueToolbarReset: '既定に戻す',
|
||||
queueToolbarSeparator: '区切り',
|
||||
|
||||
@@ -446,7 +446,7 @@ export const settings = {
|
||||
queueModeTitle: 'Visningsmodus for kø',
|
||||
queueModeQueueSub: 'Viser bare kommende spor. Det gjeldende sporet blir i toppen og forsvinner fra listen når det er spilt.',
|
||||
queueModePlaylistSub: 'Beholder hele køen i listen med gjeldende spor uthevet øverst; avspilte spor blir værende.',
|
||||
queueModeTimelineSub: 'Sentrer gjeldende spor, med avspilt historikk over og kommende spor (i shuffle-rekkefølge) under.',
|
||||
queueModeTimelineSub: 'Hold gjeldende spor øverst i listen, med rullbar avspilt historikk over og kommende spor (i shuffle-rekkefølge) under.',
|
||||
queueToolbarTitle: 'Kø-verktøylinje',
|
||||
queueToolbarReset: 'Tilbakestill til standard',
|
||||
queueToolbarSeparator: 'Skilje',
|
||||
|
||||
@@ -447,7 +447,7 @@ export const settings = {
|
||||
queueModeTitle: 'Weergavemodus wachtrij',
|
||||
queueModeQueueSub: 'Toont alleen komende nummers. Het huidige nummer blijft in de kop en verdwijnt uit de lijst zodra het is afgespeeld.',
|
||||
queueModePlaylistSub: 'Houdt de hele wachtrij in de lijst met het huidige nummer bovenaan gemarkeerd; afgespeelde nummers blijven staan.',
|
||||
queueModeTimelineSub: 'Centreer de huidige track, met de afgespeelde geschiedenis erboven en de komende tracks (in shuffle-volgorde) eronder.',
|
||||
queueModeTimelineSub: 'Houd de huidige track bovenaan de lijst, met scrollbare afgespeelde geschiedenis erboven en komende tracks (in shuffle-volgorde) eronder.',
|
||||
queueToolbarTitle: 'Wachtrij-werkbalk',
|
||||
queueToolbarReset: 'Standaard herstellen',
|
||||
queueToolbarSeparator: 'Scheiding',
|
||||
|
||||
@@ -504,7 +504,7 @@ export const settings = {
|
||||
queueModeTitle: 'Tryb wyświetlania kolejki',
|
||||
queueModeQueueSub: 'Pokaż tylko nadchodzące utwory. Bierzący utwór pozostaje w nagłówku i znika z listy po odtworzeniu.',
|
||||
queueModePlaylistSub: 'Zachowuj całą kolejkę na liście, z bieżącym utworem wyróżnionym u góry; odtworzone utwory pozostają na liście.',
|
||||
queueModeTimelineSub: 'Wyśrodkuj bieżący utwór, z historią odtworzeń powyżej i nadchodzącymi utworami poniżej (w kolejności losowej).',
|
||||
queueModeTimelineSub: 'Utrzymuj bieżący utwór u góry listy — historia odtworzeń przewijana powyżej, nadchodzące utwory (w kolejności losowej) poniżej.',
|
||||
queueToolbarTitle: 'Pasek narzędzi kolejki',
|
||||
queueToolbarReset: 'Przywróć domyślne',
|
||||
queueToolbarSeparator: 'Separator',
|
||||
|
||||
@@ -462,7 +462,7 @@ export const settings = {
|
||||
queueModeTitle: 'Mod de afișare a cozii',
|
||||
queueModeQueueSub: 'Arată doar piesele următoare. Piesa curentă rămâne în antet și iese din listă după ce a fost redată.',
|
||||
queueModePlaylistSub: 'Păstrează toată coada în listă, cu piesa curentă evidențiată sus; piesele redate rămân.',
|
||||
queueModeTimelineSub: 'Centrează piesa curentă, cu istoricul redat deasupra și piesele următoare (în ordine aleatorie) dedesubt.',
|
||||
queueModeTimelineSub: 'Păstrează piesa curentă sus în listă, cu istoricul redat derulabil deasupra și piesele următoare (în ordine aleatorie) dedesubt.',
|
||||
queueToolbarTitle: 'Toolbar Coadă',
|
||||
queueToolbarReset: 'Resetează la implicit',
|
||||
queueToolbarSeparator: 'Separator',
|
||||
|
||||
@@ -517,7 +517,7 @@ export const settings = {
|
||||
queueModeTitle: 'Режим отображения очереди',
|
||||
queueModeQueueSub: 'Показывает только предстоящие треки. Текущий трек остаётся в заголовке и исчезает из списка после воспроизведения.',
|
||||
queueModePlaylistSub: 'Сохраняет всю очередь в списке, текущий трек выделен вверху; воспроизведённые треки остаются.',
|
||||
queueModeTimelineSub: 'Центрировать текущий трек: история воспроизведения сверху, предстоящие треки (в порядке перемешивания) снизу.',
|
||||
queueModeTimelineSub: 'Текущий трек сверху списка; история воспроизведения прокручивается выше, предстоящие треки (в порядке перемешивания) — ниже.',
|
||||
queueToolbarTitle: 'Панель инструментов очереди',
|
||||
queueToolbarReset: 'Сбросить',
|
||||
queueToolbarSeparator: 'Разделитель',
|
||||
|
||||
@@ -446,7 +446,7 @@ export const settings = {
|
||||
queueModeTitle: '队列显示模式',
|
||||
queueModeQueueSub: '仅显示即将播放的曲目。当前曲目保留在标题栏中,播放完毕后从列表移除。',
|
||||
queueModePlaylistSub: '在列表中保留整个队列,当前曲目在顶部高亮显示;已播放的曲目保留。',
|
||||
queueModeTimelineSub: '将当前曲目居中显示,已播放的历史在上方,即将播放的曲目(按随机顺序)在下方。',
|
||||
queueModeTimelineSub: '当前曲目保持在列表顶部,上方可滚动查看播放历史,下方为即将播放的曲目(按随机顺序)。',
|
||||
queueToolbarTitle: '队列工具栏',
|
||||
queueToolbarReset: '重置为默认',
|
||||
queueToolbarSeparator: '分隔符',
|
||||
|
||||
Reference in New Issue
Block a user