Class: MusicMetadataEnrichment::ReleasesController

Inherits:
ApplicationController show all
Includes:
Applicat::Mvc::Controller::Resource, ArtistConfirmation, BaseController
Defined in:
app/controllers/music_metadata_enrichment/releases_controller.rb

Instance Method Summary collapse

Methods included from ArtistConfirmation

#artist_selection, #build_artist, #confirm_artist, #create_artist, #redirect_after_artist_available, #render_modal_javascript_response, #set_template_name_for_xhr_or_render

Methods included from BaseController

#application_navigation, #navigation_product_name, #navigation_product_path

Instance Method Details

#announceObject



114
115
116
117
118
119
# File 'app/controllers/music_metadata_enrichment/releases_controller.rb', line 114

def announce
  build_release
  set_template_name_for_xhr_or_render
  
  render_modal_javascript_response if request.xhr?
end

#artist_confirmationObject



44
45
46
47
48
49
# File 'app/controllers/music_metadata_enrichment/releases_controller.rb', line 44

def artist_confirmation
  confirm_artist('new_release')
  set_template_name_for_xhr_or_render
  
  render_modal_javascript_response if request.xhr?
end

#autocompleteObject



27
28
29
30
31
32
# File 'app/controllers/music_metadata_enrichment/releases_controller.rb', line 27

def autocomplete
  artist = MusicArtist.find(params[:artist_id])
  render json: (
    artist.releases.select('id, is_lp, name').where("LOWER(name) LIKE ?", "#{params[:term].to_s.strip.downcase}%").order(:name).limit(10).map{|r| { id: r.id, value: "#{r.name} (#{r.is_lp ? 'LP' : 'EP'})" } }
  ), root: false
end

#by_nameObject



149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
# File 'app/controllers/music_metadata_enrichment/releases_controller.rb', line 149

def by_name
  if params[:artist_name].blank? || params[:name].blank?
     flash[:alert] = I18n.t('music_releases.by_name.artist_name_or_name_blank')
     redirect_to music_releases_path(artist_name: params[:artist_name], name: params[:name]) and return
   end
   
  @releases = MusicRelease.by_artist_and_name([params[:artist_name], params[:name]])
  @release = @releases.first if params[:page].blank? && @releases.count == 1
  
  if @release
    get_variables_for_show
    render :show
  else
    @releases = MusicRelease.artist_and_name_like(params[:artist_name], params[:name]) if @releases.nil? || @releases.count == 0
    @releases = @releases.paginate(per_page: 10, page: params[:page] || 1)
  end
end

#createObject



85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# File 'app/controllers/music_metadata_enrichment/releases_controller.rb', line 85

def create
  params[:music_release] ||= {}
  name_and_mbid = params[:music_release].delete(:name_and_mbid).split(';')
  artist = MusicArtist.find(params[:music_release][:artist_id])
  musicbrainz_release_group = MusicBrainz::ReleaseGroup.find(name_and_mbid.last)
  is_lp = musicbrainz_release_group.type == 'Album'
  @release = MusicRelease.where(artist_id: artist.id, name: name_and_mbid.first, is_lp: is_lp).first
  
  if @release
    flash[:alert] = I18n.t('music_releases.create.release_already_imported')
  else
    @release = MusicRelease.create(
      artist_id: params[:music_release][:artist_id], artist_name: artist.name, name: name_and_mbid.first, is_lp: is_lp
    )
    
    if @release.persisted?
      flash[:notice] = I18n.t('music_releases.create.scheduled_release_for_import')
    else
      flash[:alert] = release.errors.full_messages.join('. ')
    end
  end
  
  add_to_year_in_review_music_top_releases if @release.persisted? && params[:year_in_review_music_id].present?
  @path = (params[:group_id].present? ? music_group_path(params[:group_id]) : music_path) unless params[:year_in_review_music_id].present?
  
  redirect_to @path unless @path.blank? || request.xhr?
  render_modal_javascript_response if request.xhr?
end

