diff --git a/rails/app/models/release.rb b/rails/app/models/release.rb index 49bec74..ce025ad 100644 --- a/rails/app/models/release.rb +++ b/rails/app/models/release.rb @@ -14,7 +14,7 @@ class Release < ActiveRecord::Base if g_releases[release.release_group].nil? g_releases[release.release_group] = {} end - g_releases[release.release_group][release.id] = release + g_releases[release.release_group] << release end return g_releases end diff --git a/rails/app/models/track.rb b/rails/app/models/track.rb new file mode 100644 index 0000000..9533bd8 --- /dev/null +++ b/rails/app/models/track.rb @@ -0,0 +1,59 @@ +class Track < ActiveRecord::Base + set_table_name 'musicbrainz.bh_track' + + @@bad_names = [ + '[silence]' + ] + + def self.getReleaseTracks(release_ids, group_by_release = false) + + tracks = Track + .all(:conditions => ['release_id IN(?)', release_ids], :order => 'release_id ASC, position ASC') + .map{|track| track.length = (track.length /= 1000).round; track} + + if group_by_release + g_tracks = {} + tracks.each do |track| + if g_tracks[track.release_id].nil? + g_tracks[track.release_id] = {} + end + g_tracks[track.release_id][track.id] = track + end + return g_tracks + end + + tracks + end + + def self.getUniqueReleaseTracks(release_ids) + tracks = self.getReleaseTracks(release_ids, true) + + unique_tracks = [] + track_list = { + 'album' => [], + 'bonus' => [] + } + + tracks.shift[1].each do |track| + unless @@bad_names.include?(track[1].name) + track_list['album'] << track[1] + unique_tracks << self.clearName(track[1].name) + end + end + + tracks.each do |group| + group.each do |track| + unless @@bad_names.include?(track[1].name) && unique_tracks.include?(self.clearName(track[1].name)) + track_list['bonus'] << track[1] + unique_tracks << self.clearName(track[1].name) + end + end + end + + track_list + end + + def self.clearName(name) + name.gsub('&', 'and').gsub(/[^a-z0-9]/, '').downcase + end +end