Commit Graph

135 Commits

Author SHA1 Message Date
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