134 Commits

Author SHA1 Message Date
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
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
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
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
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
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
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
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
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
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
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
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
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
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
Geert Rademakes
91fd5077d4 chore(dnd): remove debug logs and globals; keep clean drag/drop with proper handlers and UX; no functional changes 2025-08-08 13:52:32 +02:00
Geert Rademakes
e622219e12 fix(dnd): pass onDropSongs into top-level PlaylistItem instances as well (not only nested) 2025-08-08 13:48:23 +02:00
Geert Rademakes
dc11487a9f fix(dnd): bubble drop handler through nested folders; add debug log on handler invoke; harden /playlists/batch insertMany 2025-08-08 13:39:39 +02:00
Geert Rademakes
6eabfdedd0 perf(jobs): adaptive polling (2s with active jobs, 10s when idle) 2025-08-08 13:36:50 +02:00
Geert Rademakes
3f57904dd7 fix(dnd): ensure drop triggers by preventing default and stopping propagation; set dropEffect=copy on dragover 2025-08-08 13:35:54 +02:00
Geert Rademakes
0c8e00389b fix(playlists): modify full playlist tree when adding tracks (avoid structure-only overwrite); then reload structure for counters 2025-08-08 13:29:58 +02:00
Geert Rademakes
5a6710b0eb fix(dnd): robust drop parsing with window fallback; keep previous sidebar border look; add global payload for reliability 2025-08-08 13:27:46 +02:00
Geert Rademakes
8394f4b42f ui(playlists): restore subtle borders; use box-shadow for drag highlight without altering base border styles 2025-08-08 13:25:16 +02:00
Geert Rademakes
4e123d2597 fix(dnd): avoid parsing during dragover; only inspect types; parse on drop with guards and log raw length 2025-08-08 13:24:13 +02:00
Geert Rademakes
b534485bde chore(dnd-debug): add console.debug logs for dragover/drop, fix highlighting conditions, log drag payload 2025-08-08 13:22:20 +02:00
Geert Rademakes
8a9f51a0c6 fix(dnd): align drop flow with modal add; use same backend save and show success toast; improve payload parsing for drop targets 2025-08-08 13:17:15 +02:00
Geert Rademakes
c7dd2e6d33 fix(dnd): ensure drop detects payload; set text/plain fallback; refresh playlist structure after add 2025-08-08 13:11:40 +02:00