Tidy up control flow in trace creation

This commit is contained in:
Tom Hughes 2018-08-29 08:34:38 +01:00
parent 942e62117f
commit 80a6e8da05

View file

@ -110,19 +110,16 @@ class TracesController < ApplicationController
end end
def create def create
@title = t ".upload_trace"
logger.info(params[:trace][:gpx_file].class.name) logger.info(params[:trace][:gpx_file].class.name)
if params[:trace][:gpx_file].respond_to?(:read) if params[:trace][:gpx_file].respond_to?(:read)
begin begin
do_create(params[:trace][:gpx_file], params[:trace][:tagstring], @trace = do_create(params[:trace][:gpx_file], params[:trace][:tagstring],
params[:trace][:description], params[:trace][:visibility]) params[:trace][:description], params[:trace][:visibility])
rescue StandardError => ex rescue StandardError => ex
if @trace.valid? logger.debug ex
flash[:error] = t("traces.create.upload_failed")
logger.debug ex
end
render :action => "new"
return
end end
if @trace.id if @trace.id
@ -130,6 +127,10 @@ class TracesController < ApplicationController
flash[:warning] = t ".traces_waiting", :count => current_user.traces.where(:inserted => false).count if current_user.traces.where(:inserted => false).count > 4 flash[:warning] = t ".traces_waiting", :count => current_user.traces.where(:inserted => false).count if current_user.traces.where(:inserted => false).count > 4
redirect_to :action => :list, :display_name => current_user.display_name redirect_to :action => :list, :display_name => current_user.display_name
else
flash[:error] = t("traces.create.upload_failed") if @trace.valid?
render :action => "new"
end end
else else
@trace = Trace.new(:name => "Dummy", @trace = Trace.new(:name => "Dummy",
@ -140,7 +141,7 @@ class TracesController < ApplicationController
:timestamp => Time.now.getutc) :timestamp => Time.now.getutc)
@trace.valid? @trace.valid?
@trace.errors.add(:gpx_file, "can't be blank") @trace.errors.add(:gpx_file, "can't be blank")
@title = t ".upload_trace"
render :action => "new" render :action => "new"
end end
end end
@ -314,11 +315,11 @@ class TracesController < ApplicationController
end end
if params[:file].respond_to?(:read) if params[:file].respond_to?(:read)
do_create(params[:file], tags, description, visibility) trace = do_create(params[:file], tags, description, visibility)
if @trace.id if trace.id
render :plain => @trace.id.to_s render :plain => trace.id.to_s
elsif @trace.valid? elsif trace.valid?
head :internal_server_error head :internal_server_error
else else
head :bad_request head :bad_request
@ -342,7 +343,7 @@ class TracesController < ApplicationController
# Create the trace object, falsely marked as already # Create the trace object, falsely marked as already
# inserted to stop the import daemon trying to load it # inserted to stop the import daemon trying to load it
@trace = Trace.new( trace = Trace.new(
:name => name, :name => name,
:tagstring => tags, :tagstring => tags,
:description => description, :description => description,
@ -352,31 +353,33 @@ class TracesController < ApplicationController
:timestamp => Time.now.getutc :timestamp => Time.now.getutc
) )
Trace.transaction do if trace.valid?
begin Trace.transaction do
# Save the trace object begin
@trace.save! # Save the trace object
trace.save!
# Rename the temporary file to the final name # Rename the temporary file to the final name
FileUtils.mv(filename, @trace.trace_name) FileUtils.mv(filename, trace.trace_name)
rescue StandardError rescue StandardError
# Remove the file as we have failed to update the database # Remove the file as we have failed to update the database
FileUtils.rm_f(filename) FileUtils.rm_f(filename)
# Pass the exception on # Pass the exception on
raise raise
end end
begin begin
# Clear the inserted flag to make the import daemon load the trace # Clear the inserted flag to make the import daemon load the trace
@trace.inserted = false trace.inserted = false
@trace.save! trace.save!
rescue StandardError rescue StandardError
# Remove the file as we have failed to update the database # Remove the file as we have failed to update the database
FileUtils.rm_f(@trace.trace_name) FileUtils.rm_f(trace.trace_name)
# Pass the exception on # Pass the exception on
raise raise
end
end end
end end
@ -387,6 +390,8 @@ class TracesController < ApplicationController
else else
current_user.preferences.create(:k => "gps.trace.visibility", :v => visibility) current_user.preferences.create(:k => "gps.trace.visibility", :v => visibility)
end end
trace
end end
def offline_warning def offline_warning