#create_announcementObject



121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
# File 'app/controllers/music_metadata_enrichment/releases_controller.rb', line 121

def create_announcement
  build_release

  if @release.future_release_date.blank? || !@release.valid?
    if @release.future_release_date.blank?
      @release.errors[:future_release_date] << I18n.t('errors.messages.blank')
    end
    
    @template = :announce
  else
    @release.save!
    flash[:notice] = I18n.t('music_releases.create_announcement.success')
    
    @path = params[:group_id].present? ? music_group_path(params[:group_id]) : music_path 
  end
      
  add_to_year_in_review_music_top_releases if @release.persisted? && params[:year_in_review_music_id].present?
  
  render @template if @template.present? && !request.xhr?
  redirect_to @path unless @path.blank? || request.xhr?
  render_modal_javascript_response if request.xhr?
end

#exportObject



167
168
169
170
171
172
173
# File 'app/controllers/music_metadata_enrichment/releases_controller.rb', line 167

def export
  @group = MusicMetadataEnrichment::Group.find(params[:id])
  @current_releases = @group.releases.released_in_year(Time.now.strftime('%Y')).order('released_at ASC')
  @future_releases = @group.releases.released_in_year(Time.now.strftime('%Y').to_i + 1).order('released_at ASC')
  
  render layout: false
end

#indexObject



9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'app/controllers/music_metadata_enrichment/releases_controller.rb', line 9

def index
  if request.xhr? 
    @year = params[:year]
    
    if request.original_url.match('/groups/') && params[:id]
      @group = MusicMetadataEnrichment::Group.find(params[:id])
      @releases = @group.releases
    elsif params[:user_id].present?
      @user = User.by_slug_or_id(params[:user_id])
      @releases = @user.music_releases
    end
    
    @releases = @releases.released_in_year(params[:year]).order('released_at DESC').paginate(per_page: 25, page: params[:page] || 1)
    
    render partial: 'music_metadata_enrichment/releases/collection', locals: { paginate: true, with_artist: true }, layout: false
  end
end

#nameObject



58
59
60
61
62
63
64
# File 'app/controllers/music_metadata_enrichment/releases_controller.rb', line 58

def name
  build_release
  
  set_template_name_for_xhr_or_render
  
  render_modal_javascript_response if request.xhr?
end

#name_confirmationObject



66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'app/controllers/music_metadata_enrichment/releases_controller.rb', line 66

def name_confirmation
  build_release
  @release_groups = @release.groups(true)
  
  if @release_groups.none?
    flash[:notice] = I18n.t('music_releases.name_confirmation.release_not_found')
    @path = announce_music_releases_path(
      (params[:group_id].present? ? {group_id: params[:group_id]} : {}).merge(
        music_release: { artist_id: params[:music_release][:artist_id], name: params[:music_release][:name] }
      )
    )
  end
  
  set_template_name_for_xhr_or_render
  
  redirect_to @path unless @path.blank? || request.xhr?
  render_modal_javascript_response if request.xhr?
end

#newObject



34
35
36
37
38
39
40
41
42
# File 'app/controllers/music_metadata_enrichment/releases_controller.rb', line 34

def new
  if params[:artist_id].present?
    redirect_to name_music_releases_path(music_release: { artist_id: params[:artist_id]})
  else
    build_artist
  end
  
  set_template_name_for_xhr_or_render
end

#resourceObject



175
176
177
# File 'app/controllers/music_metadata_enrichment/releases_controller.rb', line 175

def resource
  @release
end

#select_artistObject



51
52
53
54
55
56
# File 'app/controllers/music_metadata_enrichment/releases_controller.rb', line 51

def select_artist
  artist_selection('new_release')
  set_template_name_for_xhr_or_render
  
  render_modal_javascript_response if request.xhr?
end

#showObject



144
145
146
147
# File 'app/controllers/music_metadata_enrichment/releases_controller.rb', line 144

def show
  @release = MusicRelease.find(params[:id])
  get_variables_for_show
end