53 lines
1.4 KiB
Ruby
53 lines
1.4 KiB
Ruby
module Robbie
|
|
module Parsers
|
|
class Album < BaseParser
|
|
class << self
|
|
def find(album_id)
|
|
response = query("/data/v1/album/info", {
|
|
albumid: album_id,
|
|
include: "tracks"
|
|
})
|
|
parse(response["album"])
|
|
end
|
|
|
|
def parse(data)
|
|
return if data.nil?
|
|
|
|
album = parse_meta(data)
|
|
if data["tracks"].is_a?(Array)
|
|
current_disc = 0
|
|
position = 0
|
|
album.tracks = data["tracks"].map do |track|
|
|
if track["disc"] && track["disc"] != current_disc
|
|
position = 0
|
|
current_disc = track["disc"]
|
|
end
|
|
position += 1
|
|
|
|
Parsers::Track.parse_meta(track, current_disc, position)
|
|
end
|
|
else
|
|
album.tracks = []
|
|
end
|
|
album
|
|
end
|
|
|
|
def parse_meta(data)
|
|
return if data.nil?
|
|
|
|
params = {}
|
|
params[:id] = data["ids"]["albumId"] if data["ids"]
|
|
params[:title] = data["title"]
|
|
if data["originalReleaseDate"].is_a?(String)
|
|
params[:year] = data["originalReleaseDate"].split("-").first
|
|
elsif data["year"].is_a?(String)
|
|
params[:year] = data["year"].split("-").first
|
|
end
|
|
|
|
Robbie::Album.new(params)
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|