Tracks import

This commit is contained in:
Gregory Eremin
2012-09-01 21:55:01 +04:00
parent b5f616a9d9
commit 43422624f1
34 changed files with 1094 additions and 156 deletions
+74 -2
View File
@@ -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
View File
@@ -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