Commit Graph

1971 Commits

Author SHA1 Message Date
Claudio Ortolina 450114100b Fix dimensions of camera button and preview 2026-05-01 22:09:44 +01:00
Claudio Ortolina ca5b13ad8d Remove some uses of List.last 2026-05-01 17:03:42 +01:00
Claudio Ortolina c11009f3f9 Update dependencies
ex_slop 0.3.1 => 0.4.0
2026-05-01 17:03:14 +01:00
Claudio Ortolina 3b558044b4 refactor: extract Records sub-contexts (Search, Import, Enrichment)
Split the 450+ line Records context into focused modules:

- Records.Search — FTS5 search, SearchParser integration, genre listing
- Records.Import — MusicBrainz release/group import, release status
- Records.Enrichment — genre population, cover refresh, color extraction,
  MusicBrainz data refresh
- Records.Query — shared helpers (essential_fields, order_alphabetically macro)

Records module is now a facade with defdelegate for compile-time safety.
CRUD and PubSub stay directly in Records. Tests moved alongside each
sub-module. Zero callers changed, 886 tests pass.
2026-04-30 17:20:37 +01:00
Claudio Ortolina 3849b338f3 Improve performance of job counting in maintenance
- Use a single query for all workers
- Replace the manual Ecto query against Oban.Job with Oban.Job.query/1
2026-04-30 14:54:56 +01:00
Claudio Ortolina 08fcd70a8c ML-154: add early platform detection for SQLite extensions 2026-04-30 13:39:39 +01:00
Claudio Ortolina 13068aa0ac ML-153: move MusicBrainz data transforms from Record 2026-04-30 13:21:18 +01:00
Claudio Ortolina b8b3b24ffa ML-151: document Assets.Cache TTL and invalidation strategy
Expand @moduledoc with cache key structure, 7-day TTL via
@one_week_seconds, periodic pruning by PruneAssetCache (every 12h),
and rationale for TTL-only invalidation (content-addressable immutable
assets). Update architecture.md entry accordingly.
2026-04-30 13:07:06 +01:00
Claudio Ortolina c489fde1cc ML-152: add /api/v1/ version prefix to all API routes 2026-04-30 11:57:43 +01:00
Claudio Ortolina f8a52993c1 ML-149: Fix selected bar not showing track data in Safari 2026-04-30 07:21:25 +01:00
Claudio Ortolina 597cc89821 ML-147: Upgrade to ServerSentEvents 1.0.0 2026-04-27 22:02:45 +01:00
Claudio Ortolina f10a932aea Re-enable medium header + checkbox for releases with 1 medium 2026-04-27 11:47:32 +01:00
Claudio Ortolina 4075ec45ac Make sure creating artist infos returns all fields 2026-04-26 19:24:56 +01:00
Claudio Ortolina b64ab98189 Extract to pipe 2026-04-26 19:08:21 +01:00
Claudio Ortolina eb9b1866a8 Streamline function implementation 2026-04-26 19:05:27 +01:00
Claudio Ortolina d6e154b7b3 Remove redundant case 2026-04-26 19:01:44 +01:00
Claudio Ortolina 5b94d6bdcf Avoid intermediate variables, and use consistent names 2026-04-26 07:57:40 +01:00
Claudio Ortolina 4fb1bf5079 Remove duplication in implementation 2026-04-25 21:34:11 +01:00
Claudio Ortolina d4132d8851 Uniform interface of lastfm refresh async function 2026-04-25 21:30:06 +01:00
Claudio Ortolina 9f8ef6c329 Use larger image for Last.fm artists 2026-04-25 21:22:18 +01:00
Claudio Ortolina 9113df5879 ML-146: honour API retry headers 2026-04-25 07:39:49 +01:00
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