feat(queue): add Timeline display mode (#1004)

* feat(queue): add Timeline display mode

A third queue display mode alongside Queue and Playlist. Timeline shows
the full queue anchored on the current track — played history above
(dimmed), upcoming below — with 'History' and 'Up next' dividers and the
current row auto-centered. It already follows shuffle order since the
queue is stored in play order. The header mode button now cycles
queue → timeline → playlist; Settings gains a third option.

* i18n(queue): Timeline mode strings (9 locales)

* docs(changelog): note Timeline queue mode (#1004)
This commit is contained in:
Frank Stellmacher
2026-06-05 16:19:20 +02:00
committed by GitHub
parent 41157ccaca
commit 1c23305887
25 changed files with 113 additions and 19 deletions
+3
View File
@@ -1,6 +1,9 @@
export const queue = {
title: 'Warteschlange',
modePlaylist: 'Playlist',
modeTimeline: 'Zeitachse',
upNext: 'Als Nächstes',
history: 'Verlauf',
noUpcoming: 'Keine weiteren Titel.',
savePlaylist: 'Playlist speichern',
updatePlaylist: 'Playlist aktualisieren',
+1
View File
@@ -330,6 +330,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.',
queueToolbarTitle: 'Warteschlangen-Toolbar',
queueToolbarReset: 'Zurücksetzen',
queueToolbarSeparator: 'Trennlinie',
+3
View File
@@ -1,6 +1,9 @@
export const queue = {
title: 'Queue',
modePlaylist: 'Playlist',
modeTimeline: 'Timeline',
upNext: 'Up next',
history: 'History',
noUpcoming: 'No upcoming tracks.',
savePlaylist: 'Save Playlist',
updatePlaylist: 'Update Playlist',
+1
View File
@@ -394,6 +394,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.',
queueToolbarTitle: 'Queue Toolbar',
queueToolbarReset: 'Reset to default',
queueToolbarSeparator: 'Separator',
+3
View File
@@ -1,6 +1,9 @@
export const queue = {
title: 'Cola',
modePlaylist: 'Lista',
modeTimeline: 'Cronología',
upNext: 'A continuación',
history: 'Historial',
noUpcoming: 'No hay próximas pistas.',
savePlaylist: 'Guardar Lista',
updatePlaylist: 'Actualizar Lista',
+1
View File
@@ -329,6 +329,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.',
queueToolbarTitle: 'Barra de herramientas de cola',
queueToolbarReset: 'Restablecer a predeterminado',
queueToolbarSeparator: 'Separador',
+3
View File
@@ -1,6 +1,9 @@
export const queue = {
title: 'File d\'attente',
modePlaylist: 'Liste de lecture',
modeTimeline: 'Chronologie',
upNext: 'À suivre',
history: 'Historique',
noUpcoming: 'Aucune piste à venir.',
savePlaylist: 'Enregistrer la liste',
updatePlaylist: 'Mettre à jour la liste',
+1
View File
@@ -327,6 +327,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.',
queueToolbarTitle: 'Barre d\'outils de file d\'attente',
queueToolbarReset: 'Réinitialiser',
queueToolbarSeparator: 'Séparateur',
+3
View File
@@ -1,6 +1,9 @@
export const queue = {
title: 'Kø',
modePlaylist: 'Spilleliste',
modeTimeline: 'Tidslinje',
upNext: 'Neste',
history: 'Historikk',
noUpcoming: 'Ingen kommende spor.',
savePlaylist: 'Lagre spilleliste',
updatePlaylist: 'Oppdater spilleliste',
+1
View File
@@ -326,6 +326,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.',
queueToolbarTitle: 'Kø-verktøylinje',
queueToolbarReset: 'Tilbakestill til standard',
queueToolbarSeparator: 'Skilje',
+3
View File
@@ -1,6 +1,9 @@
export const queue = {
title: 'Wachtrij',
modePlaylist: 'Afspeellijst',
modeTimeline: 'Tijdlijn',
upNext: 'Hierna',
history: 'Geschiedenis',
noUpcoming: 'Geen volgende nummers.',
savePlaylist: 'Afspeellijst opslaan',
updatePlaylist: 'Afspeellijst bijwerken',
+1
View File
@@ -327,6 +327,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.',
queueToolbarTitle: 'Wachtrij-werkbalk',
queueToolbarReset: 'Standaard herstellen',
queueToolbarSeparator: 'Scheiding',
+3
View File
@@ -1,6 +1,9 @@
export const queue = {
title: 'Coadă',
modePlaylist: 'Playlist',
modeTimeline: 'Cronologie',
upNext: 'Urmează',
history: 'Istoric',
noUpcoming: 'Nicio piesă în continuare.',
savePlaylist: 'Salvează Playlist',
updatePlaylist: 'Actualizează Playlist',
+1
View File
@@ -332,6 +332,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.',
queueToolbarTitle: 'Toolbar Coadă',
queueToolbarReset: 'Resetează la implicit',
queueToolbarSeparator: 'Separator',
+3
View File
@@ -1,6 +1,9 @@
export const queue = {
title: 'Очередь',
modePlaylist: 'Плейлист',
modeTimeline: 'Хронология',
upNext: 'Далее',
history: 'История',
noUpcoming: 'Нет следующих треков.',
savePlaylist: 'Сохранить как плейлист',
updatePlaylist: 'Обновить плейлист',
+1
View File
@@ -408,6 +408,7 @@ export const settings = {
queueModeTitle: 'Режим отображения очереди',
queueModeQueueSub: 'Показывает только предстоящие треки. Текущий трек остаётся в заголовке и исчезает из списка после воспроизведения.',
queueModePlaylistSub: 'Сохраняет всю очередь в списке, текущий трек выделен вверху; воспроизведённые треки остаются.',
queueModeTimelineSub: 'Центрировать текущий трек: история воспроизведения сверху, предстоящие треки (в порядке перемешивания) снизу.',
queueToolbarTitle: 'Панель инструментов очереди',
queueToolbarReset: 'Сбросить',
queueToolbarSeparator: 'Разделитель',
+3
View File
@@ -1,6 +1,9 @@
export const queue = {
title: '队列',
modePlaylist: '播放列表',
modeTimeline: '时间轴',
upNext: '即将播放',
history: '历史',
noUpcoming: '没有后续曲目。',
savePlaylist: '保存为播放列表',
updatePlaylist: '更新播放列表',
+1
View File
@@ -326,6 +326,7 @@ export const settings = {
queueModeTitle: '队列显示模式',
queueModeQueueSub: '仅显示即将播放的曲目。当前曲目保留在标题栏中,播放完毕后从列表移除。',
queueModePlaylistSub: '在列表中保留整个队列,当前曲目在顶部高亮显示;已播放的曲目保留。',
queueModeTimelineSub: '将当前曲目居中显示,已播放的历史在上方,即将播放的曲目(按随机顺序)在下方。',
queueToolbarTitle: '队列工具栏',
queueToolbarReset: '重置为默认',
queueToolbarSeparator: '分隔符',