2011-06-14 18:06:46 +00:00
|
|
|
class ArtistController < ApplicationController
|
2011-06-14 20:01:42 +00:00
|
|
|
def data
|
2011-09-09 22:13:02 +00:00
|
|
|
# Bad params
|
2011-11-27 13:01:46 +00:00
|
|
|
if params[:artist].nil? or params[:artist].empty?
|
|
|
|
return render json: { status: 'loading_failed' }, status: 404
|
2011-06-29 04:11:54 +00:00
|
|
|
end
|
2011-09-09 22:13:02 +00:00
|
|
|
|
|
|
|
# Searching for artist
|
2011-10-20 11:01:57 +00:00
|
|
|
artist_name = get_artist_name_from_query
|
2011-11-27 13:01:46 +00:00
|
|
|
@artist = Artist.find_by_name(artist_name)
|
2011-09-09 22:13:02 +00:00
|
|
|
|
2011-10-20 11:01:57 +00:00
|
|
|
# Artist not found in DB
|
2011-09-09 22:13:02 +00:00
|
|
|
unless @artist
|
2011-10-20 11:01:57 +00:00
|
|
|
results = MusicBrainz::Artist.search(artist_name)
|
2011-06-18 15:58:51 +00:00
|
|
|
if results.empty?
|
2011-11-27 13:01:46 +00:00
|
|
|
return render json: { status: 'not_found' }, status: 404
|
2011-10-20 11:01:57 +00:00
|
|
|
end
|
2011-11-23 22:12:15 +00:00
|
|
|
best_match = results[0][:sort_name]
|
2011-10-20 11:06:26 +00:00
|
|
|
if best_match != artist_name and similar_names(artist_name, best_match)
|
2011-10-20 11:02:39 +00:00
|
|
|
return render json: { status: 'corrected', correct_name: best_match }
|
2011-10-20 11:20:19 +00:00
|
|
|
elsif best_match == artist_name
|
2011-10-20 11:01:57 +00:00
|
|
|
queue_loading(artist_name, results[0][:mbid])
|
2011-06-15 04:38:29 +00:00
|
|
|
else
|
2011-09-09 22:13:02 +00:00
|
|
|
@suggestions = results.take(5)
|
2011-10-20 11:02:39 +00:00
|
|
|
return render json: { status: 'suggestions', html: render_compact_partial(:suggestions) }
|
2011-06-15 04:38:29 +00:00
|
|
|
end
|
2011-09-09 22:13:02 +00:00
|
|
|
end
|
|
|
|
|
2011-11-27 12:37:51 +00:00
|
|
|
compile_page(
|
2011-11-28 12:24:47 +00:00
|
|
|
data: @artist,
|
2011-11-27 12:37:51 +00:00
|
|
|
partial: "artist/page",
|
|
|
|
title: @artist.name,
|
2011-10-20 11:06:26 +00:00
|
|
|
status: @artist.status_str,
|
2011-11-28 12:24:47 +00:00
|
|
|
callback: {object: :player, action: :updateLibrary},
|
2011-11-28 23:22:29 +00:00
|
|
|
cache_for: (1.day if @artist.status_str == "ok")
|
2011-11-27 12:37:51 +00:00
|
|
|
)
|
2011-09-09 22:13:02 +00:00
|
|
|
end
|
|
|
|
|
2011-10-20 11:01:57 +00:00
|
|
|
private
|
2011-09-09 22:13:02 +00:00
|
|
|
|
2011-10-20 11:01:57 +00:00
|
|
|
def queue_loading artist_name, mbid
|
2011-10-20 11:02:39 +00:00
|
|
|
@artist = Artist.create( name: artist_name, mbid: mbid, status: 0 )
|
2011-10-20 11:01:57 +00:00
|
|
|
Delayed::Job.enqueue(LoadArtistJob.new(artist_name))
|
2011-06-14 20:01:42 +00:00
|
|
|
end
|
2011-10-20 11:06:26 +00:00
|
|
|
|
|
|
|
def similar_names name1, name2
|
|
|
|
(name2.downcase == name1.downcase or name2.downcase == 'the '+ name1.downcase)
|
|
|
|
end
|
2011-06-14 18:06:46 +00:00
|
|
|
end
|