@@ -170,20 +170,9 @@ defmodule MusicLibrary.ListeningStats do
|
|||||||
page_size = Map.get(params, :page_size, @pagination[:tracks_page_size])
|
page_size = Map.get(params, :page_size, @pagination[:tracks_page_size])
|
||||||
order = Map.get(params, :order, :scrobbled_at)
|
order = Map.get(params, :order, :scrobbled_at)
|
||||||
|
|
||||||
base_query = tracks_with_record_info_query()
|
|
||||||
|
|
||||||
search_query =
|
search_query =
|
||||||
if query == "" do
|
tracks_with_record_info_query()
|
||||||
base_query
|
|> search_query(query)
|
||||||
else
|
|
||||||
query_term = "%#{String.downcase(query)}%"
|
|
||||||
|
|
||||||
from [t, cr, wr, ar] in base_query,
|
|
||||||
where:
|
|
||||||
like(fragment("lower(?)", t.title), ^query_term) or
|
|
||||||
like(fragment("lower(json_extract(?, '$.name'))", t.artist), ^query_term) or
|
|
||||||
like(fragment("lower(json_extract(?, '$.title'))", t.album), ^query_term)
|
|
||||||
end
|
|
||||||
|
|
||||||
ordered_query =
|
ordered_query =
|
||||||
case order do
|
case order do
|
||||||
@@ -234,22 +223,9 @@ defmodule MusicLibrary.ListeningStats do
|
|||||||
|
|
||||||
@spec search_tracks_count(String.t()) :: non_neg_integer()
|
@spec search_tracks_count(String.t()) :: non_neg_integer()
|
||||||
def search_tracks_count(query \\ "") do
|
def search_tracks_count(query \\ "") do
|
||||||
base_query = from(t in Track)
|
from(t in Track)
|
||||||
|
|> search_query(query)
|
||||||
search_query =
|
|> Repo.aggregate(:count, :scrobbled_at_uts)
|
||||||
if query == "" do
|
|
||||||
base_query
|
|
||||||
else
|
|
||||||
query_term = "%#{String.downcase(query)}%"
|
|
||||||
|
|
||||||
from t in base_query,
|
|
||||||
where:
|
|
||||||
like(fragment("lower(?)", t.title), ^query_term) or
|
|
||||||
like(fragment("lower(json_extract(artist, '$.name'))"), ^query_term) or
|
|
||||||
like(fragment("lower(json_extract(album, '$.title'))"), ^query_term)
|
|
||||||
end
|
|
||||||
|
|
||||||
Repo.aggregate(search_query, :count, :scrobbled_at_uts)
|
|
||||||
end
|
end
|
||||||
|
|
||||||
# Top albums/artists by period
|
# Top albums/artists by period
|
||||||
@@ -478,6 +454,18 @@ defmodule MusicLibrary.ListeningStats do
|
|||||||
fragment("? ->> '$.name'", t.artist) == ^main_artist_name
|
fragment("? ->> '$.name'", t.artist) == ^main_artist_name
|
||||||
end
|
end
|
||||||
|
|
||||||
|
defp search_query(base_query, ""), do: base_query
|
||||||
|
|
||||||
|
defp search_query(base_query, query) do
|
||||||
|
query_term = "%#{String.downcase(query)}%"
|
||||||
|
|
||||||
|
from t in base_query,
|
||||||
|
where:
|
||||||
|
like(fragment("lower(?)", t.title), ^query_term) or
|
||||||
|
like(fragment("lower(json_extract(?, '$.name'))", t.artist), ^query_term) or
|
||||||
|
like(fragment("lower(json_extract(?, '$.title'))", t.album), ^query_term)
|
||||||
|
end
|
||||||
|
|
||||||
defp polyfill_artist(artist, musicbrainz_id) do
|
defp polyfill_artist(artist, musicbrainz_id) do
|
||||||
if is_nil(artist.musicbrainz_id) or artist.musicbrainz_id == "" do
|
if is_nil(artist.musicbrainz_id) or artist.musicbrainz_id == "" do
|
||||||
%{artist | musicbrainz_id: musicbrainz_id}
|
%{artist | musicbrainz_id: musicbrainz_id}
|
||||||
|
|||||||
Reference in New Issue
Block a user