Commit Graph

452 Commits

Author SHA1 Message Date
Claudio Ortolina 9dce1cacb9 Where possible, use built-in JSON instead of Jason
Note that it's not possible to replace any call where we encode and
pretty print, as JSON doesn't have such functionality.
2024-12-19 20:18:09 +00:00
Claudio Ortolina 45df749200 No need to create a range when total_pages is 0
Fixes:

warning: Range.new/2 and first..last default to a step of -1 when last < first.
Use Range.new(first, last, -1) or first..last//-1, or pass 1 if that was your intention
2024-12-19 19:07:08 +00:00
Claudio Ortolina 832e835252 Add function to get embeddings for arbitrary string 2024-12-18 22:20:41 +00:00
Claudio Ortolina d76c108896 Rename file to match module name 2024-12-18 21:58:07 +00:00
Claudio Ortolina 6bef3bed05 Add total for collection and wishlist albums in artist view 2024-12-18 11:33:48 +00:00
Claudio Ortolina a3306c84c3 Increase album grid density in artist view 2024-12-18 11:27:07 +00:00
Claudio Ortolina 53b89dc329 Extract Artists context 2024-12-18 11:12:06 +00:00
Claudio Ortolina 76605a1114 Add function to get similar artists 2024-12-17 20:44:31 +00:00
Claudio Ortolina c60108292a Scroll to top when paginating on small viewports 2024-12-16 18:03:26 +00:00
Claudio Ortolina e4fe4e7f4b Cache images for 24 hours 2024-12-15 12:09:29 +03:00
Claudio Ortolina 6660d195e4 Decrease visible records per page
After months of usage, I rarely paginate the list, so it's not necessary
to load 100 at a time. 20 is enough.

By matching 20 records with a 20 pool size, we should keep the repo
queue time to a minimum.
2024-12-15 11:15:46 +03:00
Claudio Ortolina a19d42ae30 Add more fixtures for release groups and releases 2024-12-14 23:24:21 +03:00
Claudio Ortolina 632f5c4661 Include album names in mb fixtures 2024-12-14 23:19:14 +03:00
Claudio Ortolina c705517415 Restore import functionality from stats
Accidentally removed in 135d1c2.
2024-12-14 17:23:59 +03:00
Claudio Ortolina 04d60b09a4 Extract search component 2024-12-13 23:22:21 +03:00
Claudio Ortolina a4f4407241 Center-ish counters in stats page 2024-12-13 22:41:42 +03:00
Claudio Ortolina f7045a9f14 Extend testing of artist page 2024-12-13 22:25:06 +03:00
Claudio Ortolina ed86ef7b5a Enable new actions menu on wishlist detail page 2024-12-12 20:23:48 +03:00
Claudio Ortolina c3f973b1e1 Move record actions into menu 2024-12-12 20:14:02 +03:00
Claudio Ortolina 91b81de0f8 Remove duplication around MusicBrainz URL generation 2024-12-11 23:54:21 +03:00
Claudio Ortolina 3409ba6d6b Fix typings on config modules 2024-12-11 23:53:29 +03:00
Claudio Ortolina 21439a580f TODO: make artist records a stream 2024-12-11 23:24:38 +03:00
Claudio Ortolina 3c85f9e974 Extract OpenAI.Completion struct 2024-12-11 23:24:16 +03:00
Claudio Ortolina 8d7fe4d660 Extract record list component 2024-12-11 22:47:23 +03:00
Claudio Ortolina 693b350db2 Add papertrail for copied code 2024-12-10 19:24:48 +03:00
Claudio Ortolina 31b6100687 Shrink buttons on mobile 2024-12-10 18:48:49 +03:00
Claudio Ortolina 44a8650c6c Move API Key to configuration 2024-12-10 16:50:37 +03:00
Claudio Ortolina b68a7ac734 Can fetch genres from OpenAI 2024-12-10 16:45:29 +03:00
Claudio Ortolina 4a706dc77a No need to expose these functions 2024-12-10 15:24:43 +03:00
Claudio Ortolina c2ccb7dde2 Add LastFm.Feed.all_artists/0 and LastFm.Feed.all_albums/0 2024-12-10 14:57:28 +03:00
Claudio Ortolina a6e1e4e34a Renamte LastFm.Feed.all/0 to LastFm.Feed.all_tracks/0 2024-12-10 14:57:06 +03:00
Claudio Ortolina f48372f7b3 Use MapSets for performance
Not noticeable with current database size, but lays a good foundation
for larger libraries.

For example, given a list of 300 artist IDs, checking if an ID is in the
list takes between 30 and 40 ms (for an ID towards the end of the list),
while the MapSet version takes consistently between 15 and 20 ms.
2024-12-10 14:21:57 +03:00
Claudio Ortolina 9e57103842 Where possible, link scrobbled artists to artist page 2024-12-10 14:13:50 +03:00
Claudio Ortolina 7e31c95839 Smooth scroll to top when paginating records 2024-12-08 15:18:14 +01:00
Claudio Ortolina 1c47473c11 Move SQLite extension loading to config/runtime.exs
Addresses deprecation mentioned at https://hexdocs.pm/ecto/Ecto.Repo.html#c:init/2
2024-12-07 20:29:33 +01:00
Claudio Ortolina 06fd591e5f Use unicode extension to normalize sorting accented records 2024-12-07 19:38:10 +01:00
Claudio Ortolina 0f926ed86a Load Sqlite unicode extension 2024-12-07 18:32:22 +01:00
Claudio Ortolina 8350ffd3a4 To get artist info, try mbid and then artist name 2024-12-04 21:07:56 +00:00
Claudio Ortolina 39b925676f Use NimbleOptions to validate MusicBrainz.Config 2024-12-04 15:01:52 +00:00
Claudio Ortolina 774c8d6006 Use NimbleOptions to validate LastFm.Config 2024-12-04 14:58:05 +00:00
Claudio Ortolina 24319b1bff Annotate templates with TODOs for markup replacement
To open source the project down the line, it makes sense to have either
everything custom or using OSS components in order to keep licensing as
simple as possible.
2024-12-04 14:43:07 +00:00
Claudio Ortolina e1dc2bfc7f Make MusicBrainz user agent configurable 2024-12-04 10:44:31 +00:00
Claudio Ortolina 7575e5978a Extract config for MusicBrainz 2024-12-04 10:33:41 +00:00
Claudio Ortolina 14518870a0 Make LastFm user agent configurable 2024-12-04 10:07:25 +00:00
Claudio Ortolina 0cae20a390 Add LastFm.Config test
It might seem redundant, but helps with refactoring down the line.
2024-12-04 09:58:42 +00:00
Claudio Ortolina 740e94fdf6 Use <.async_result> component
Removes need for custom conditional logic, and covers all needed states.
2024-12-03 23:34:25 +00:00
Claudio Ortolina 2321cc8cfb Attempt at preventing layout shifts in record show pages 2024-12-03 22:54:53 +00:00
Claudio Ortolina 2c055acad6 Fix error in rendering an artist with empty bio
Includes a refactor for a helper to test for play count
2024-12-03 22:26:41 +00:00
Claudio Ortolina 9f2335cfa0 Use correct LastFm api module 2024-12-03 20:14:48 +00:00
Claudio Ortolina 61cda5a62c Explicitly set auto-refresh config for LastFm refresh 2024-12-03 19:58:17 +00:00