Commit Graph

1950 Commits

Author SHA1 Message Date
Claudio Ortolina ab4eaa8890 Use if instead of case -> nil 2026-04-25 06:37:02 +01:00
Claudio Ortolina 4418fbc377 Remove unnecessary specs
Function is private, and AsyncResult doesn't expose `t()`
2026-04-24 14:13:04 +01:00
Claudio Ortolina a1c665b490 ML-21: Classify API errors as transient vs permanent 2026-04-24 14:02:15 +01:00
Claudio Ortolina 2e38412a84 ML-10: break compile cycle via Artists → Collection edge 2026-04-24 10:49:47 +01:00
Claudio Ortolina 252caf31ce ML-11: Improve performance of Telemetry.Storage with in-memory buffer 2026-04-24 10:30:28 +01:00
Claudio Ortolina 90db113845 ML-5: document Last.fm OAuth callback trust boundary
Closes GitHub issue #178.
2026-04-24 08:05:07 +01:00
Claudio Ortolina 0784fc5e0c Fix page title for scrobble anything release page 2026-04-23 21:06:32 +01:00
Claudio Ortolina 1bd5707cb4 Fix page title for scrobble anything index and release group route 2026-04-23 21:06:12 +01:00
Claudio Ortolina d03e288353 Make sure top_by_period components have a proper ID 2026-04-23 16:41:18 +01:00
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