Tracks import
This commit is contained in:
+74
-2
@@ -2,7 +2,18 @@ class Album < ActiveRecord::Base
|
||||
belongs_to :artist
|
||||
has_many :tracks
|
||||
|
||||
attr_accessible :artist_id, :pic, :rovi_id, :title, :year
|
||||
scope :shown, lambda {
|
||||
self
|
||||
.where('"albums"."year" > ?', 0)
|
||||
.where(is_hidden: false)
|
||||
.joins(:tracks)
|
||||
.group('"albums"."id"')
|
||||
.having('count("tracks"."id") > ?', 0)
|
||||
.order('"albums"."year" ASC')
|
||||
}
|
||||
|
||||
attr_accessible :artist_id, :pic, :rovi_id, :title, :year, :is_hidden
|
||||
VA = "Various Artists"
|
||||
|
||||
def pic_safe
|
||||
unless pic.nil?
|
||||
@@ -13,7 +24,7 @@ class Album < ActiveRecord::Base
|
||||
end
|
||||
|
||||
def load_pic
|
||||
info = BeatParser::Sources::Lastfm.album_info(artist.name, title)
|
||||
info = BeatParser::Sources::Lastfm.album_info((artist.nil? ? VA : artist.name), title)
|
||||
unless info[:pic].nil?
|
||||
update_attributes(pic: info[:pic])
|
||||
info[:pic]
|
||||
@@ -21,4 +32,65 @@ class Album < ActiveRecord::Base
|
||||
"/assets/images/album-dummy.png"
|
||||
end
|
||||
end
|
||||
|
||||
def dump_json
|
||||
Jbuilder.encode do |j|
|
||||
j.album_title title
|
||||
j.album_year year
|
||||
j.album_pic pic_safe
|
||||
j.album_tracks tracks.to_a do |j, track|
|
||||
j.track_id track.id
|
||||
j.track_title track.title
|
||||
j.track_duration track.duration
|
||||
j.track_disc track.disc_id
|
||||
j.track_position track.position
|
||||
j.meta do |j|
|
||||
j.id track.id
|
||||
j.title track.title
|
||||
j.duration track.duration
|
||||
j.length track.length
|
||||
j.artists track.artists.map(&:name)
|
||||
j.album title
|
||||
j.album_pic pic_safe
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
|
||||
end
|
||||
|
||||
def import
|
||||
return unless rovi_id?
|
||||
|
||||
Album.import(Robbie::Album.find(rovi_id))
|
||||
end
|
||||
|
||||
class << self
|
||||
def import(rovi_album)
|
||||
data = BeatParser::Aggregator.new.album(rovi_album.id)
|
||||
album = Album.find_or_create_by_rovi_id(data[:id])
|
||||
album.update_attributes(
|
||||
title: data[:title],
|
||||
year: data[:year].to_i
|
||||
)
|
||||
data[:tracks].each do |track_meta|
|
||||
track = Track.find_or_create_by_rovi_id(track_meta[:id])
|
||||
track.update_attributes(
|
||||
album_id: album.id,
|
||||
disc_id: track_meta[:disc_id],
|
||||
position: track_meta[:position],
|
||||
title: track_meta[:title],
|
||||
duration: track_meta[:duration]
|
||||
)
|
||||
track_meta[:artists].each do |performer|
|
||||
performer_artist = Artist.find_or_create_by_rovi_id(performer[:id])
|
||||
performer_artist.update_attributes(
|
||||
name: performer[:name]
|
||||
)
|
||||
Performer.find_or_create_by_artist_id_and_track_id(performer_artist.id, track.id)
|
||||
end
|
||||
end
|
||||
album
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
+35
-16
@@ -11,21 +11,39 @@ class Artist < ActiveRecord::Base
|
||||
end
|
||||
|
||||
def dump_json
|
||||
serialized = to_json(
|
||||
include: {
|
||||
albums: {
|
||||
include: {
|
||||
tracks: {
|
||||
methods: [:length],
|
||||
except: [:created_at, :updated_at, :rovi_id, :album_id]
|
||||
}
|
||||
},
|
||||
except: [:created_at, :updated_at, :rovi_id, :pic],
|
||||
methods: [:pic_safe]
|
||||
}
|
||||
},
|
||||
except: [:created_at, :updated_at, :rovi_id],
|
||||
)
|
||||
Jbuilder.encode do |j|
|
||||
j.artist_title name
|
||||
j.artist_pic pic
|
||||
j.artist_bio bio
|
||||
j.artist_loaded loaded?
|
||||
j.artist_albums albums.shown.to_a do |j, album|
|
||||
j.album_title album.title
|
||||
j.album_year album.year
|
||||
j.album_pic album.pic_safe
|
||||
j.album_tracks album.tracks.to_a do |j, track|
|
||||
j.track_id track.id
|
||||
j.track_title track.title
|
||||
j.track_duration track.duration
|
||||
j.track_disc track.disc_id
|
||||
j.track_position track.position
|
||||
j.meta do |j|
|
||||
j.id track.id
|
||||
j.title track.title
|
||||
j.duration track.duration
|
||||
j.length track.length
|
||||
j.artists track.artists.map(&:name)
|
||||
j.album album.title
|
||||
j.album_pic album.pic_safe
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def import
|
||||
return unless rovi_id?
|
||||
|
||||
Artist.import(Robbie::Artist.find(rovi_id))
|
||||
end
|
||||
|
||||
class << self
|
||||
@@ -43,7 +61,7 @@ class Artist < ActiveRecord::Base
|
||||
end
|
||||
|
||||
def import(rovi_artist)
|
||||
data = BeatParser::Aggregator.new.combine(rovi_artist.id)
|
||||
data = BeatParser::Aggregator.new.artist(rovi_artist.id)
|
||||
artist = Artist.find_or_create_by_rovi_id(data[:id])
|
||||
artist.update_attributes(
|
||||
name: data[:name],
|
||||
@@ -83,6 +101,7 @@ class Artist < ActiveRecord::Base
|
||||
)
|
||||
ArtistGenre.find_or_create_by_artist_id_and_genre_id(artist.id, genre.id)
|
||||
end
|
||||
artist
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user