feat(folder-browser): Miller columns directory navigation

New page /folders with macOS Finder-style column layout:
- getMusicDirectory / getMusicIndexes / getMusicFolders Subsonic API methods
- Root level uses getIndexes.view (music folder IDs are not getMusicDirectory IDs)
- Columns fill available width with flex: 1, min-width: 200px
- Auto-scroll to rightmost column on expand
- Cancelled-flag prevents stale state on fast navigation
- Clicking a track plays it in the context of the current column's tracks
- FolderOpen/Folder/Music icons, accent-colored selection, ellipsis truncation
- Hidden in sidebar by default (user can enable in Settings)
- i18n: EN DE FR NL NB ZH RU

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Psychotoxical
2026-04-08 14:40:29 +02:00
parent 0a0dde057d
commit 5848c621fd
13 changed files with 387 additions and 7 deletions
+6 -1
View File
@@ -21,6 +21,7 @@ export const deTranslation = {
playlists: 'Playlists',
mostPlayed: 'Meistgehört',
radio: 'Internetradio',
folderBrowser: 'Ordner-Browser',
libraryScope: 'Bibliotheksumfang',
allLibraries: 'Alle Bibliotheken',
},
@@ -880,5 +881,9 @@ export const deTranslation = {
favorite: 'Zu Favoriten hinzufügen',
unfavorite: 'Aus Favoriten entfernen',
noFavorites: 'Keine Lieblingssender.',
}
},
folderBrowser: {
empty: 'Leerer Ordner',
error: 'Laden fehlgeschlagen',
},
};
+6 -1
View File
@@ -22,6 +22,7 @@ export const enTranslation = {
playlists: 'Playlists',
mostPlayed: 'Most Played',
radio: 'Internet Radio',
folderBrowser: 'Folder Browser',
libraryScope: 'Library scope',
allLibraries: 'All libraries',
},
@@ -881,5 +882,9 @@ export const enTranslation = {
favorite: 'Add to favorites',
unfavorite: 'Remove from favorites',
noFavorites: 'No favorite stations.',
}
},
folderBrowser: {
empty: 'Empty folder',
error: 'Failed to load',
},
};
+6 -1
View File
@@ -21,6 +21,7 @@ export const frTranslation = {
playlists: 'Playlists',
mostPlayed: 'Les plus joués',
radio: 'Radio Internet',
folderBrowser: 'Explorateur de dossiers',
libraryScope: 'Portée de la bibliothèque',
allLibraries: 'Toutes les bibliothèques',
},
@@ -875,5 +876,9 @@ export const frTranslation = {
favorite: 'Ajouter aux favoris',
unfavorite: 'Retirer des favoris',
noFavorites: 'Aucune station favorite.',
}
},
folderBrowser: {
empty: 'Dossier vide',
error: 'Échec du chargement',
},
};
+6 -1
View File
@@ -21,6 +21,7 @@ export const nbTranslation = {
playlists: 'Spillelister',
mostPlayed: 'Mest spilt',
radio: 'Internettradio',
folderBrowser: 'Mappeleser',
libraryScope: 'Biblioteksomfang',
allLibraries: 'Alle biblioteker',
},
@@ -874,5 +875,9 @@ export const nbTranslation = {
favorite: 'Legg til i favoritter',
unfavorite: 'Fjern fra favoritter',
noFavorites: 'Ingen favorittstasjoner.',
}
},
folderBrowser: {
empty: 'Tom mappe',
error: 'Kunne ikke laste',
},
};
+6 -1
View File
@@ -21,6 +21,7 @@ export const nlTranslation = {
playlists: 'Playlists',
mostPlayed: 'Meest gespeeld',
radio: 'Internetradio',
folderBrowser: 'Mappenverkenner',
libraryScope: 'Bibliotheekbereik',
allLibraries: 'Alle bibliotheken',
},
@@ -875,5 +876,9 @@ export const nlTranslation = {
favorite: 'Toevoegen aan favorieten',
unfavorite: 'Verwijderen uit favorieten',
noFavorites: 'Geen favoriete stations.',
}
},
folderBrowser: {
empty: 'Lege map',
error: 'Laden mislukt',
},
};
+5
View File
@@ -22,6 +22,7 @@ export const ruTranslation = {
playlists: 'Плейлисты',
mostPlayed: 'Часто слушаемое',
radio: 'Онлайн-радио',
folderBrowser: 'Браузер папок',
libraryScope: 'Область медиатеки',
allLibraries: 'Все библиотеки',
},
@@ -933,4 +934,8 @@ export const ruTranslation = {
unfavorite: 'Убрать из избранного',
noFavorites: 'Избранных станций нет.',
},
folderBrowser: {
empty: 'Папка пуста',
error: 'Ошибка загрузки',
},
};
+6 -1
View File
@@ -21,6 +21,7 @@ export const zhTranslation = {
playlists: '播放列表',
mostPlayed: '最常播放',
radio: '网络电台',
folderBrowser: '文件夹浏览器',
libraryScope: '资料库范围',
allLibraries: '所有资料库',
},
@@ -871,5 +872,9 @@ export const zhTranslation = {
favorite: '添加到收藏',
unfavorite: '从收藏移除',
noFavorites: '没有收藏的电台。',
}
},
folderBrowser: {
empty: '空文件夹',
error: '加载失败',
},
};