172 Commits

Author SHA1 Message Date
Geert Rademakes
7065247277 More webdav compatiblity 2025-09-17 11:30:03 +02:00
Geert Rademakes
218046ec4f webdav setup 2025-09-17 10:55:35 +02:00
Geert Rademakes
dc8254772c feat(ux): improve song details panel UX - hide panel by default, show only when song selected, add close button with X icon 2025-08-15 13:38:45 +02:00
Geert Rademakes
96fdf64060 fix(upload): add missing 'id' field to 'To Be Scanned' playlist creation for proper frontend rendering 2025-08-14 14:12:32 +02:00
Geert Rademakes
cf39a3c2b1 fix(upload): add debugging and fix file selection issues - add console logging for onDrop, fix dependency array, add file rejection handling and visual feedback 2025-08-14 13:15:53 +02:00
Geert Rademakes
675c1f8d8f fix(upload): resolve folder selection issue and improve 'To Be Scanned' playlist creation - add debug logging, visual selection indicator, simplify playlist creation logic, support batch uploads with markForScan 2025-08-14 11:55:54 +02:00
Geert Rademakes
7557eddeb4 feat(upload): improve folder browser UX and performance - add loading state, fix chevron visibility, implement backend caching with 5min TTL, add cache invalidation on file operations 2025-08-14 09:17:54 +02:00
Geert Rademakes
10e38fae4d feat(upload): replace dropdown with tree-based folder browser for better S3 folder selection UX 2025-08-14 09:12:37 +02:00
Geert Rademakes
a49e628d93 fix: resolve TypeScript syntax error in music routes - use spread operator instead of invalid 'as string[]' syntax 2025-08-14 09:08:50 +02:00
Geert Rademakes
e4ee7230d1 feat(upload): include root folder option in S3 folder dropdown and support empty targetFolder (root) on backend 2025-08-13 17:04:20 +02:00
Geert Rademakes
762ae0730a feat(upload): add S3 folder dropdown (backend /api/music/folders) and use selected folder for uploads; keep text input as fallback 2025-08-13 17:02:58 +02:00
Geert Rademakes
aae57ec55f feat(upload): allow selecting target S3 folder and auto-add uploaded files to 'To Be Scanned' playlist via stub songs for XML export 2025-08-13 17:00:59 +02:00
Geert Rademakes
6c879987bf Merge branch 'feat/config-sync-refactor' into main 2025-08-13 16:54:39 +02:00
Geert Rademakes
d87d83eaf6 fix(config): improve auto-link UX; fix song update in background job; upsert MusicFile on complex matching 2025-08-13 16:54:38 +02:00
Geert Rademakes
fe3a7abf32 fix(backend): avoid duplicate key errors during complex matching by upserting MusicFile by s3Key 2025-08-13 16:48:34 +02:00
Geert Rademakes
1560e614dc chore(matching): remove heavy matched/songs-with-files lists from SongMatching to streamline UI 2025-08-13 16:47:51 +02:00
Geert Rademakes
58eaa50bd2 feat(config): refactor Sync & Matching panel; remove heavy Music Library tab; add Sync, Force Sync, and Clear Links + Force Sync controls; backend supports clearLinks/force 2025-08-13 16:41:59 +02:00
Geert Rademakes
862c482565 Merge branch 'feat/drag-preview-count' into main 2025-08-13 16:29:52 +02:00
Geert Rademakes
837fed81e7 feat(frontend): show drag preview for single-item drag as '1 song' badge 2025-08-13 16:23:30 +02:00
Geert Rademakes
6d2eae9c7b feat(frontend): custom drag preview with selection count badge when dragging multiple songs 2025-08-13 16:21:51 +02:00
Geert Rademakes
febfb638b9 Merge branch 'feat/multiselect-perf' into main 2025-08-13 16:09:25 +02:00
Geert Rademakes
feac54e2e0 style(frontend): dark scrollbars for playlist sidebar and mobile drawer 2025-08-13 16:08:38 +02:00
Geert Rademakes
dd2c7d353e style(frontend): dark scrollbars for song list, main content, and details panel to match theme 2025-08-13 16:06:02 +02:00
Geert Rademakes
017ba31d83 perf(frontend): use startTransition for selection updates to keep UI responsive on large sets 2025-08-13 16:03:26 +02:00
Geert Rademakes
1d290bdfa6 feat(frontend): shift-click range selection with optimistic checkbox feedback 2025-08-13 15:59:25 +02:00
Geert Rademakes
54b22d5cc5 perf(frontend): instant checkbox feedback via local optimistic selection in virtualized list 2025-08-13 15:57:26 +02:00
Geert Rademakes
517af140cf Merge branch 'feat/frontend-performance-audit' into main 2025-08-13 15:48:50 +02:00
Geert Rademakes
4bab1ae3a2 fix(frontend): avoid blocking fetch by not setting loadingRef in immediate switch 2025-08-13 15:47:25 +02:00
Geert Rademakes
ebc6f31d32 perf(frontend): set loading immediately on playlist switch for instant indicator 2025-08-13 15:43:23 +02:00
Geert Rademakes
449dfc708e perf(frontend): start playlist data load immediately on selection; useLayoutEffect for faster playlist switch 2025-08-13 15:35:27 +02:00
Geert Rademakes
52953d7e0d feat(frontend): virtualize song list, gate DnD, remove double mapping, memoize PlaylistManager; fix TS build warnings 2025-08-13 15:20:38 +02:00
Geert Rademakes
a7ccadc8ac fix(playlists): remove-from-playlist operates on full tree and also removes ids from custom order; reload structure after save 2025-08-08 16:50:13 +02:00
Geert Rademakes
924f36f4f7 feat(ui): adjust select-all behavior to clear then select; replace playlist menu chevron with more-horizontal icon 2025-08-08 16:32:01 +02:00
Geert Rademakes
73b4bc6eb1 fix(songs): repair generic song list route; make XML import upsert + delete stale while preserving s3File; unlink musicFiles for removed songs; auto-trigger matching 2025-08-08 16:24:25 +02:00
Geert Rademakes
0073f8146d fix(reorder): enable landing indicator and drop handling for multi-drag; start reorder on multi-select; relax guards to allow multi block moves 2025-08-08 15:39:00 +02:00
Geert Rademakes
d13fe81ade merge: playlist reorder improvements (single+multi drag, end drop zone) and export order overlay; cleanup 2025-08-08 15:05:16 +02:00
Geert Rademakes
5f17380816 chore: remove verbose reorder/debug logs and tidy XML export logs; streamline FE reorder console noise 2025-08-08 15:05:10 +02:00
Geert Rademakes
5659dde540 feat(export): honor custom playlist order overlay when exporting Rekordbox XML (Entries + TRACK sequence) 2025-08-08 14:56:28 +02:00
Geert Rademakes
9249a5a4a7 feat(reorder): support dragging multiple selected songs to a specific position and to end (block move) 2025-08-08 14:55:06 +02:00
Geert Rademakes
ac52441dd1 fix(reorder): only show end-of-list drop zone during active reorder drag; reset hover indicators on drag end 2025-08-08 14:53:26 +02:00
Geert Rademakes
d0a83a85f5 feat(reorder): add end-of-list drop zone to move track to end; show hover indicator 2025-08-08 14:52:48 +02:00
Geert Rademakes
2d42c6da71 fix(reorder): stop overwriting server move with stale client order; just refresh after move; improve dnd effectAllowed/dropEffect 2025-08-08 14:47:20 +02:00
Geert Rademakes
e2d6d55433 chore(reorder-debug): add server/client logs for move and playlist order slice to diagnose ordering issue 2025-08-08 14:37:45 +02:00
Geert Rademakes
484d191201 fix(playlist-order): honor custom order in playlist songs endpoint by slicing trackIds and mapping results 2025-08-08 14:33:42 +02:00
Geert Rademakes
8136bbb959 fix(reorder): backend move endpoint and frontend use precise move to persist order reliably; refresh after move 2025-08-08 14:30:58 +02:00
Geert Rademakes
61d4ca16de feat(playlists): track custom order in separate 'order' array; reading API honors 'order' while preserving 'tracks' 2025-08-08 14:25:50 +02:00
Geert Rademakes
5a396d774e fix(playlists): markModified on children/tracks to persist order; API response confirms update 2025-08-08 14:20:48 +02:00
Geert Rademakes
5a21243f5b chore(reorder): add client debug logs; refresh playlist after reorder; backend keeps missing ids at end when reordering 2025-08-08 14:15:55 +02:00
Geert Rademakes
50a486f6d8 feat(playlist-reorder): enable intra-playlist row drag&drop with landing indicator; persist order via backend 2025-08-08 14:09:36 +02:00
Geert Rademakes
32d545959d feat(playlists): support custom per-playlist track order; backend /playlists/reorder; playlist songs endpoint honors order; frontend intra-playlist row DnD with reorder persist 2025-08-08 14:03:03 +02:00