diff --git a/ruby/lib/jam_ruby/models/jam_track_search.rb b/ruby/lib/jam_ruby/models/jam_track_search.rb index ba93d7dab..f22ca3d27 100644 --- a/ruby/lib/jam_ruby/models/jam_track_search.rb +++ b/ruby/lib/jam_ruby/models/jam_track_search.rb @@ -19,6 +19,7 @@ module JamRuby KEY_GENRES = 'genres' KEY_INSTRUMENTS = 'instruments' KEY_LANGUAGE = 'language' + KEY_ORIGINAL_ARTIST = 'original_artist' def self.json_schema return @@jschema ||= { @@ -27,6 +28,7 @@ module JamRuby KEY_INSTRUMENTS => [], KEY_GENRES => [], KEY_LANGUAGE => '', + KEY_ORIGINAL_ARTIST => '', KEY_RESULT_TYPES => [], KEY_PAGE_NUM => 1, KEY_PER_PAGE => PER_PAGE, @@ -77,6 +79,10 @@ module JamRuby end end + unless (artist_name = query[KEY_ORIGINAL_ARTIST]).blank? + rel = rel.where(original_artist: artist_name) + end + rel end @@ -90,7 +96,7 @@ module JamRuby else has_songs, has_artists = true, true end - result_sets = filter[KEY_RESULT_SETS] = self.class.json_schema[KEY_RESULT_SETS] + result_sets = filter[KEY_RESULT_SETS] = self.class.json_schema[KEY_RESULT_SETS].clone if has_songs rel = do_search(query) unless (val = query[KEY_SEARCH_STR]).blank? @@ -123,10 +129,12 @@ module JamRuby if has_artists rel = do_search(query) + counter = rel.select("DISTINCT(jam_tracks.original_artist)") rel = rel.select("DISTINCT ON(jam_tracks.original_artist) jam_tracks.id, jam_tracks.original_artist") unless (val = query[KEY_SEARCH_STR]).blank? rel = rel.where("original_artist LIKE ?","%#{val}%") + counter = counter.and(rel) end rel = rel.order(:original_artist) @@ -136,12 +144,14 @@ module JamRuby results = rel.all.collect do |jt| { 'id' => jt.id, 'artist' => jt.original_artist } end + + artist_count = counter.count result_sets[KEY_ARTISTS] = { KEY_RESULTS => results, KEY_PAGE_NUM => pgnum, - KEY_TOTAL_COUNT => rel.total_entries, - KEY_PAGE_COUNT => rel.total_pages, + KEY_TOTAL_COUNT => artist_count, + KEY_PAGE_COUNT => (artist_count / query[KEY_PER_PAGE].to_f).ceil, } end