Commit Graph

1941 Commits

Author SHA1 Message Date
Claudio Ortolina 62586c9ae5 Restore flex context for sheet selection bar 2026-04-23 15:12:58 +01:00
Claudio Ortolina ca9cc7687c Hide release-actions dropdown when empty 2026-04-23 15:06:45 +01:00
Claudio Ortolina 779708e62e Hide print tracklist on scrobble release page 2026-04-23 15:05:05 +01:00
Claudio Ortolina 72818bfaf2 Validate release-group shape before parsing 2026-04-23 15:00:49 +01:00
Claudio Ortolina c7c7e1fe4e Navigate from scrobble search to release-group page 2026-04-23 14:47:50 +01:00
Claudio Ortolina 0dcd6eab83 Replace /scrobble/:release_id with nested route 2026-04-23 14:39:26 +01:00
Claudio Ortolina d8041dc0dd Add /scrobble/:rg_id release-group page 2026-04-23 14:35:58 +01:00
Claudio Ortolina 4c48bda7b2 Refactor Release component to take release_id 2026-04-23 14:19:11 +01:00
Claudio Ortolina 0d1f580379 Refactor TracklistPdf to take release alone 2026-04-23 07:48:53 +01:00
Claudio Ortolina 8631b97b4d Add joinphrase to Release.Artist; parse from MB 2026-04-23 07:42:06 +01:00
Claudio Ortolina f7f38d580e Enable unaliased modules ex_slop check 2026-04-22 20:37:09 +01:00
Claudio Ortolina 8179b4317c ML-142: forgot to support timezones 2026-04-22 18:14:14 +01:00
Claudio Ortolina 0776700170 ML-142: Improve scrobble UI in the release component
- Sticky bar for easier track-based scrobbling
- Support setting custom finish time
2026-04-22 17:19:35 +01:00
Claudio Ortolina 016c4691be Canonicalize tailwind classes 2026-04-21 14:22:41 +01:00
Claudio Ortolina dd1d99a145 Fix store_embedding/3 spec to reflect float list input 2026-04-21 12:57:28 +01:00
Claudio Ortolina 30c0a961e9 Stringify format atom in get_release_status query 2026-04-21 12:57:09 +01:00
Claudio Ortolina 87522a6551 Fully qualify nested type refs in MusicBrainz.Release 2026-04-21 12:48:55 +01:00
Claudio Ortolina c7749924fe Spec release component private helpers 2026-04-21 12:48:36 +01:00
Claudio Ortolina 563135fcea Remove dead nil fallback on play_count 2026-04-21 12:48:17 +01:00
Claudio Ortolina 9840690af1 Fix nil-index crash in move_record_in_set 2026-04-21 12:47:57 +01:00
Claudio Ortolina 53348a328e Relax ScrobbleRule.t to allow unpersisted structs 2026-04-21 12:47:38 +01:00
Claudio Ortolina 87d2a8f186 Fix Maintenance vacuum/optimize return specs 2026-04-21 12:47:18 +01:00
Claudio Ortolina 40ac5bdc99 Widen Transform.new/1 spec to accept keyword list 2026-04-21 12:47:00 +01:00
Claudio Ortolina 29bfa20978 Remove unreachable error clauses in form save helpers 2026-04-21 12:46:35 +01:00
Claudio Ortolina dc71b2ff90 Fix badge align issue in barcode scan cart 2026-04-20 16:04:20 +01:00
Claudio Ortolina 8d004d39cc Extract shared cart sidebar component 2026-04-20 15:57:44 +01:00
Claudio Ortolina 9851a5c6bf Use cart with barcode scanner 2026-04-20 15:46:40 +01:00
Claudio Ortolina d47df899b7 Improve layout of add record form
Remove results count (I never looked at it)
2026-04-20 15:31:14 +01:00
Claudio Ortolina eaece07193 Count formats in results 2026-04-20 15:15:29 +01:00
Claudio Ortolina c4ebe636ff Fix ML-143 review: security, worker, and test improvements
Closes ML-143 review findings:
- cast_id/1 uses Integer.parse instead of String.to_integer
- add_to_cart validates against server-side release_groups
- JS.push payload trimmed to {id, format} only
- Oban.insert_all result checked for partial failures
- handle_async success resets @importing? to false
- ImportFromMusicbrainzReleaseGroup gets unique constraint
- Record.parse_datetime/1 made public with safe match
- Workers delegate to Record.parse_datetime/1
- Test coverage: change_format, clear_cart, wishlist single import
2026-04-20 15:15:29 +01:00
Claudio Ortolina 3f5ce060b1 Implement ML-143: Cart-style multi record import
Closes ML-143.
2026-04-20 15:15:29 +01:00
Claudio Ortolina cf872cfed0 Secondary sort for artist albums in collection (purchase date desc) 2026-04-19 21:36:07 +01:00
Claudio Ortolina 7767933742 Give more space above the universal search input 2026-04-19 21:29:40 +01:00
Claudio Ortolina da12d5d693 Handle ArtistLive.Form saved message in show view 2026-04-19 08:59:04 +01:00
Claudio Ortolina 45236e4b10 Convert ErrorIgnorer tests to doctests 2026-04-19 07:50:39 +01:00
Claudio Ortolina fb1b60373d Fix max width issue for release selector on mobile 2026-04-18 10:57:14 +01:00
Claudio Ortolina f6bcf3d970 Partial fix for barcode scan camera persisting after disconnection 2026-04-18 10:50:41 +01:00
Claudio Ortolina b37162fce3 Fix colors of mixed badges 2026-04-17 22:30:27 +01:00
Claudio Ortolina 94143010c0 Fix doubly-wrapped safe tuple in artist bio render 2026-04-17 16:00:22 +01:00
Claudio Ortolina e6a8488137 Use Notes.change_note/2 instead of Note.changeset/2 in notes component
Closes #171
2026-04-17 12:56:08 +01:00
Claudio Ortolina bbe1722c9f Handle unencodable structs in QueryReporter params 2026-04-17 07:10:45 +01:00
Claudio Ortolina fbc548e903 Explicitly trust Wikipedia's HTML
Closes #168
2026-04-16 23:14:00 +01:00
Claudio Ortolina 464e627a63 Remove unnecessary padding from detail views 2026-04-16 22:54:39 +01:00
Claudio Ortolina 6b35b5cde5 Trigger search on Enter in search inputs inside forms 2026-04-16 15:15:47 +01:00
Claudio Ortolina 58c60193f2 Use pipe 2026-04-16 10:38:08 +01:00
Claudio Ortolina 840547c509 Speed up structured modal animation 2026-04-16 09:31:30 +01:00
Claudio Ortolina fea1231304 Replace refresh scrobble list icon
Makes it for a better animation
2026-04-15 22:52:28 +01:00
Claudio Ortolina 7899f621f3 Preserve rule picker state across parent re-renders 2026-04-15 15:11:17 +01:00
Claudio Ortolina 2124c982f7 Handle possible non-existent record id in search filter 2026-04-15 15:10:28 +01:00
Claudio Ortolina c816f2de4a Add scrobbled tracks search parser
Introduces ListeningStats.SearchParser with NimbleParsec supporting
record:, album_mbid:, artist_mbid:, artist:, album:, track: filters.
Links scrobble count on record page to filtered scrobbled tracks view.
2026-04-15 14:56:38 +01:00