176 Commits

Author SHA1 Message Date
Geert Rademakes
aa04849442 feat: UX improvements for frontend
- Clear selected song when changing playlists (already implemented)
- Replace 'Add to playlist...' and 'Remove from playlist' buttons with 'Actions' dropdown in PaginatedSongList
- Add key (tonality) next to duration in song list display format (e.g., 1:16 - A8)
- Update song matching page title to include storage provider (e.g., 'Sync and Matching (WEBDAV)')
- Remove storage provider text from sync buttons for cleaner interface
- Fix bulk selection state clearing when switching playlists to prevent stale selections
2025-09-19 10:19:40 +02:00
Geert Rademakes
e58d42bea2 Fix WebDAV music seeking functionality
- Add proxy endpoint for WebDAV streaming with authentication
- Implement range request support for audio seeking
- Update streaming endpoint to use proxy for WebDAV, presigned URLs for S3
- Add proper HTTP headers for audio streaming (Accept-Ranges, Content-Range)
- Fix music player seeking issue where clicking progress bar would reset playback

The WebDAV integration now supports proper audio seeking by using a backend
proxy that handles WebDAV authentication and range requests, allowing users
to click anywhere on the progress bar to seek to that position in the track.
2025-09-18 08:58:49 +02:00
Geert Rademakes
9de7564c18 Fix WebDAV file listing issue and add AIFF support
- Fix WebDAV service to find all 4,101 MP3 files instead of 1,023
- Add support for AIFF files (.aif, .aiff) in audio detection
- Update audioMetadataService to recognize AIFF formats
- Simplify BackgroundJobProgress component polling logic
- Add maxDepth parameter to WebDAV directory listing
- Add comprehensive test scripts for debugging WebDAV integration

The WebDAV integration now correctly processes all 4,257 audio files
from the music collection, including 4,101 MP3 files and 156 other
audio formats (FLAC, WAV, AIFF, M4A, OGG).
2025-09-17 22:52:15 +02:00
Geert Rademakes
d747830384 Working webdav backend! 2025-09-17 13:22:19 +02:00
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