Add context function to scrobble a release
This commit is contained in:
@@ -25,6 +25,10 @@ defmodule MusicBrainz.Release do
|
|||||||
Enum.sum_by(medium.tracks, fn track -> track.length || 0 end)
|
Enum.sum_by(medium.tracks, fn track -> track.length || 0 end)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def tracks(release) do
|
||||||
|
Enum.flat_map(release.media, fn medium -> medium.tracks end)
|
||||||
|
end
|
||||||
|
|
||||||
def from_api_response(r) do
|
def from_api_response(r) do
|
||||||
%__MODULE__{
|
%__MODULE__{
|
||||||
id: r["id"],
|
id: r["id"],
|
||||||
|
|||||||
@@ -1,6 +1,38 @@
|
|||||||
defmodule MusicLibrary.ScrobbleActivity do
|
defmodule MusicLibrary.ScrobbleActivity do
|
||||||
|
alias LastFm.Scrobble
|
||||||
alias MusicLibrary.{Artists, Collection, Wishlist}
|
alias MusicLibrary.{Artists, Collection, Wishlist}
|
||||||
|
|
||||||
|
def scrobble(release_with_tracks, started_time \\ DateTime.utc_now()) do
|
||||||
|
session_key = MusicLibrary.Secrets.get!("last_fm_session_key").value
|
||||||
|
|
||||||
|
{scrobbles, _finished_time} =
|
||||||
|
release_with_tracks
|
||||||
|
|> MusicBrainz.Release.tracks()
|
||||||
|
|> Enum.map_reduce(started_time, fn track, time ->
|
||||||
|
album_artist =
|
||||||
|
if release_with_tracks.artists !== track.artists do
|
||||||
|
main_artist_name(release_with_tracks.artists)
|
||||||
|
end
|
||||||
|
|
||||||
|
time = time |> DateTime.add(track.length, :millisecond)
|
||||||
|
|
||||||
|
scrobble = %Scrobble{
|
||||||
|
artist: main_artist_name(track.artists),
|
||||||
|
album: release_with_tracks.title,
|
||||||
|
album_artist: album_artist,
|
||||||
|
track: track.title,
|
||||||
|
timestamp: DateTime.to_unix(time)
|
||||||
|
}
|
||||||
|
|
||||||
|
{scrobble, time}
|
||||||
|
end)
|
||||||
|
|
||||||
|
LastFm.scrobble(scrobbles, session_key)
|
||||||
|
end
|
||||||
|
|
||||||
|
defp main_artist_name([]), do: nil
|
||||||
|
defp main_artist_name([artist | _rest]), do: artist.name
|
||||||
|
|
||||||
def from_recent_tracks(recent_tracks, timezone) do
|
def from_recent_tracks(recent_tracks, timezone) do
|
||||||
all_artist_pairs = Artists.get_all_artist_pairs()
|
all_artist_pairs = Artists.get_all_artist_pairs()
|
||||||
recent_release_ids = recent_release_ids(recent_tracks)
|
recent_release_ids = recent_release_ids(recent_tracks)
|
||||||
|
|||||||
Reference in New Issue
Block a user