feat(playlists): add ZIP download button to playlist detail page

Mirrors the album download UX: Download (ZIP) button in the playlist
hero header, progress bar while downloading, folder picker via
downloadModalStore (remembers last used folder). Uses the same
Subsonic /rest/download.view endpoint as album downloads — it accepts
playlist IDs just as well as album IDs.

Closes #127

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Psychotoxical
2026-04-07 19:00:49 +02:00
parent a4c400cc69
commit 63a3bcd0f4
8 changed files with 79 additions and 2 deletions
+1
View File
@@ -775,6 +775,7 @@ export const deTranslation = {
removeCover: 'Foto entfernen',
coverUpdated: 'Cover aktualisiert',
metaSaved: 'Playlist aktualisiert',
downloadZip: 'Herunterladen (ZIP)',
},
radio: {
title: 'Internetradio',
+1
View File
@@ -776,6 +776,7 @@ export const enTranslation = {
removeCover: 'Remove photo',
coverUpdated: 'Cover updated',
metaSaved: 'Playlist updated',
downloadZip: 'Download (ZIP)',
},
radio: {
title: 'Internet Radio',
+1
View File
@@ -775,6 +775,7 @@ export const frTranslation = {
removeCover: 'Supprimer la photo',
coverUpdated: 'Pochette mise à jour',
metaSaved: 'Playlist mise à jour',
downloadZip: 'Télécharger (ZIP)',
},
radio: {
title: 'Radio Internet',
+1
View File
@@ -774,6 +774,7 @@ export const nbTranslation = {
removeCover: 'Fjern bilde',
coverUpdated: 'Omslag oppdatert',
metaSaved: 'Spillelisten er oppdatert',
downloadZip: 'Last ned (ZIP)',
},
radio: {
title: 'Internettradio',
+1
View File
@@ -775,6 +775,7 @@ export const nlTranslation = {
removeCover: 'Foto verwijderen',
coverUpdated: 'Omslag bijgewerkt',
metaSaved: 'Playlist bijgewerkt',
downloadZip: 'Downloaden (ZIP)',
},
radio: {
title: 'Internetradio',
+1
View File
@@ -829,6 +829,7 @@ export const ruTranslation = {
removeCover: 'Убрать фото',
coverUpdated: 'Обложка обновлена',
metaSaved: 'Плейлист сохранён',
downloadZip: 'Скачать (ZIP)',
},
radio: {
title: 'Онлайн-радио',
+1
View File
@@ -771,6 +771,7 @@ export const zhTranslation = {
removeCover: '删除照片',
coverUpdated: '封面已更新',
metaSaved: '播放列表已更新',
downloadZip: '下载 (ZIP)',
},
radio: {
title: '网络电台',