Add status for each track in the scrobble activity
This commit is contained in:
@@ -46,6 +46,16 @@ defmodule MusicLibrary.Collection do
|
|||||||
Repo.one!(q)
|
Repo.one!(q)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def collected_release_ids(release_ids) do
|
||||||
|
q =
|
||||||
|
from r in fragment("records, json_each(records.release_ids)"),
|
||||||
|
where: r.value in ^release_ids,
|
||||||
|
where: fragment("records.purchased_at IS NOT NULL"),
|
||||||
|
select: r.value
|
||||||
|
|
||||||
|
Repo.all(q)
|
||||||
|
end
|
||||||
|
|
||||||
defp base_search do
|
defp base_search do
|
||||||
from r in Record,
|
from r in Record,
|
||||||
where: not is_nil(r.purchased_at)
|
where: not is_nil(r.purchased_at)
|
||||||
|
|||||||
@@ -20,6 +20,16 @@ defmodule MusicLibrary.Wishlist do
|
|||||||
Repo.aggregate(base_search(), :count)
|
Repo.aggregate(base_search(), :count)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def wishlisted_release_ids(release_ids) do
|
||||||
|
q =
|
||||||
|
from r in fragment("records, json_each(records.release_ids)"),
|
||||||
|
where: r.value in ^release_ids,
|
||||||
|
where: fragment("records.purchased_at IS NULL"),
|
||||||
|
select: r.value
|
||||||
|
|
||||||
|
Repo.all(q)
|
||||||
|
end
|
||||||
|
|
||||||
defp base_search do
|
defp base_search do
|
||||||
from r in Record,
|
from r in Record,
|
||||||
where: is_nil(r.purchased_at)
|
where: is_nil(r.purchased_at)
|
||||||
|
|||||||
@@ -20,6 +20,14 @@ defmodule MusicLibraryWeb.StatsLive.Index do
|
|||||||
|
|
||||||
recent_tracks = LastFm.Feed.all()
|
recent_tracks = LastFm.Feed.all()
|
||||||
|
|
||||||
|
release_ids =
|
||||||
|
recent_tracks
|
||||||
|
|> Enum.map(fn t -> t.album.musicbrainz_id end)
|
||||||
|
|> Enum.uniq()
|
||||||
|
|
||||||
|
collected_release_ids = Collection.collected_release_ids(release_ids)
|
||||||
|
wishlisted_release_ids = Wishlist.wishlisted_release_ids(release_ids)
|
||||||
|
|
||||||
if connected?(socket) do
|
if connected?(socket) do
|
||||||
LastFm.Feed.subscribe()
|
LastFm.Feed.subscribe()
|
||||||
end
|
end
|
||||||
@@ -37,6 +45,8 @@ defmodule MusicLibraryWeb.StatsLive.Index do
|
|||||||
collection_count: collection_count,
|
collection_count: collection_count,
|
||||||
wishlist_count: wishlist_count,
|
wishlist_count: wishlist_count,
|
||||||
latest_record: latest_record,
|
latest_record: latest_record,
|
||||||
|
collected_release_ids: collected_release_ids,
|
||||||
|
wishlisted_release_ids: wishlisted_release_ids,
|
||||||
nav_section: :stats
|
nav_section: :stats
|
||||||
)}
|
)}
|
||||||
end
|
end
|
||||||
|
|||||||
@@ -100,7 +100,40 @@
|
|||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="relative flex-none">
|
<span
|
||||||
|
:if={track.album.musicbrainz_id in @collected_release_ids}
|
||||||
|
class={[
|
||||||
|
"inline-flex items-center rounded-md",
|
||||||
|
"px-2 py-1 text-xs font-medium",
|
||||||
|
"ring-1 ring-inset",
|
||||||
|
"bg-green-50 dark:bg-green-500/10",
|
||||||
|
"text-green-700 dark:text-green-400",
|
||||||
|
"ring-green-600/20 dark:ring-green-500/20"
|
||||||
|
]}
|
||||||
|
>
|
||||||
|
<%= gettext("Collected") %>
|
||||||
|
</span>
|
||||||
|
<span
|
||||||
|
:if={track.album.musicbrainz_id in @wishlisted_release_ids}
|
||||||
|
class={[
|
||||||
|
"inline-flex items-center rounded-md",
|
||||||
|
"px-2 py-1 text-xs font-medium",
|
||||||
|
"ring-1 ring-inset",
|
||||||
|
"bg-yellow-50 dark:bg-yellow-400/10",
|
||||||
|
"text-yellow-800 dark:text-yellow-500",
|
||||||
|
"ring-yellow-600/20 dark:ring-yellow-400/20"
|
||||||
|
]}
|
||||||
|
>
|
||||||
|
<%= gettext("Wishlisted") %>
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<div
|
||||||
|
:if={
|
||||||
|
track.album.musicbrainz_id not in @collected_release_ids and
|
||||||
|
track.album.musicbrainz_id not in @wishlisted_release_ids
|
||||||
|
}
|
||||||
|
class="relative flex-none"
|
||||||
|
>
|
||||||
<button
|
<button
|
||||||
type="button"
|
type="button"
|
||||||
class="text-zinc-500 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-zinc-300"
|
class="text-zinc-500 hover:text-zinc-900 dark:text-zinc-400 dark:hover:text-zinc-300"
|
||||||
|
|||||||
@@ -82,8 +82,8 @@ msgid "Edit"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/music_library_web/live/record_live/index.ex:121
|
#: lib/music_library_web/live/record_live/index.ex:121
|
||||||
#: lib/music_library_web/live/stats_live/index.ex:60
|
#: lib/music_library_web/live/stats_live/index.ex:70
|
||||||
#: lib/music_library_web/live/stats_live/index.ex:66
|
#: lib/music_library_web/live/stats_live/index.ex:76
|
||||||
#: lib/music_library_web/live/wishlist_live/index.ex:117
|
#: lib/music_library_web/live/wishlist_live/index.ex:117
|
||||||
#: lib/music_library_web/live/wishlist_live/index.ex:124
|
#: lib/music_library_web/live/wishlist_live/index.ex:124
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
@@ -177,7 +177,7 @@ msgid "No results"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/music_library_web/live/record_live/index.html.heex:89
|
#: lib/music_library_web/live/record_live/index.html.heex:89
|
||||||
#: lib/music_library_web/live/stats_live/index.html.heex:112
|
#: lib/music_library_web/live/stats_live/index.html.heex:145
|
||||||
#: lib/music_library_web/live/wishlist_live/index.html.heex:89
|
#: lib/music_library_web/live/wishlist_live/index.html.heex:89
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Open options"
|
msgid "Open options"
|
||||||
@@ -210,7 +210,7 @@ msgid "Purchased on"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/music_library_web/live/record_live/index.ex:112
|
#: lib/music_library_web/live/record_live/index.ex:112
|
||||||
#: lib/music_library_web/live/stats_live/index.ex:52
|
#: lib/music_library_web/live/stats_live/index.ex:62
|
||||||
#: lib/music_library_web/live/wishlist_live/index.ex:109
|
#: lib/music_library_web/live/wishlist_live/index.ex:109
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Record imported successfully"
|
msgid "Record imported successfully"
|
||||||
@@ -273,7 +273,7 @@ msgid "Something went wrong!"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: lib/music_library_web/components/layouts/app.html.heex:7
|
#: lib/music_library_web/components/layouts/app.html.heex:7
|
||||||
#: lib/music_library_web/live/stats_live/index.ex:34
|
#: lib/music_library_web/live/stats_live/index.ex:42
|
||||||
#, elixir-autogen, elixir-format
|
#, elixir-autogen, elixir-format
|
||||||
msgid "Stats"
|
msgid "Stats"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@@ -371,3 +371,13 @@ msgstr ""
|
|||||||
#, 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:114
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Collected"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: lib/music_library_web/live/stats_live/index.html.heex:127
|
||||||
|
#, elixir-autogen, elixir-format
|
||||||
|
msgid "Wishlisted"
|
||||||
|
msgstr ""
|
||||||
|
|||||||
Reference in New Issue
Block a user