diff --git a/lib/music_library/scrobble_activity.ex b/lib/music_library/scrobble_activity.ex index 37e6588c..f318990d 100644 --- a/lib/music_library/scrobble_activity.ex +++ b/lib/music_library/scrobble_activity.ex @@ -223,9 +223,10 @@ defmodule MusicLibrary.ScrobbleActivity do select: %{ album_title: fragment("json_extract(album, '$.title')"), artist_name: fragment("json_extract(artist, '$.name')"), + artist_musicbrainz_id: fragment("json_extract(artist, '$.musicbrainz_id')"), play_count: count(t.scrobbled_at_uts), cover_url: fragment("max(?)", t.cover_url), - album_mbid: fragment("json_extract(album, '$.musicbrainz_id')") + album_musicbrainz_id: fragment("json_extract(album, '$.musicbrainz_id')") }, order_by: [desc: count(t.scrobbled_at_uts)], limit: ^limit @@ -235,10 +236,26 @@ defmodule MusicLibrary.ScrobbleActivity do @doc """ Gets top albums for multiple time periods (30, 90, 365 days). - Returns a map with the results for each period. + Returns a map with the results for each period, along with collected and + wishlisted releases. """ def get_top_albums_by_periods(limit \\ 10) do + last_30_days = get_top_albums_by_days(30, limit) + last_90_days = get_top_albums_by_days(90, limit) + last_365_days = get_top_albums_by_days(365, limit) + + all_album_ids = + (last_30_days ++ last_90_days ++ last_365_days) + |> Enum.map(fn t -> t.album_musicbrainz_id end) + |> Enum.uniq() + |> Enum.reject(fn musicbrainz_id -> musicbrainz_id == "" end) + + collected_releases = Collection.collected_releases(all_album_ids) + wishlisted_releases = Wishlist.wishlisted_releases(all_album_ids) + %{ + collected_releases: collected_releases, + wishlisted_releases: wishlisted_releases, last_30_days: get_top_albums_by_days(30, limit), last_90_days: get_top_albums_by_days(90, limit), last_365_days: get_top_albums_by_days(365, limit) diff --git a/lib/music_library_web/live/stats_live/index.ex b/lib/music_library_web/live/stats_live/index.ex index 37fbc0a4..fbbb3f6c 100644 --- a/lib/music_library_web/live/stats_live/index.ex +++ b/lib/music_library_web/live/stats_live/index.ex @@ -71,8 +71,23 @@ defmodule MusicLibraryWeb.StatsLive.Index do """ end + defp navigate_to_record(collected_releases, wishlisted_releases, musicbrainz_id) do + cond do + record_id = tracked_record?(collected_releases, musicbrainz_id) -> + JS.navigate(~p"/collection/#{record_id}") + + record_id = tracked_record?(wishlisted_releases, musicbrainz_id) -> + JS.navigate(~p"/wishlist/#{record_id}") + + true -> + nil + end + end + attr :albums, :list, required: true attr :title, :string, required: true + attr :collected_releases, :list, required: true + attr :wishlisted_releases, :list, required: true def top_albums_by_period(assigns) do ~H""" @@ -81,7 +96,17 @@ defmodule MusicLibraryWeb.StatsLive.Index do {@title}