feat(albums): add 'Enqueue' option to album cover, context menu and multi-select toolbar (closes #253) (#256)

Per bcorporaal's request in #253: making a queue from multiple albums
required either replacing the queue (Play) or going into each album
detail page first. Three new entry points cover the common workflows:

1. Hover button on the album cover next to Play. Both buttons share
   the same accent style and size so the secondary action is just as
   readable as the primary — first attempt with a darker pill was hard
   to see and unbalanced the hover.

2. Context-menu entry "Enqueue Album" between "Open Album" and "Go to
   Artist". The i18n key already existed (was used by the album-song
   sub-context); just wiring up the action.

3. Multi-select toolbar in Albums.tsx: new "Enqueue (N)" button placed
   before "Add Offline" so power users selecting several albums no
   longer have to right-click. Plus a context-menu entry "Enqueue N
   Albums" for the same flow when a multi-album right-click happens
   anywhere else.

All multi-album fetches use Promise.all(getAlbum(...)) — Navidrome
handles parallel requests instantly (per memory note from PR #246).

i18n: 4 new keys per locale (3 with pluralisation: contextMenu.enqueueAlbums,
albums.enqueueSelected, albums.enqueueQueued).

Co-authored-by: Psychotoxical <dev@psysonic.app>
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Frank Stellmacher
2026-04-21 22:39:46 +02:00
committed by GitHub
parent f7a721b7b1
commit 2318f9e07a
12 changed files with 117 additions and 4 deletions
+12
View File
@@ -100,6 +100,10 @@ export const ruTranslation = {
playNext: 'Играть следующим',
addToQueue: 'В конец очереди',
enqueueAlbum: 'Альбом в очередь',
enqueueAlbums_one: '{{count}} альбом в очередь',
enqueueAlbums_few: '{{count}} альбома в очередь',
enqueueAlbums_many: '{{count}} альбомов в очередь',
enqueueAlbums_other: '{{count}} альбомов в очередь',
startRadio: 'Радио по похожим',
instantMix: 'Instant Mix',
instantMixFailed: 'Не удалось собрать Instant Mix — ошибка сервера или плагина.',
@@ -314,6 +318,14 @@ export const ruTranslation = {
selectionCount: '{{count}} выбрано',
downloadZips: 'Скачать ZIP-архивы',
addOffline: 'Добавить офлайн',
enqueueSelected_one: 'В очередь ({{count}})',
enqueueSelected_few: 'В очередь ({{count}})',
enqueueSelected_many: 'В очередь ({{count}})',
enqueueSelected_other: 'В очередь ({{count}})',
enqueueQueued_one: '{{count}} альбом добавлен в очередь',
enqueueQueued_few: '{{count}} альбома добавлены в очередь',
enqueueQueued_many: '{{count}} альбомов добавлены в очередь',
enqueueQueued_other: '{{count}} альбомов добавлены в очередь',
downloadingZip: 'Загрузка {{current}}/{{total}}: {{name}}',
downloadZipDone: '{{count}} ZIP-архив(ов) загружено',
downloadZipFailed: 'Не удалось скачать {{name}}',