Claudio Ortolina
f1e3b22f91
Make online store templates searchable
2026-03-16 11:56:39 +00:00
Claudio Ortolina
5752d1fe27
Add tests for scrobble rules search/sort
2026-03-16 08:06:48 +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
1a62360b21
Group records in records on this day widget
2026-03-12 09:09:25 +00:00
Claudio Ortolina
43dc81d051
Assert that generated PDF file always has one page
2026-03-10 15:09:33 +00:00
Claudio Ortolina
95302e069b
Improve column detection heuristics
2026-03-10 14:56:25 +00:00
Claudio Ortolina
c352ad4809
Can print an individual medium tracklist
2026-03-09 14:52:26 +00:00
Claudio Ortolina
4c6baa6e13
Improve printout PDF layout
...
Support multiple columns in case the tracklist is long, or there's
multiple media.
2026-03-09 14:44:28 +00:00
Claudio Ortolina
4569c6727e
Add function to download a record's tracklist for printing
2026-03-09 13:39:12 +00:00
Claudio Ortolina
54f19cd9a2
Fix ArtistInfo.country/1 crash when area is missing
2026-03-06 09:51:56 +00:00
Claudio Ortolina
f9b381570f
Extract artist infos fixtures
2026-03-06 08:58:59 +00:00
Claudio Ortolina
3819afca4d
Extract fixture
2026-03-06 08:53:25 +00:00
Claudio Ortolina
d4376e5fa0
Extract DB queries from MaintenanceLive into context
2026-03-05 18:01:50 +00:00
Claudio Ortolina
fb7ccad6f9
Add meaningful tests for ArtistChat and RecordChat
...
Closes #96
2026-03-05 14:43:50 +00:00
Claudio Ortolina
478832249b
Send record of the day email
2026-03-05 10:37:04 +00:00
Claudio Ortolina
c831b20317
Move error tracker notifier files to correct namespace
2026-03-04 19:39:36 +00:00
Claudio Ortolina
ad9bcd8481
Inline error tracker notification code
...
As we don't need the Discord functionality which brings quite a lot of
extra libraries/code
2026-03-04 17:19:14 +00:00
Claudio Ortolina
7ec3e68e58
Relax assertions on colors
...
As dominant colors are not stable on different environments
2026-03-03 16:13:23 +00:00
Claudio Ortolina
6d451481b7
Remove obsolete color extraction strategies
2026-03-03 16:01:25 +00:00
Claudio Ortolina
de14ec3e25
Consolidate completely stateless tests into doctests
...
Removing dupes
2026-03-03 11:30:52 +00:00
Claudio Ortolina
854e293902
Add large battery of tests, primarily workers
2026-03-01 17:03:36 +00:00
Claudio Ortolina
84323e5732
Capture logs to avoid useless test log noise
2026-03-01 08:56:42 +00:00
Claudio Ortolina
b35f4aed1d
EXP: enrich artist info data via Last.fm and produce better embeddings
2026-03-01 08:22:35 +00:00
Claudio Ortolina
871f4b3554
Extract ListeningStats out of ScrobbleActivity
2026-02-27 12:16:38 +00:00
Claudio Ortolina
16e0bf03a9
Remove Flagmojis dependency
2026-02-24 08:58:49 +00:00
Claudio Ortolina
8eaaa3cfec
Use custom country module to resolve flags more accurately
...
Ported from https://github.com/wojtekmaj/country-code-to-flag-emoji
(MIT)
2026-02-24 08:57:30 +00:00
Claudio Ortolina
1dfb2d2a6f
Use Wikipedia data for record similarity and raise similarity threshold
2026-02-19 15:51:12 +00:00
Copilot
2faddbf0c6
Add audit tooling for scrobbled tracks data quality ( #89 )
2026-02-17 11:24:45 +00:00
Claudio Ortolina
583789850c
Normalize top artist and top album counts
...
- Make sure joins don't discard tracks
- Make sure we group by names as MB ids can be empty
2026-02-15 20:35:23 +00:00
Claudio Ortolina
445033861d
Reuse fixture
2026-02-10 19:32:28 +00:00
Claudio Ortolina
fe748782c7
Reorder record sets via drag and drop
2026-02-10 11:16:41 +00:00
Claudio Ortolina
84159a1c0d
Improve test coverage
...
Files Created (8 files, 54 new tests)
Fixtures
1. test/support/fixtures/music_library/record_sets.ex — record_set/1
and record_set_with_records/2 helpers
2. test/support/fixtures/music_library/online_store_templates.ex —
online_store_template/1 helper
Context Tests
3. test/music_library/record_sets_test.exs — 20 tests covering search,
count, CRUD, add/remove/move records
4. test/music_library/online_store_templates_test.exs — 8 tests
covering list, CRUD, URL generation, validation
5. test/music_library/search_test.exs — 5 tests covering universal
search and search counts
6. test/music_library/notes_test.exs — 4 tests covering get, create,
update
LiveView Tests
7. test/music_library_web/live/record_set_live/index_test.exs — 11
tests covering listing, empty state, search, ordering,
create/edit/delete sets, remove records, reorder records
8.
test/music_library_web/live/online_store_template_live/index_test.exs —
6 tests covering listing, create/edit/delete, toggle enabled
Results
- 297 tests, 0 failures (up from 243 — 54 new tests added)
- All existing tests continue to pass
There's a remaining gettext warning that needs to be investigated
2026-02-07 10:39:22 +00:00
Claudio Ortolina
faf8500256
Ensure uniqueness of scrobble rules
2026-02-02 10:32:32 +00:00
Claudio Ortolina
5692be4e63
Update dependencies
...
credo 1.7.13 => 1.7.14 - requires updates to pass updated checks
2025-12-01 16:09:51 +00:00
Copilot
e11894c095
Batch scrobble rule application by type to reduce N queries to 2 ( #61 )
...
* Implement optimized batch rule application
- Add apply_all_album_rules/1 to batch apply all album rules in single query
- Add apply_all_artist_rules/1 to batch apply all artist rules in single query
- Update apply_all_rules/0 to use new batch functions
- Add comprehensive tests for batch application
- Use CASE statement in SQL to apply multiple rules efficiently
Co-authored-by: cloud8421 <537608+cloud8421@users.noreply.github.com >
* Add batch application support for track-filtered rules
- Extend apply_all_album_rules/2 to support filtering by tracks
- Extend apply_all_artist_rules/2 to support filtering by tracks
- Update apply_all_rules/1 to use batch functions for track-filtered application
- Remove duplicate function definitions
- Ensures both main use cases (all tracks and specific tracks) are optimized
Co-authored-by: cloud8421 <537608+cloud8421@users.noreply.github.com >
* Add comprehensive documentation for optimization
- Document the problem and solution approach
- Explain SQL generation and performance impact
- Detail trade-offs and backward compatibility
- Include future considerations and scalability notes
Co-authored-by: cloud8421 <537608+cloud8421@users.noreply.github.com >
* Apply credo suggestions and format
---------
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com >
Co-authored-by: cloud8421 <537608+cloud8421@users.noreply.github.com >
Co-authored-by: Claudio Ortolina <cloud8421@gmail.com >
2025-11-10 20:04:34 +00:00
Claudio Ortolina
d38089d82d
Show similarity in % points
2025-10-12 20:46:01 +02:00
Claudio Ortolina
ee199272b1
Use sqlite vector
2025-10-12 13:36:42 +02:00
Claudio Ortolina
14934b25d9
Load the sqlite-vec extension
2025-10-11 21:47:02 +02:00
Claudio Ortolina
9cae972bc5
Add similar records
...
Initial stab by Claude
2025-10-11 21:39:59 +02:00
Claudio Ortolina
621fe385e3
Show record status markers in scrobbled tracks index
2025-09-29 11:04:35 +03:00
Claudio Ortolina
90b3fa1fdc
Refactor Records.Cover to Assets.Image
2025-09-20 07:42:38 +03:00
Claudio Ortolina
aa72692eaf
Cache transformations
2025-09-17 16:54:47 +03:00
Claudio Ortolina
dc9c8fca8e
Add Asset.Transform module
...
Allows building URLs with embedded transformation options
2025-09-17 09:33:13 +03:00
Claudio Ortolina
eec097dd43
Address warnings
2025-09-16 13:15:16 +03:00
Claudio Ortolina
dae334b1b7
Scrobbled tracks CRUD
...
- Failing tests
- Warnings
2025-09-16 12:45:36 +03:00
Claudio Ortolina
1b89f244f8
Change test to avoid timing-related failures
...
When inserting twice, the second insertion is a no-op, due to the fact
that we use `on_conflict: :nothing` in the `Repo.insert/2` call.
This means that for fields generated client side like timestamps we
don't get the stored values, but the client side values (which haven't
been persisted).
In case of the test crossing the second boundary, the second asset would
be different because of the timestamps, and the test would fail.
This test is better. It tests that no matter how many times we insert
the same thing we always have one stored.
2025-09-15 07:42:03 +03:00