mirror of
https://github.com/kilyabin/psysonic.git
synced 2026-07-22 14:35:41 +00:00
feat(playlists): local playlist folders (sidebar + page, DnD, view toggle) (#1119)
* feat(playlists): playlist folder model — store + pure grouping core Local, per-server folder layer over the server's flat playlist list (the Subsonic API has no folder concept). Adds: - playlistFolders.ts: shared types + pure groupPlaylistsByFolder (used by every surface), with full unit coverage. - playlistFolderStore.ts: persisted Zustand store (create/rename/delete/ assign/collapse), per-server scoped; deleting a folder drops its assignments so playlists fall back to ungrouped. UI surfaces (sidebar + Playlists page) build on this in following commits. * i18n(playlists): folder strings across all 9 locales Adds the playlists.folders.* namespace (folder names, move/remove, expand/ collapse, group-by-folders toggle, count plurals, and the local-only notice explaining that Navidrome and the Subsonic API have no native folder support). * feat(playlists): folder views, drag-to-folder, move-to-folder menu, view toggle Surfaces the local folder layer on both the Playlists page and the sidebar: - Page: collapsible folder sections + ungrouped remainder, each reusing VirtualCardGrid; flat grid is kept verbatim when no folders exist or the group view is toggled off. - Drag-to-folder via the shared mouse-based psy-drop system (HTML5 DnD is unusable in WebKitGTK); the whole section is the drop zone, and the ungrouped zone appears during a drag so a playlist can always return to root. - "Move to folder" submenu in the playlist context menu (keyboard-accessible path; also creates folders on the fly) — stays available offline. - Header gets a "New folder" action and a "Group by folders" view toggle (both context-aware); a notice surfaces the local-only caveat. - Sidebar renders the same collapsible folder groups. - groupView preference added to the folder store. * docs(changelog): note playlist folders (#1119)
This commit is contained in:
@@ -101,4 +101,22 @@ export const playlists = {
|
||||
csvImportToast: '{{added}} toegevoegd, {{notFound}} niet gevonden, {{duplicates}} duplicaten',
|
||||
csvImportDownloadSuccess: 'Rapport succesvol gedownload',
|
||||
csvImportDownloadError: 'Rapport downloaden mislukt',
|
||||
// Playlist folders (local, per-server organisation layer)
|
||||
folders: {
|
||||
newFolder: 'Nieuwe map',
|
||||
namePlaceholder: 'Mapnaam…',
|
||||
create: 'Aanmaken',
|
||||
rename: 'Hernoemen',
|
||||
delete: 'Map verwijderen',
|
||||
ungrouped: 'Zonder map',
|
||||
moveToFolder: 'Naar map verplaatsen',
|
||||
removeFromFolder: 'Uit map verwijderen',
|
||||
expandFolder: 'Map uitvouwen',
|
||||
collapseFolder: 'Map invouwen',
|
||||
groupByFolders: 'Groeperen op mappen',
|
||||
count_one: '{{count}} playlist',
|
||||
count_other: '{{count}} playlists',
|
||||
localOnlyNotice:
|
||||
'Mappen worden alleen in Psysonic op dit apparaat opgeslagen. Navidrome en de Subsonic-API ondersteunen geen playlistmappen, dus de structuur wordt niet op je server opgeslagen of met je andere apparaten en apps gesynchroniseerd.',
|
||||
},
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user