Commit Graph

531 Commits

Author SHA1 Message Date
Claudio Ortolina c913dab692 Return controlled errors from genre population
Closes #142
2026-03-30 15:01:42 +01:00
Claudio Ortolina 92a36b915a Harden public asset endpoint against invalid payloads
Closes #143
2026-03-30 14:56:40 +01:00
Claudio Ortolina b0018db89d Improve error handling for color extraction
Includes a around embedding generation, which was happening twice (the
first call was redundant as record embeddings are always regenerated
after their parent artist embeddings are regenerated).

Closes #144.
2026-03-30 14:29:44 +01:00
Claudio Ortolina bfc6cfd9c1 Handle transport errors in RefreshScrobbles worker 2026-03-29 16:45:38 +01:00
Claudio Ortolina 027f9d1a2d Can reset Last.fm account from maintenance page 2026-03-29 09:12:53 +01:00
Claudio Ortolina 2e22ace7cf Move RecordsOnThisDayEmail to MusicLibraryWeb namespace 2026-03-28 10:25:03 +00:00
Claudio Ortolina b2575eb802 Make sure that list_enabled_rules returns ALL rules
Fixes partially working scrobble rule application
2026-03-28 10:07:08 +00:00
Claudio Ortolina 5c5a523fe6 Move scrobble refresh infra to Oban 2026-03-28 09:00:18 +00:00
Claudio Ortolina 47f8eddff1 Move BackfillScrobbledTracks worker under MusicLibrary namespace 2026-03-28 08:05:02 +00:00
Claudio Ortolina 61dd3f45c7 Move refresh config and callers to ListeningStats 2026-03-27 23:14:09 +00:00
Claudio Ortolina fa5e13f303 Add refresh/0 to ListeningStats 2026-03-27 23:08:08 +00:00
Claudio Ortolina 11f080b163 Add ListeningStats.Refresh GenServer 2026-03-27 23:06:05 +00:00
Claudio Ortolina 9643e2141c Add update/1 and subscribe/0 to ListeningStats 2026-03-27 23:03:23 +00:00
Claudio Ortolina e575f2af9e Stub color extractor in tests
Makes the test suite much faster
2026-03-26 22:58:39 +00:00
Claudio Ortolina 77aae3be38 Document casting of id param
Closes #136
2026-03-25 12:03:05 +00:00
Claudio Ortolina f27b647f93 Add @foreign_key_type to Note and ArtistInfo
Closes #135
2026-03-25 12:03:02 +00:00
Claudio Ortolina 09f61b6039 Move asset pruning logic to Assets context
Closes #130
2026-03-25 11:55:28 +00:00
Claudio Ortolina 0ccaf46ebd Standardize fetch_* to refresh_* in Artists context
Closes #132
2026-03-25 11:52:43 +00:00
Claudio Ortolina e4eccf4606 Move embedding regeneration to Records context
Closes #131
2026-03-25 11:48:46 +00:00
Claudio Ortolina abac91aa42 Standardize pagination to Keyword.get pattern
Closes #137.
2026-03-25 11:45:21 +00:00
Claudio Ortolina 766a1dd7ed Use lazy Logger in PruneAssets worker
Closes #139
2026-03-25 11:29:21 +00:00
Claudio Ortolina 505bf7cbe4 Fix artist_play_count to remove duplicates 2026-03-24 15:28:07 +00:00
Claudio Ortolina c9283d7f28 Compute artist play count from db 2026-03-24 15:07:50 +00:00
Claudio Ortolina 16bd569990 Update records on this day email sender and prefix 2026-03-23 11:24:57 +00:00
Claudio Ortolina 59ce580b99 Can filter records by release year 2026-03-21 09:21:21 +00:00
Claudio Ortolina 5a27fc46ac Add Top 20 Release Years widget 2026-03-21 09:02:25 +00:00
Claudio Ortolina ccc929e939 Deduplicate tracks in ListeningStats queries
When multiple records share MusicBrainz release IDs, the left joins in
ListeningStats fan out — producing duplicate rows per scrobbled track.
Fix by grouping release subqueries on release_id with MIN(record_id)
before joining, so each release maps to exactly one record.
2026-03-20 12:48:40 +00:00
Claudio Ortolina 715a1e1f69 Consolidate handling of artist joinphrases 2026-03-19 15:09:34 +00:00
Claudio Ortolina 7d55dfd9ae Have the AI always provide at least one link when answering questions 2026-03-19 14:30:04 +00:00
Claudio Ortolina 1001610472 First pass at having a chat count in the entity pages 2026-03-19 12:28:58 +00:00
Claudio Ortolina 63c95ff1e2 Move all chat related code under chats 2026-03-17 14:30:24 +00:00
Claudio Ortolina 3f95aee7a7 Cap message content 2026-03-17 13:51:38 +00:00
Claudio Ortolina 8fd8dde73d Persist chat history 2026-03-17 13:50:01 +00:00
Claudio Ortolina f1e3b22f91 Make online store templates searchable 2026-03-16 11:56:39 +00:00
Claudio Ortolina 3fb6c93d9d Add sorting optoins to scrobble rules page 2026-03-16 08:03:47 +00:00
Claudio Ortolina 43b054b34a Search scrobble rules, improved layout 2026-03-16 07:58:21 +00:00
Claudio Ortolina d815928f91 Fix SearchParser catch-all wiping valid filters
The `_, %{}` catch-all in `normalize/1` matched any map, so an
invalid filter (e.g. `format:vin`) would reset the accumulator
even when valid filters were already collected. Add a `map_size`
guard so it only returns `%{query: ""}` for a truly empty
accumulator. Also update the moduledoc.
2026-03-15 18:56:30 +00:00
Claudio Ortolina 4fb148e9db Simplify signatures of scrobbling functions 2026-03-14 22:22:41 +00:00
Claudio Ortolina be563d8fca Streamline record set items reordering query 2026-03-13 16:26:01 +00:00
Claudio Ortolina 9e1dbfd530 Re-enable Credo ModuleDoc check
Closes #108
2026-03-13 10:52:01 +00:00
Claudio Ortolina 4977f4631c Show grouped records in records on this day email 2026-03-12 17:23:22 +00:00
Claudio Ortolina dbc6d029b4 Move collected artist IDs query to Collection context
Closes #112
2026-03-12 16:58:31 +00:00
Claudio Ortolina d057f29ba1 Split ScrobbleActivity into focused modules
Move track CRUD/listing to ListeningStats and diagnostics
to Maintenance, leaving ScrobbleActivity for scrobbling only.

Closes #111
2026-03-12 16:51:33 +00:00
Claudio Ortolina ee4d2555ee Move scrobble queries from Records to ListeningStats
Closes #110
2026-03-12 16:32:10 +00:00
Claudio Ortolina 24efa3986c Route artist search queries through Artists context
Closes #113
2026-03-12 16:21:04 +00:00
Claudio Ortolina 24863b16c4 Remove unused Logger requires 2026-03-12 14:57:48 +00:00
Claudio Ortolina 1a62360b21 Group records in records on this day widget 2026-03-12 09:09:25 +00:00
Claudio Ortolina 159d5ad695 Include more maintenance tasks
- Asset tasks
- Records on this day email
2026-03-11 09:31:59 +00:00
Claudio Ortolina 97e9cdf6c4 Spell out Purchased on label in records email 2026-03-11 08:40:42 +00:00
Claudio Ortolina 20b497bbb8 Don't track route not found errors 2026-03-10 20:05:27 +00:00