Files
music_library/lib/music_brainz/release.ex
T
2025-05-04 21:10:40 +01:00

51 lines
1.1 KiB
Elixir

defmodule MusicBrainz.Release do
@enforce_keys [:id, :date, :barcode, :media]
defstruct [:id, :date, :barcode, :media]
defmodule Medium do
@enforce_keys [:format, :number, :track_count, :tracks]
defstruct [:format, :number, :track_count, :tracks]
end
defmodule Track do
@enforce_keys [:id, :title, :length, :number, :position]
defstruct [:id, :title, :length, :number, :position]
end
def media_count(release) do
Enum.count(release.media)
end
def from_api_response(r) do
%__MODULE__{
id: r["id"],
date: r["date"],
barcode: r["barcode"],
media: parse_media(r["media"])
}
end
defp parse_media(media) do
Enum.map(media, fn m ->
%Medium{
format: m["format"],
number: m["position"],
track_count: m["track-count"],
tracks: parse_tracks(m["tracks"])
}
end)
end
defp parse_tracks(tracks) do
Enum.map(tracks, fn t ->
%Track{
id: t["id"],
title: t["title"],
length: t["length"],
number: t["number"],
position: t["position"]
}
end)
end
end