Commit Graph

212 Commits

Author SHA1 Message Date
Claudio Ortolina 611ca7e386 Rename vertical_bar_chart -> horizontal_bar_chart 2026-05-31 21:13:53 +03:00
Claudio Ortolina dd24258f33 Make stats formats and types counters sync 2026-05-27 23:45:29 +03:00
Claudio Ortolina 118171ed8a ML-169.8: restore formats/types stats position after counters
Formats and types stats should appear directly after the record counters,
before the TopArtists/TopAlbums/OnThisDay grid. The refactor had
accidentally moved them below.
2026-05-25 11:32:48 +03:00
Claudio Ortolina 2d8989a8d0 ML-169.8: keep latest record query synchronous
get_latest_record is a single fast ORDER BY LIMIT 1 query --
no reason to async-load it. Removes the <.async_result> wrapper
and the now-unnecessary render_async() from its test.
2026-05-25 09:42:14 +03:00
Claudio Ortolina f347f56218 ML-169.8: reduce Stats mount sync queries to 3
Move 7 non-critical queries out of synchronous mount into assign_async
and start_async tasks with skeleton loading placeholders.

Only scalar badge counters (collection count, wishlist count, scrobble
count) remain synchronous. All async sections use <.async_result> with
loading and failed slots. Scrobble activity preserves LiveView streams
via handle_async. On-this-day date changes use AsyncResult.ok/2.
2026-05-25 09:31:43 +03:00
Claudio Ortolina d03e288353 Make sure top_by_period components have a proper ID 2026-04-23 16:41:18 +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 b37162fce3 Fix colors of mixed badges 2026-04-17 22:30:27 +01:00
Claudio Ortolina 851cb36858 Fix dl accessibility violations on stats dashboard 2026-04-15 14:16:24 +01:00
Claudio Ortolina 405235e2b3 Add picker to create scrobble rules on the fly 2026-04-15 10:53:58 +01:00
Claudio Ortolina 8db324d74a Extract shared badge/dropdown to ScrobbleComponents 2026-04-14 16:50:40 +01:00
Claudio Ortolina 888b5a68e6 Update all callers to use matching_records
Migrate StatsLive.Index, ScrobbledTracksLive.Index, and TopAlbums to
consume matching_records list instead of scalar record IDs. Remove the
derive_legacy_record_ids bridge function. TopAlbums now uses a dropdown
for multi-record badges with play count display.
2026-04-14 16:14:59 +01:00
Claudio Ortolina 40ea3aaa2a Add fallback error images for scrobble activity 2026-04-05 08:35:23 +01:00
Claudio Ortolina 4e8f1fd6f0 Fix cover image distortion in scrobble activity 2026-04-01 21:14:18 +01:00
Claudio Ortolina bb1c53c44f Don't display some stats when there's no record 2026-03-29 08:48:30 +01:00
Claudio Ortolina 0e6760ea73 Fix display of latest record when db is empty 2026-03-29 08:39:13 +01:00
Claudio Ortolina 87b1b4df4b Replace top_by widgets loading indicator with a skeleton 2026-03-28 21:40:51 +00:00
Claudio Ortolina d45aff21ec Rename refresh_lastfm_feed to refresh_scrobbles 2026-03-28 08:59:22 +00:00
Claudio Ortolina 61dd3f45c7 Move refresh config and callers to ListeningStats 2026-03-27 23:14:09 +00:00
Claudio Ortolina 88542cc537 Fix Tailwind layout and spacing issues 2026-03-27 16:11:05 +00:00
Claudio Ortolina 8c7f2f5703 Make sure toasts are synced 2026-03-24 14:01:56 +00:00
Claudio Ortolina 1bd5b54bb5 Make hover effect stand out more 2026-03-24 11:05:17 +00:00
Claudio Ortolina f3c50f05b8 Fix gaps and margins 2026-03-22 18:58:12 +00:00
Claudio Ortolina 9877751ff4 Reduce size of scrobble activity tabs list 2026-03-22 18:49:46 +00:00
Claudio Ortolina 87cbf55ee5 Uniform use of .section/1 across all stats components 2026-03-22 18:47:27 +00:00
Claudio Ortolina a83efe9908 Extract an internal section/1 component 2026-03-22 18:37:24 +00:00
Claudio Ortolina 9aed3afd7a Re-align buttons for scrobble activity 2026-03-22 17:38:38 +00:00
Claudio Ortolina dcf89fbed3 Add missing attrs 2026-03-22 17:30:45 +00:00
Claudio Ortolina 710931dd4a Refactor stats page with semantic components to experiment with alternative layouts 2026-03-22 17:15:48 +00:00
Claudio Ortolina 4c07eabd24 Move records on this day up on mobile 2026-03-22 11:03:46 +00:00
Claudio Ortolina 83c9d710ef Change color of Top 20 release years chart 2026-03-21 20:57:40 +00:00
Claudio Ortolina b85ce0831c Move filters/selectors to the side of the title 2026-03-21 18:26:39 +00:00
Claudio Ortolina 19428b85f2 Move records on this day to the left, re-position filter 2026-03-21 18:12:00 +00:00
Claudio Ortolina b12e70f471 Refactor charts to use plain HTML
More responsive, less edge cases, and simpler to maintain.
2026-03-21 18:00:06 +00:00
Claudio Ortolina a479d60da3 Link top 20 years chart 2026-03-21 09:27:53 +00:00
Claudio Ortolina 5a27fc46ac Add Top 20 Release Years widget 2026-03-21 09:02:25 +00:00
Claudio Ortolina 55aa7aa9d3 Move records on this day near top_* sections 2026-03-21 08:38:45 +00:00
Claudio Ortolina 47ca6fa1d2 Add canonical_tailwind to get correct formatting for tailwind classes 2026-03-20 13:02:32 +00:00
Claudio Ortolina 5a418248ad Use same gaps in stats page
Closes #120
2026-03-16 19:30:52 +00:00
Claudio Ortolina 4d1ac9652c Link the scrobbled count in stats 2026-03-14 09:59:09 +00:00
Claudio Ortolina 1a62360b21 Group records in records on this day widget 2026-03-12 09:09:25 +00:00
Claudio Ortolina 8d9bf78974 Extract shared TopByPeriod LiveComponent
Closes #103
2026-03-12 07:38:58 +00:00
Claudio Ortolina 08f7565d44 Replace inspect(reason) with friendly error messages
Closes #81
2026-03-05 20:25:13 +00:00
Claudio Ortolina 871f4b3554 Extract ListeningStats out of ScrobbleActivity 2026-02-27 12:16:38 +00:00
Claudio Ortolina e9b9717b08 Inline templates inside LV modules 2026-02-24 17:20:21 +00:00
Claudio Ortolina c19ca503e5 Remove TODOs around replacing components 2026-02-17 08:09:00 +00:00
Claudio Ortolina 48c7d16c89 Consolidate a few components 2026-02-10 19:32:28 +00:00
Claudio Ortolina a7056aa8d9 Extract some reused components 2026-02-07 17:23:13 +00:00
Claudio Ortolina 226cd76540 Account for white bg images in top X sections 2026-02-02 15:13:00 +00:00