feat: tracklist column reset, device sync cross-platform template fix, filename template builder, privacy policy

- Add "Reset to defaults" button to column picker in AlbumTrackList, PlaylistDetail, Favorites (all 8 locales)
- Fix device sync cross-OS status detection: store filenameTemplate in manifest, use it for path computation on import
- Redesign filename template UI: preset buttons (Standard/Multi-Disc/Alt. Folder), clickable token chips ({artist}, {album}, etc.), clear button
- Fix suggestions section in PlaylistDetail missing album column rendering
- Add PRIVACY.md documenting all third-party integrations (Last.fm, LRCLIB, Apple Music, Discord); link from README

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Psychotoxical
2026-04-16 19:46:57 +02:00
parent 58851da817
commit 7db42d74ef
17 changed files with 328 additions and 41 deletions
+5
View File
@@ -154,6 +154,7 @@ export const deTranslation = {
trackDuration: 'Dauer',
trackTotal: 'Gesamt',
columns: 'Spalten',
resetColumns: 'Zurücksetzen',
notFound: 'Album nicht gefunden.',
bioModal: 'Künstler-Biografie',
bioClose: 'Schließen',
@@ -1098,6 +1099,10 @@ export const deTranslation = {
actionDelete: 'Vom Gerät löschen',
actionApplyAll: 'Änderungen synchronisieren',
templatePreview: 'Vorschau',
templatePresetStandard: 'Standard',
templatePresetMultiDisc: 'Multi-Disc',
templatePresetAltFolder: 'Alt. Ordner',
tokenSlashHint: '/ = Ordner-Trennzeichen',
cancel: 'Abbrechen',
noTargetDir: 'Bitte zuerst einen Zielordner auswählen.',
noSources: 'Bitte mindestens eine Quelle auswählen.',
+5
View File
@@ -155,6 +155,7 @@ export const enTranslation = {
trackDuration: 'Duration',
trackTotal: 'Total',
columns: 'Columns',
resetColumns: 'Reset to defaults',
notFound: 'Album not found.',
bioModal: 'Artist Biography',
bioClose: 'Close',
@@ -1101,6 +1102,10 @@ export const enTranslation = {
actionDelete: 'Delete from Device',
actionApplyAll: 'Apply All Changes',
templatePreview: 'Preview',
templatePresetStandard: 'Standard',
templatePresetMultiDisc: 'Multi-Disc',
templatePresetAltFolder: 'Alt. Folder',
tokenSlashHint: '/ = folder separator',
cancel: 'Cancel',
noTargetDir: 'Please choose a target folder first.',
noSources: 'Please select at least one source.',
+5
View File
@@ -155,6 +155,7 @@ export const esTranslation = {
trackDuration: 'Duración',
trackTotal: 'Total',
columns: 'Columnas',
resetColumns: 'Restablecer',
notFound: 'Álbum no encontrado.',
bioModal: 'Biografía del Artista',
bioClose: 'Cerrar',
@@ -1096,6 +1097,10 @@ export const esTranslation = {
actionDelete: 'Eliminar del dispositivo',
actionApplyAll: 'Aplicar todos los cambios',
templatePreview: 'Vista previa',
templatePresetStandard: 'Estándar',
templatePresetMultiDisc: 'Multi-Disco',
templatePresetAltFolder: 'Carpeta alt.',
tokenSlashHint: '/ = separador de carpeta',
cancel: 'Cancelar',
noTargetDir: 'Por favor, elige primero una carpeta de destino.',
noSources: 'Por favor, selecciona al menos una fuente.',
+5
View File
@@ -154,6 +154,7 @@ export const frTranslation = {
trackDuration: 'Durée',
trackTotal: 'Total',
columns: 'Colonnes',
resetColumns: 'Réinitialiser',
notFound: 'Album introuvable.',
bioModal: 'Biographie de l\'artiste',
bioClose: 'Fermer',
@@ -1091,6 +1092,10 @@ export const frTranslation = {
actionDelete: 'Supprimer de l\'appareil',
actionApplyAll: 'Appliquer toutes les modifications',
templatePreview: 'Aperçu',
templatePresetStandard: 'Standard',
templatePresetMultiDisc: 'Multi-Disc',
templatePresetAltFolder: 'Dossier alt.',
tokenSlashHint: '/ = séparateur de dossier',
cancel: 'Annuler',
noTargetDir: 'Veuillez d\'abord choisir un dossier cible.',
noSources: 'Veuillez sélectionner au moins une source.',
+5
View File
@@ -154,6 +154,7 @@ export const nbTranslation = {
trackDuration: 'Varighet',
trackTotal: 'Totalt',
columns: 'Kolonner',
resetColumns: 'Tilbakestill',
notFound: 'Album ble ikke funnet.',
bioModal: 'Artistbiografi',
bioClose: 'Lukk',
@@ -1090,6 +1091,10 @@ export const nbTranslation = {
actionDelete: 'Slett fra enhet',
actionApplyAll: 'Bruk alle endringer',
templatePreview: 'Forhåndsvisning',
templatePresetStandard: 'Standard',
templatePresetMultiDisc: 'Multi-Disc',
templatePresetAltFolder: 'Alt. mappe',
tokenSlashHint: '/ = mappeskiller',
cancel: 'Avbryt',
noTargetDir: 'Velg en målmappe først.',
noSources: 'Velg minst én kilde.',
+5
View File
@@ -153,6 +153,7 @@ export const nlTranslation = {
trackDuration: 'Duur',
trackTotal: 'Totaal',
columns: 'Kolommen',
resetColumns: 'Standaard herstellen',
notFound: 'Album niet gevonden.',
bioModal: 'Artiest biografie',
bioClose: 'Sluiten',
@@ -1090,6 +1091,10 @@ export const nlTranslation = {
actionDelete: 'Verwijderen van apparaat',
actionApplyAll: 'Alle wijzigingen toepassen',
templatePreview: 'Voorbeeld',
templatePresetStandard: 'Standaard',
templatePresetMultiDisc: 'Multi-Disc',
templatePresetAltFolder: 'Alt. map',
tokenSlashHint: '/ = mapscheidingsteken',
cancel: 'Annuleren',
noTargetDir: 'Kies eerst een doelmap.',
noSources: 'Selecteer minimaal één bron.',
+5
View File
@@ -156,6 +156,7 @@ export const ruTranslation = {
trackDuration: 'Длительность',
trackTotal: 'Итого',
columns: 'Колонки',
resetColumns: 'Сбросить',
notFound: 'Альбом не найден.',
bioModal: 'Биография исполнителя',
bioClose: 'Закрыть',
@@ -1149,6 +1150,10 @@ export const ruTranslation = {
actionDelete: 'Удалить с устройства',
actionApplyAll: 'Применить все изменения',
templatePreview: 'Предпросмотр',
templatePresetStandard: 'Стандарт',
templatePresetMultiDisc: 'Мульти-диск',
templatePresetAltFolder: 'Альт. папка',
tokenSlashHint: '/ = разделитель папок',
cancel: 'Отмена',
noTargetDir: 'Сначала выберите папку назначения.',
noSources: 'Выберите хотя бы один источник.',
+5
View File
@@ -153,6 +153,7 @@ export const zhTranslation = {
trackDuration: '时长',
trackTotal: '总计',
columns: '列',
resetColumns: '重置为默认',
notFound: '未找到专辑。',
bioModal: '艺术家简介',
bioClose: '关闭',
@@ -1084,6 +1085,10 @@ export const zhTranslation = {
actionDelete: '从设备删除',
actionApplyAll: '应用所有更改',
templatePreview: '预览',
templatePresetStandard: '标准',
templatePresetMultiDisc: '多碟',
templatePresetAltFolder: '备用文件夹',
tokenSlashHint: '/ = 文件夹分隔符',
cancel: '取消',
noTargetDir: '请先选择目标文件夹。',
noSources: '请至少选择一个来源。',