Guard against nil medium in scrobble_medium

Closes #76
This commit is contained in:
Claudio Ortolina
2026-03-05 19:54:32 +00:00
parent 6d72df3905
commit e8f393c5a0
+30 -22
View File
@@ -67,35 +67,36 @@ defmodule MusicLibrary.ScrobbleActivity do
end end
def scrobble_medium(number, release_with_tracks, {:finished_at, finished_at}) do def scrobble_medium(number, release_with_tracks, {:finished_at, finished_at}) do
medium_duration = case find_medium(release_with_tracks, number) do
release_with_tracks.media {:ok, medium} ->
|> Enum.find(fn medium -> medium.number == number end) medium_duration = Release.medium_duration(medium)
|> Release.medium_duration() started_at = DateTime.add(finished_at, -medium_duration, :millisecond)
scrobble_medium(number, release_with_tracks, {:started_at, started_at})
started_at = DateTime.add(finished_at, -medium_duration, :millisecond) {:error, :medium_not_found} ->
scrobble_medium(number, release_with_tracks, {:started_at, started_at}) {:error, :medium_not_found}
end
end end
def scrobble_medium(number, release_with_tracks, {:started_at, started_at}) do def scrobble_medium(number, release_with_tracks, {:started_at, started_at}) do
medium_duration = case find_medium(release_with_tracks, number) do
release_with_tracks.media {:ok, medium} ->
|> Enum.find(fn medium -> medium.number == number end) medium_duration = Release.medium_duration(medium)
|> Release.medium_duration()
if medium_duration == 0 do if medium_duration == 0 do
{:error, :no_duration} {:error, :no_duration}
else else
with {:ok, session_key} <- fetch_session_key() do with {:ok, session_key} <- fetch_session_key() do
medium = {scrobbles, _finished_at} =
release_with_tracks.media medium.tracks
|> Enum.find(fn medium -> medium.number == number end) |> to_scrobbles(release_with_tracks, started_at)
{scrobbles, _finished_at} = LastFm.scrobble(scrobbles, session_key)
medium.tracks end
|> to_scrobbles(release_with_tracks, started_at) end
LastFm.scrobble(scrobbles, session_key) {:error, :medium_not_found} ->
end {:error, :medium_not_found}
end end
end end
@@ -176,6 +177,13 @@ defmodule MusicLibrary.ScrobbleActivity do
end) end)
end end
defp find_medium(release_with_tracks, number) do
case Enum.find(release_with_tracks.media, fn medium -> medium.number == number end) do
nil -> {:error, :medium_not_found}
medium -> {:ok, medium}
end
end
defp main_artist_name([]), do: nil defp main_artist_name([]), do: nil
defp main_artist_name([artist | _rest]), do: artist.name defp main_artist_name([artist | _rest]), do: artist.name