Link to collected albums in scrobble activity
This commit is contained in:
@@ -50,14 +50,14 @@ defmodule MusicLibrary.Collection do
|
|||||||
Repo.one!(q)
|
Repo.one!(q)
|
||||||
end
|
end
|
||||||
|
|
||||||
def collected_release_ids(release_ids) do
|
def collected_releases(release_ids) do
|
||||||
q =
|
q =
|
||||||
from r in fragment("records, json_each(records.release_ids)"),
|
from r in fragment("records, json_each(records.release_ids)"),
|
||||||
where: r.value in ^release_ids,
|
where: r.value in ^release_ids,
|
||||||
where: fragment("records.purchased_at IS NOT NULL"),
|
where: fragment("records.purchased_at IS NOT NULL"),
|
||||||
select: r.value
|
select: %{record_id: fragment("records.id"), release_id: r.value}
|
||||||
|
|
||||||
q |> Repo.all() |> MapSet.new()
|
q |> Repo.all()
|
||||||
end
|
end
|
||||||
|
|
||||||
defp base_search do
|
defp base_search do
|
||||||
|
|||||||
@@ -88,7 +88,7 @@ defmodule MusicLibraryWeb.StatsLive.Index do
|
|||||||
defp assign_scrobble_activity(socket, recent_tracks) do
|
defp assign_scrobble_activity(socket, recent_tracks) do
|
||||||
recent_release_ids = recent_release_ids(recent_tracks)
|
recent_release_ids = recent_release_ids(recent_tracks)
|
||||||
|
|
||||||
collected_release_ids = Collection.collected_release_ids(recent_release_ids)
|
collected_releases = Collection.collected_releases(recent_release_ids)
|
||||||
wishlisted_release_ids = Wishlist.wishlisted_release_ids(recent_release_ids)
|
wishlisted_release_ids = Wishlist.wishlisted_release_ids(recent_release_ids)
|
||||||
|
|
||||||
all_artist_ids = Artists.get_all_artist_ids()
|
all_artist_ids = Artists.get_all_artist_ids()
|
||||||
@@ -96,7 +96,7 @@ defmodule MusicLibraryWeb.StatsLive.Index do
|
|||||||
artist_ids = MapSet.intersection(all_artist_ids, recent_artist_ids)
|
artist_ids = MapSet.intersection(all_artist_ids, recent_artist_ids)
|
||||||
|
|
||||||
assign(socket,
|
assign(socket,
|
||||||
collected_release_ids: collected_release_ids,
|
collected_releases: collected_releases,
|
||||||
wishlisted_release_ids: wishlisted_release_ids,
|
wishlisted_release_ids: wishlisted_release_ids,
|
||||||
artist_ids: artist_ids
|
artist_ids: artist_ids
|
||||||
)
|
)
|
||||||
@@ -117,6 +117,12 @@ defmodule MusicLibraryWeb.StatsLive.Index do
|
|||||||
|> MapSet.new()
|
|> MapSet.new()
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp collected_record?(collected_releases, r_id) do
|
||||||
|
Enum.find_value(collected_releases, fn %{record_id: record_id, release_id: release_id} ->
|
||||||
|
if release_id == r_id, do: record_id
|
||||||
|
end)
|
||||||
|
end
|
||||||
|
|
||||||
# The Tailwind build step requires all needed classes to be explicitly referenced
|
# The Tailwind build step requires all needed classes to be explicitly referenced
|
||||||
# in the source code, and not dynamically generated. This implies that one cannot
|
# in the source code, and not dynamically generated. This implies that one cannot
|
||||||
# (for example) interpolate a number in a class name.
|
# (for example) interpolate a number in a class name.
|
||||||
|
|||||||
@@ -142,19 +142,21 @@
|
|||||||
>
|
>
|
||||||
{gettext("No MB ID")}
|
{gettext("No MB ID")}
|
||||||
</span>
|
</span>
|
||||||
<span
|
<.link
|
||||||
:if={track.album.musicbrainz_id in @collected_release_ids}
|
:if={record_id = collected_record?(@collected_releases, track.album.musicbrainz_id)}
|
||||||
class={[
|
navigate={~p"/collection/#{record_id}"}
|
||||||
|
>
|
||||||
|
<span class={[
|
||||||
"inline-flex items-center rounded-md",
|
"inline-flex items-center rounded-md",
|
||||||
"px-2 py-1 text-xs font-medium",
|
"px-2 py-1 text-xs font-medium",
|
||||||
"ring-1 ring-inset",
|
"ring-1 ring-inset",
|
||||||
"bg-green-50 dark:bg-green-500/10",
|
"bg-green-50 dark:bg-green-500/10",
|
||||||
"text-green-700 dark:text-green-400",
|
"text-green-700 dark:text-green-400",
|
||||||
"ring-green-600/20 dark:ring-green-500/20"
|
"ring-green-600/20 dark:ring-green-500/20"
|
||||||
]}
|
]}>
|
||||||
>
|
{gettext("Collected")}
|
||||||
{gettext("Collected")}
|
</span>
|
||||||
</span>
|
</.link>
|
||||||
<span
|
<span
|
||||||
:if={track.album.musicbrainz_id in @wishlisted_release_ids}
|
:if={track.album.musicbrainz_id in @wishlisted_release_ids}
|
||||||
class={[
|
class={[
|
||||||
@@ -173,7 +175,7 @@
|
|||||||
<div
|
<div
|
||||||
:if={
|
:if={
|
||||||
track.album.musicbrainz_id !== "" and
|
track.album.musicbrainz_id !== "" and
|
||||||
track.album.musicbrainz_id not in @collected_release_ids and
|
!collected_record?(@collected_releases, track.album.musicbrainz_id) and
|
||||||
track.album.musicbrainz_id not in @wishlisted_release_ids
|
track.album.musicbrainz_id not in @wishlisted_release_ids
|
||||||
}
|
}
|
||||||
class="relative flex-none"
|
class="relative flex-none"
|
||||||
|
|||||||
@@ -340,17 +340,17 @@ msgid "Scrobble activity"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/music_library_web/live/record_live/import_component.ex:80
|
#: lib/music_library_web/live/record_live/import_component.ex:80
|
||||||
#: lib/music_library_web/live/stats_live/index.html.heex:189
|
#: lib/music_library_web/live/stats_live/index.html.heex:191
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Choose which format to import"
|
msgid "Choose which format to import"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/music_library_web/live/stats_live/index.html.heex:156
|
#: lib/music_library_web/live/stats_live/index.html.heex:157
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Collected"
|
msgid "Collected"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/music_library_web/live/stats_live/index.html.heex:169
|
#: lib/music_library_web/live/stats_live/index.html.heex:171
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Wishlisted"
|
msgid "Wishlisted"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|||||||
Reference in New Issue
Block a user