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
|
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
|
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
|
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
|
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
|
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 |
|
Geert Rademakes
|
597c8f994f
|
feat(dnd): highlight playlist drop target; show drag count badge; refine drag payload and lifecycle
|
2025-08-08 13:08:22 +02:00 |
|
Geert Rademakes
|
6917c22b94
|
feat(dnd): drag songs (with multiselect) into sidebar playlists; drop handler adds to playlist with duplicate confirm (allow or skip)
|
2025-08-08 13:00:40 +02:00 |
|
Geert Rademakes
|
dbf9dbcb8c
|
fix(sync): reference correct processed count in job result; fix(search): keep focus in search while playing by blurring audio and focusing search; cleanup lints
|
2025-08-08 11:30:59 +02:00 |
|
Geert Rademakes
|
70485e8808
|
fix(player): prevent audio element from stealing focus while playing (blur and tabIndex=-1) so search input remains usable
|
2025-08-08 11:15:47 +02:00 |
|
Geert Rademakes
|
fe282bf34f
|
feat(frontend): show Rekordbox path in SongDetails for selected song
|
2025-08-08 10:52:38 +02:00 |
|
Geert Rademakes
|
9c8bf11986
|
fix(background-jobs): poll job list continuously so newly started jobs appear immediately in the floating widget
|
2025-08-08 10:20:30 +02:00 |
|
Geert Rademakes
|
f6ecd07d98
|
feat(duplicates): add filter to show only groups where at least one song is in a playlist
|
2025-08-08 09:09:31 +02:00 |
|
Geert Rademakes
|
f7f44f2c48
|
feat(duplicates): add backend delete-duplicates and UI action to delete redundant songs after merging playlists
|
2025-08-08 09:07:45 +02:00 |
|
Geert Rademakes
|
549fd8d525
|
feat(duplicates): horizontal scroll table, keep-one merge playlists action, add length/BPM/bitrate columns\n\n- Backend: include averageBpm, bitRate in duplicates payload\n- Frontend: scrollable table with Keep action to merge playlists to selected song; show length/BPM/bitrate
|
2025-08-08 08:59:54 +02:00 |
|
Geert Rademakes
|
7dc70c3bdf
|
feat(duplicates): add backend endpoint to detect possible duplicates and new Config tab to display them\n\n- Backend: GET /api/songs/duplicates groups by normalized title+artist and lists playlists + paths\n- Frontend: DuplicatesViewer component and new tab in Configuration; fetch on open; adjustable min group size\n- API client: add getDuplicateSongs()
|
2025-08-08 08:51:23 +02:00 |
|
Geert Rademakes
|
83b4682b0e
|
chore(frontend): remove live song-list refresh during S3 sync per request; refresh now only on manual actions/page reload
|
2025-08-08 08:47:39 +02:00 |
|
Geert Rademakes
|
482460a8b7
|
feat(frontend): live-refresh song list during S3 sync so newly matched tracks show play button immediately
- BackgroundJobProgress exposes onTickWhileS3Sync callback
- App wires callback to usePaginatedSongs.refresh() to pull fresh song data while sync runs
|
2025-08-07 23:47:58 +02:00 |
|